Ejemplo n.º 1
0
 public function handle_request()
 {
     //获取关注的微信用户
     $WechatInfoList = Model_Wechat_WechatUsers::getWechatInfoListById($this->id, $this->limit);
     //判断当前队列是否处理完成
     if (empty($WechatInfoList)) {
         //清空游标
         $this->setFlag(array('id' => 0));
         //停止shell调用
         $this->setStop();
         //写过程日志
         $this->setLog('处理完成');
         exit;
     }
     $WechatMbroker = new Bll_Wechat_Mbroker_WechatMbroker();
     //数据处理
     foreach ($WechatInfoList as $list) {
         $this->id = $list['id'];
         //判断微信是否关注
         if ($list['status'] != Model_Wechat_WechatUsers::subscribe) {
             $this->setLog(date('Y-m-d H:i:s') . ' openid:' . $list['openId'] . ' userid:' . $list['userId'] . ' 未关注');
             continue;
         }
         //判断关注账号是否绑定
         if (!$list['userId']) {
             $this->setLog(date('Y-m-d H:i:s') . ' openid:' . $list['openId'] . ' userid:' . $list['userId'] . ' 微信未绑定');
             continue;
         }
         //推送消息
         $WechatMbroker->setMbrokeNoticeFromTemplate($list['openId'], $list['userId'], $list['userType']);
         //记录游标
         $this->setFlag(array('id' => $this->id));
     }
     //休息10毫秒
     $this->setShCommonSleepTime(0.01);
 }
Ejemplo n.º 2
0
 /**
  * 绑定微信id和安居客id
  * @param $UserId
  * @param $OpenId
  * @param $UserType
  */
 public static function bindingOpenidTOUserid($UserId, $OpenId, $UserType)
 {
     //查询是否存在账号信息
     $WechatInfo = Model_Wechat_WechatUsers::getWechatInfoByOpenId($OpenId);
     if ($WechatInfo) {
         if ($WechatInfo['status'] == 1 && $UserId == $WechatInfo['userId']) {
             //关注账号信息已经登记
         } else {
             Model_Wechat_WechatUsers::updateUserIdByOpenId($OpenId, $UserId, $UserType);
         }
     } else {
         $WechatMbroker = new Bll_Wechat_Mbroker_WechatMbroker();
         $accountId = $WechatMbroker->accountId;
         Model_Wechat_WechatUsers::addWechatUsers($accountId, $OpenId, $UserId, $UserType);
     }
 }
Ejemplo n.º 3
0
 /**
  * 微信用户关注,取消关注
  * @param $openId
  * @param $status 1-关注,2-取消关注
  * @return array
  */
 public static function updateStatusByOpenId($openId, $status = 1)
 {
     $native_sql = 'update wechat_users set `status`=?,user_id=0,user_type=0 where open_id=?';
     return Model_Wechat_WechatUsers::data_access()->native_sql($native_sql, array($status, $openId), false);
 }
Ejemplo n.º 4
0
 /**
  * 服务端:用于微信向我们自有服务器发起的请求的处理
  * 使用范文:服务器认证、监听事件、接收用户消息等
  * @return \Overtrue\Wechat\Server
  */
 public function WechatServer()
 {
     $WechatServer = new Overtrue\Wechat\Server($this->appId, $this->token, $this->encodingAESKey);
     $thisObj = $this;
     /**
      * 监听消息
      * @link http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html#.E6.96.87.E6.9C.AC.E6.B6.88.E6.81.AF
      * @link https://github.com/overtrue/wechat/wiki/%E6%B6%88%E6%81%AF%E7%9A%84%E4%BD%BF%E7%94%A8
      * $message
      * [signature] => 8f42463963cdbcfd828e1e7f02fc35065d806614
      * [timestamp] => 1431416888
      * [nonce] => 2009557068
      * [ToUserName] => gh_d24166bcf121
      * [FromUserName] => oBN0jt4WSP2np13IhruvIggaK31U
      * [CreateTime] => 1431416888
      * [MsgType] => text
      * [Content] => 0009
      * [MsgId] => 6147888721115024795
      */
     $WechatServer->on('message', function ($message) use($thisObj) {
         //消息逻辑处理
         switch ($message['MsgType']) {
             case 'text':
                 //文本消息
                 $thisObj->msgText($message);
                 break;
             case 'image':
                 //图片消息
                 $thisObj->msgImage($message);
                 break;
             case 'voice':
                 //语音消息
                 $thisObj->msgVoice($message);
                 break;
             case 'video':
                 //视频消息
                 $thisObj->msgVideo($message);
                 break;
             default:
                 return $thisObj->sendText('');
         }
     });
     /**
      * 监听事件
      * @link http://mp.weixin.qq.com/wiki/10/79502792eef98d6e0c6e1739da387346.html#.E6.96.87.E6.9C.AC.E6.B6.88.E6.81.AF
      * @link https://github.com/overtrue/wechat/wiki/%E7%9B%91%E5%90%AC%E5%BE%AE%E4%BF%A1%E4%BA%8B%E4%BB%B6
      *
      * ToUserName   接收者 ID(公众号 ID)
      * FromUserName 发送方帐号(一个 OpenID)
      * CreateTime   消息创建时间 (整型)
      * MsgType      event
      * Event        事件类型,ex: subscribe
      * EventKey     事件 Key 值,与自定义菜单接口中 Key 值对应
      */
     $WechatServer->on('event', function ($event) use($thisObj) {
         //消息逻辑处理
         switch ($event['Event']) {
             case 'subscribe':
                 //关注
                 //查询是否存在账号信息
                 $WechatInfo = Model_Wechat_WechatUsers::getWechatInfoByOpenId($event['FromUserName']);
                 if ($WechatInfo) {
                     if ($WechatInfo['status'] == 1) {
                         //关注账号信息已经登记
                     } else {
                         Model_Wechat_WechatUsers::updateStatusByOpenId($event['FromUserName'], Model_Wechat_WechatUsers::subscribe);
                     }
                 } else {
                     Model_Wechat_WechatUsers::addWechatUsers($thisObj->accountId, $event['FromUserName']);
                 }
                 //关注的后续处理
                 return $thisObj->eventSubscribe($event);
                 break;
             case 'unsubscribe':
                 //取消关注
                 //记录账号信息openid
                 Model_Wechat_WechatUsers::updateStatusByOpenId($event['FromUserName'], Model_Wechat_WechatUsers::unsubscribe);
                 return $thisObj->eventUnsubscribe($event);
                 break;
             case 'CLICK':
                 //菜单点击事件
                 return $thisObj->eventClick($event);
                 break;
             case 'LOCATION':
                 return $thisObj->eventClick($event);
                 break;
             default:
                 return $thisObj->sendText('');
         }
     });
     //返回消息体
     return $WechatServer->serve();
 }