コード例 #1
0
 /**
  * @descrpition 从微信服务器获取微信ACCESS_TOKEN
  * @return Ambigous|bool
  */
 private static function _getAccessToken()
 {
     $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . WECHAT_APPID . '&secret=' . WECHAT_APPSECRET;
     $accessToken = Curl::callWebServer($url, '', 'GET');
     if (!isset($accessToken['access_token'])) {
         return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败');
     }
     $accessToken['time'] = time();
     $accessTokenJson = json_encode($accessToken);
     //存入数据库
     $db = new mysql();
     $db->connect(DBHOST, DBUSER, DBPASSWORD, DBNAME);
     $sql = "update accesstoken set access_token='" . $accessTokenJson . "' where id=1";
     $db->query($sql);
     return $accessToken;
 }
コード例 #2
0
ファイル: accesstoken.lib.php プロジェクト: GaryZhan/wenwan
 /**
  * @descrpition 从微信服务器获取微信ACCESS_TOKEN
  * @return Ambigous|bool
  */
 private function _getAccessToken()
 {
     $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . WECHAT_APPID . '&secret=' . WECHAT_APPSECRET;
     $accessToken = Curl::callWebServer($url, '', 'GET');
     if (!isset($accessToken['access_token'])) {
         return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败');
     }
     $accessToken['time'] = time();
     $accessTokenJson = json_encode($accessToken);
     //存入数据库
     /**
      * 这里通常我会把access_token存起来,然后用的时候读取,判断是否过期,如果过期就重新调用此方法获取,存取操作请自行完成
      *
      * 请将变量$accessTokenJson给存起来,这个变量是一个字符串
      */
     return $accessToken;
 }
コード例 #3
0
 /**
  * @descrpition 从微信服务器获取js sdk api_ticket
  * @return Ambigous|bool
  */
 private static function _getJsapiTicket()
 {
     $accessToken = AccessToken::getAccessToken();
     $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" . $accessToken;
     $JsapiTicket = Curl::callWebServer($url, '', 'GET');
     if (!isset($JsapiTicket['ticket'])) {
         return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取js ticket失败');
     }
     $JsapiTicket['time'] = time();
     $JsapiTicketJson = json_encode($JsapiTicket);
     //存入数据库
     $db = new mysql();
     $db->connect(DBHOST, DBUSER, DBPASSWORD, DBNAME);
     $sql = "update jsapiticket set ticket='" . $JsapiTicketJson . "' where id=1";
     $db->query($sql);
     return $JsapiTicket;
 }
コード例 #4
0
    /**
     * @descrpition 从微信服务器获取微信API_TICKET
     * @return Ambigous|bool
     */
    private static function _getApiTicket(){
        $accessToken = AccessToken::getAccessToken(true);
        $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";

        $apiTicket = Curl::callWebServer($url, '', 'GET');
        if(!isset($apiTicket['ticket'])){
            return Msg::returnErrMsg(MsgConstant::ERROR_GET_API_TICKET, '获取API_TICKET失败');
        }
        $apiTicket['time'] = time();
        $apiTicketJson = json_encode($apiTicket);
        //存入数据库
        /**
         * 这里通常我会把api_ticket存起来,然后用的时候读取,判断是否过期,如果过期就重新调用此方法获取,存取操作请自行完成
         *
         * 请将变量$apiTicketJson给存起来,这个变量是一个字符串
         */
        $f = fopen(self::_fileName2Store(), 'w+');
        fwrite($f, $apiTicketJson);
        fclose($f);
        return $apiTicket;
    }
コード例 #5
0
 /**
  *@descrpition 从文件中获取access_token
  * @return string
  */
 private static function _getFromFile()
 {
     if (self::_existsToken()) {
         if (self::_expriseToken()) {
             //重新获取一次access_token,并且将文件删除,重新向文件里面写一次
             $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . WECHAT_APPID . '&secret=' . WECHAT_APPSECRET;
             $accessToken = Curl::callWebServer($url, '', 'GET');
             if (!isset($accessToken['access_token'])) {
                 return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败');
             }
             unlink('token.txt');
             file_put_contents('token.txt', $accessToken['access_token']);
         } else {
             $accessToken = file_get_contents('token.txt');
         }
     } else {
         $url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . WECHAT_APPID . '&secret=' . WECHAT_APPSECRET;
         $accessToken = Curl::callWebServer($url, '', 'GET');
         if (!isset($accessToken['access_token'])) {
             return Msg::returnErrMsg(MsgConstant::ERROR_GET_ACCESS_TOKEN, '获取ACCESS_TOKEN失败');
         }
         file_put_contents('token.txt', $accessToken['access_token']);
     }
     return $accessToken['access_token'];
 }
コード例 #6
0
    /**
     * @descrpition 图文 - 先调用self::newsItem()再调用本方法
     * @param $fromusername
     * @param $tousername
     * @param $item 数组,每个项由self::newsItem()返回
     * @param $funcFlag 默认为0,设为1时星标刚才收到的消息
     * @return string
     */
    public static function news($fromusername, $tousername, $item, $funcFlag = 0)
    {
        //多条图文消息信息,默认第一个item为大图,注意,如果图文数超过10,则将会无响应
        if (count($item) >= 10) {
            $request = array('fromusername' => $fromusername, 'tousername' => $tousername);
            return Msg::returnErrMsg(MsgConstant::ERROR_NEWS_ITEM_COUNT_MORE_TEN, '图文消息的项数不能超过10条', $request);
        }
        $template = <<<XML
<xml>
    <ToUserName><![CDATA[%s]]></ToUserName>
    <FromUserName><![CDATA[%s]]></FromUserName>
    <CreateTime>%s</CreateTime>
    <MsgType><![CDATA[news]]></MsgType>
    <ArticleCount>%s</ArticleCount>
    <Articles>
    %s
    </Articles>
    <FuncFlag>%s</FuncFlag>
</xml>
XML;
        return sprintf($template, $fromusername, $tousername, time(), count($item), implode($item), $funcFlag);
    }
コード例 #7
0
 /**
  * @descrpition 分发请求
  * @param $request
  * @return array|string
  */
 public static function switchType(&$request)
 {
     $data = array();
     switch ($request['msgtype']) {
         //事件
         case 'event':
             $request['event'] = strtolower($request['event']);
             switch ($request['event']) {
                 //关注
                 case 'subscribe':
                     //二维码关注
                     if (isset($request['eventkey']) && isset($request['ticket'])) {
                         $data = self::eventQrsceneSubscribe($request);
                         //普通关注
                     } else {
                         $data = self::eventSubscribe($request);
                     }
                     break;
                     //扫描二维码
                 //扫描二维码
                 case 'scan':
                     $data = self::eventScan($request);
                     break;
                     //地理位置
                 //地理位置
                 case 'location':
                     $data = self::eventLocation($request);
                     break;
                     //自定义菜单 - 点击菜单拉取消息时的事件推送
                 //自定义菜单 - 点击菜单拉取消息时的事件推送
                 case 'click':
                     $data = self::eventClick($request);
                     break;
                     //自定义菜单 - 点击菜单跳转链接时的事件推送
                 //自定义菜单 - 点击菜单跳转链接时的事件推送
                 case 'view':
                     $data = self::eventView($request);
                     break;
                     //自定义菜单 - 扫码推事件的事件推送
                 //自定义菜单 - 扫码推事件的事件推送
                 case 'scancode_push':
                     $data = self::eventScancodePush($request);
                     break;
                     //自定义菜单 - 扫码推事件且弹出“消息接收中”提示框的事件推送
                 //自定义菜单 - 扫码推事件且弹出“消息接收中”提示框的事件推送
                 case 'scancode_waitmsg':
                     $data = self::eventScancodeWaitMsg($request);
                     break;
                     //自定义菜单 - 弹出系统拍照发图的事件推送
                 //自定义菜单 - 弹出系统拍照发图的事件推送
                 case 'pic_sysphoto':
                     $data = self::eventPicSysPhoto($request);
                     break;
                     //自定义菜单 - 弹出拍照或者相册发图的事件推送
                 //自定义菜单 - 弹出拍照或者相册发图的事件推送
                 case 'pic_photo_or_album':
                     $data = self::eventPicPhotoOrAlbum($request);
                     break;
                     //自定义菜单 - 弹出微信相册发图器的事件推送
                 //自定义菜单 - 弹出微信相册发图器的事件推送
                 case 'pic_weixin':
                     $data = self::eventPicWeixin($request);
                     break;
                     //自定义菜单 - 弹出地理位置选择器的事件推送
                 //自定义菜单 - 弹出地理位置选择器的事件推送
                 case 'location_select':
                     $data = self::eventLocationSelect($request);
                     break;
                     //取消关注
                 //取消关注
                 case 'unsubscribe':
                     $data = self::eventUnsubscribe($request);
                     break;
                     //群发接口完成后推送的结果
                 //群发接口完成后推送的结果
                 case 'masssendjobfinish':
                     $data = self::eventMassSendJobFinish($request);
                     break;
                     //模板消息完成后推送的结果
                 //模板消息完成后推送的结果
                 case 'templatesendjobfinish':
                     $data = self::eventTemplateSendJobFinish($request);
                     break;
                 default:
                     return Msg::returnErrMsg(MsgConstant::ERROR_UNKNOW_TYPE, '收到了未知类型的消息', $request);
                     break;
             }
             break;
             //文本
         //文本
         case 'text':
             $data = self::text($request);
             break;
             //图像
         //图像
         case 'image':
             $data = self::image($request);
             break;
             //语音
         //语音
         case 'voice':
             $data = self::voice($request);
             break;
             //视频
         //视频
         case 'video':
             $data = self::video($request);
             break;
             //小视频
         //小视频
         case 'shortvideo':
             $data = self::shortvideo($request);
             break;
             //位置
         //位置
         case 'location':
             $data = self::location($request);
             break;
             //链接
         //链接
         case 'link':
             $data = self::link($request);
             break;
         default:
             return ResponsePassive::text($request['fromusername'], $request['tousername'], '收到未知的消息,我不知道怎么处理');
             break;
     }
     return $data;
 }
コード例 #8
0
ファイル: wechatrequest.lib.php プロジェクト: GaryZhan/wenwan
 /**
  * @descrpition 分发请求
  * @param $request
  * @return array|string
  */
 public static function switchType(&$request)
 {
     $data = array();
     switch ($request['msgtype']) {
         //事件
         case 'event':
             switch ($request['event']) {
                 //关注
                 case 'subscribe':
                     //二维码关注
                     if (isset($request['eventkey']) && isset($request['ticket'])) {
                         $data = self::eventQrsceneSubscribe($request);
                         //普通关注
                     } else {
                         $data = self::eventSubscribe($request);
                     }
                     break;
                     //扫描二维码
                 //扫描二维码
                 case 'scan':
                     $data = self::eventScan($request);
                     break;
                     //地理位置
                 //地理位置
                 case 'location':
                 case 'LOCATION':
                     $data = self::eventLocation($request);
                     break;
                     //自定义菜单
                 //自定义菜单
                 case 'click':
                 case 'CLICK':
                     $data = self::eventClick($request);
                     break;
                     //取消关注
                 //取消关注
                 case 'unsubscribe':
                     $data = self::eventUnsubscribe($request);
                     break;
                 default:
                     return Msg::returnErrMsg(MsgConstant::ERROR_UNKNOW_TYPE, '收到了未知类型的消息', $request);
                     break;
             }
             break;
             //文本
         //文本
         case 'text':
             $data = self::text($request);
             break;
             //图像
         //图像
         case 'image':
             $data = self::image($request);
             break;
             //语音
         //语音
         case 'voice':
             $data = self::voice($request);
             break;
             //视频
         //视频
         case 'video':
             $data = self::video($request);
             break;
             //位置
         //位置
         case 'location':
             $data = self::location($request);
             break;
             //链接
         //链接
         case 'link':
             $data = self::link($request);
             break;
         default:
             return ResponsePassive::text($request['fromusername'], $request['tousername'], '收到未知的消息,我不知道怎么处理');
             break;
     }
     return $data;
 }