• <li id="4h4cs"></li>
    <span id="4h4cs"></span>

    <label id="4h4cs"><samp id="4h4cs"></samp></label><rt id="4h4cs"><optgroup id="4h4cs"></optgroup></rt>
    1. <bdo id="4h4cs"></bdo>
    2. <bdo id="4h4cs"><meter id="4h4cs"></meter></bdo>
      <rt id="4h4cs"></rt><bdo id="4h4cs"><tbody id="4h4cs"></tbody></bdo>
      \r\n        
      \r\n            \r\n        <\/div>\r\n    <\/body>\r\n<\/html><\/pre>
      token = $token;\r\n    }\r\n \r\n    public function wcCheckSignature(){\r\n        try{\r\n            if (empty($this->token)) {\r\n                throw new Exception('TOKEN is not defined!');\r\n            }\r\n             \r\n            $signature = $_GET[\"signature\"];\r\n            $timestamp = $_GET[\"timestamp\"];\r\n            $nonce = $_GET[\"nonce\"];\r\n                 \r\n            $token = $this->token;\r\n            $tmpArr = array($token, $timestamp, $nonce);\r\n            \/\/ use SORT_STRING rule\r\n            sort($tmpArr, SORT_STRING);\r\n            $tmpStr = implode( $tmpArr );\r\n            $tmpStr = sha1( $tmpStr );\r\n \r\n            if( $tmpStr == $signature ){\r\n                    return true;\r\n            }else{\r\n                    return false;\r\n            }\r\n        } \r\n        catch (Exception $e) {\r\n            echo 'Message: ' .$e->getMessage();\r\n        }\r\n    }\r\n     \r\n    public function wcValid(){\r\n        $echoStr = isset($_GET[\"echostr\"]) && !empty($_GET[\"echostr\"]) ? addslashes($_GET[\"echostr\"]) : NULL;\r\n        if(is_null($echoStr)){\r\n            $this->wcMsg();\r\n        }\r\n        else{\r\n            \/\/valid signature , option\r\n            if($this->wcCheckSignature()){\r\n                echo $echoStr;\r\n                exit;\r\n            }\r\n            else{\r\n                exit();\r\n            }\r\n        }\r\n    }\r\n     \r\n    public function wcMsg(){\r\n        \/\/get post data, May be due to the different environments\r\n        $postStr = isset($GLOBALS[\"HTTP_RAW_POST_DATA\"]) && !empty($GLOBALS[\"HTTP_RAW_POST_DATA\"]) ? $GLOBALS[\"HTTP_RAW_POST_DATA\"] : \"\";\r\n        if(!empty($postStr)){\r\n            libxml_disable_entity_loader(true);\r\n            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);\r\n            $this->zcLog(TRUE,$postObj);\r\n             \r\n            $fromUsername = $postObj->FromUserName;\r\n            $toUsername = $postObj->ToUserName;\r\n            $MsgType = $postObj->MsgType;\r\n             \r\n            if($MsgType == 'event'){\/\/執(zhí)行事件相應(yīng)\r\n                $Event = $postObj->Event;\r\n                switch ($Event) {\r\n                    case 'subscribe':\/\/關(guān)注\r\n                        break;\r\n                    case 'unsubscribe':\/\/取消關(guān)注\r\n                        break;\r\n                    case 'SCAN':\/\/掃描\r\n                        break;\r\n                    case 'LOCATION':\/\/地址\r\n                        break;\r\n                    case 'CLICK':\/\/點(diǎn)擊時(shí)間\r\n                        break;\r\n                    case 'VIEW':\/\/跳轉(zhuǎn)\r\n                        break;\r\n                    case 'card_pass_check':\/\/卡券審核通過(guò)\r\n                        break;\r\n                    case 'card_not_pass_check':\/\/卡券審核失敗\r\n                        break;\r\n                    case 'user_get_card':\/\/用戶(hù)領(lǐng)取卡券\r\n                        break;\r\n                    case 'user_del_card':\/\/用戶(hù)刪除卡券\r\n                        break;\r\n                    case 'user_view_card':\/\/用戶(hù)瀏覽會(huì)員卡\r\n                        break;\r\n                    case 'user_consume_card':\/\/用戶(hù)核銷(xiāo)卡券\r\n                        break;\r\n                    case 'kf_create_session':\/\/創(chuàng)建會(huì)話(huà)\r\n                        break;\r\n                    case 'kf_close_session':\/\/關(guān)閉會(huì)話(huà)\r\n                        break;\r\n                    case 'kf_switch_session':\/\/轉(zhuǎn)接會(huì)話(huà)\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }\r\n            }\r\n            else{\r\n                switch ($MsgType) {\r\n                    case 'text':\/\/文本格式\r\n                        break;\r\n                    case 'image':\/\/圖片格式\r\n                        break;\r\n                    case 'voice':\/\/聲音\r\n                        break;\r\n                    case 'video':\/\/視頻\r\n                        break;\r\n                    case 'shortvideo':\/\/小視頻\r\n                        break;\r\n                    case 'location':\/\/上傳地理位置\r\n                        break;\r\n                    case 'link':\/\/鏈接相應(yīng)\r\n                        break;\r\n                    default:\r\n                        break;\r\n                }                \r\n            }\r\n             \r\n            \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n            $keyword = trim($postObj->Content);\r\n            $time = time();\r\n            $textTpl = \"\r\n                            <\/ToUserName>\r\n                            <\/FromUserName>\r\n                            %s<\/CreateTime>\r\n                            <\/MsgType>\r\n                            <\/Content>\r\n                            0<\/FuncFlag>\r\n                        <\/xml>\";             \r\n            if(!empty( $keyword )){\r\n                $msgType = \"text\";\r\n                $contentStr = \"Welcome to wechat world!\";\r\n                $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);\r\n                echo $resultStr;\r\n            }\r\n            else{\r\n                echo \"Input something...\";\r\n            }\r\n            \/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\/\r\n        }\r\n        else{\r\n            echo \"暫時(shí)沒(méi)有任何信息!\";\r\n            exit;\r\n        }\r\n    }\r\n     \r\n    \/\/日志LOG\r\n    public function zcLog($errcode , $errmsg){\r\n        $this->returnAy = array();\r\n        $this->returnAy['errcode'] = $errcode;\r\n        $this->returnAy['errmsg'] = $errmsg;\r\n        $this->returnAy['errtime'] = date(\"Y-m-d H:i:s\",time());\r\n        $logfile = fopen(\"logfile_\".date(\"Ymd\",time()).\".txt\", \"a+\");\r\n        $txt = json_encode($this->returnAy).\"\\n\";\r\n        fwrite($logfile, $txt);\r\n        fclose($logfile);\r\n        \/\/return $this->returnAy;\r\n    }\r\n     \r\n}<\/pre>


      <\/p>"}

      国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

      Home php教程 PHP源碼 Official WeChat interface (full interface)/WeChat shake interface/WeChat payment interface

      Official WeChat interface (full interface)/WeChat shake interface/WeChat payment interface

      Nov 09, 2016 am 09:58 AM

      微信入口綁定,微信事件處理,微信API全部操作包含在這些文件中。

      微信支付、微信紅包、微信卡券、微信小店。

      <?php
      
      class WxApi {
       const appId         = "";
       const appSecret     = "";
       const mchid         = ""; //商戶(hù)號(hào)
       const privatekey    = ""; //私鑰
       public $parameters  = array();
       public $jsApiTicket = NULL;
       public $jsApiTime   = NULL;
       public function __construct(){
          }
       /****************************************************
           *  微信提交API方法,返回微信指定JSON
           ****************************************************/
       public function wxHttpsRequest($url,$data = null){
       $curl = curl_init();
              curl_setopt($curl, CURLOPT_URL, $url);
              curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
              curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
       if (!empty($data)){
                  curl_setopt($curl, CURLOPT_POST, 1);
                  curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
              }
              curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
       $output = curl_exec($curl);
              curl_close($curl);
       return $output;
          }
       /****************************************************
           *  微信帶證書(shū)提交數(shù)據(jù) - 微信紅包使用
           ****************************************************/
       public function wxHttpsRequestPem($url, $vars, $second=30,$aHeader=array()){
       $ch = curl_init();
       //超時(shí)時(shí)間
       curl_setopt($ch,CURLOPT_TIMEOUT,$second);
              curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
       //這里設(shè)置代理,如果有的話(huà)
              //curl_setopt($ch,CURLOPT_PROXY, &#39;10.206.30.98&#39;);
              //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
       curl_setopt($ch,CURLOPT_URL,$url);
              curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
              curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
       //以下兩種方式需選擇一種
              //第一種方法,cert 與 key 分別屬于兩個(gè).pem文件
              //默認(rèn)格式為PEM,可以注釋
       curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
              curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/apiclient_cert.pem&#39;);
       //默認(rèn)格式為PEM,可以注釋
       curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
              curl_setopt($ch,CURLOPT_SSLKEY,getcwd().&#39;/apiclient_key.pem&#39;);
              curl_setopt($ch,CURLOPT_CAINFO,&#39;PEM&#39;);
              curl_setopt($ch,CURLOPT_CAINFO,getcwd().&#39;/rootca.pem&#39;);
       //第二種方式,兩個(gè)文件合成一個(gè).pem文件
              //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/all.pem&#39;);
       if( count($aHeader) >= 1 ){
                  curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
              }
              curl_setopt($ch,CURLOPT_POST, 1);
              curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
       $data = curl_exec($ch);
       if($data){
                  curl_close($ch);
       return $data;
              }
       else {
       $error = curl_errno($ch);
       echo "call faild, errorCode:$error\n";
                  curl_close($ch);
       return false;
              }
          }
       /****************************************************
           *  微信獲取AccessToken 返回指定微信公眾號(hào)的at信息
           ****************************************************/
       public function wxAccessToken($appId = NULL , $appSecret = NULL){
       $appId          = is_null($appId) ? self::appId : $appId;
       $appSecret      = is_null($appSecret) ? self::appSecret : $appSecret;
       $url            = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
       $result         = $this->wxHttpsRequest($url);
       //print_r($result);
       $jsoninfo       = json_decode($result, true);
       $access_token   = $jsoninfo["access_token"];
       return $access_token;
          }
       /****************************************************
           *  微信獲取ApiTicket 返回指定微信公眾號(hào)的at信息
           ****************************************************/
       public function wxJsApiTicket($appId = NULL , $appSecret = NULL){
       $appId          = is_null($appId) ? self::appId : $appId;
       $appSecret      = is_null($appSecret) ? self::appSecret : $appSecret;
       $url            = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=".$this->wxAccessToken();
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       $ticket         = $jsoninfo[&#39;ticket&#39;];
       //echo $ticket . "<br />";
       return $ticket;
          }
       public function wxVerifyJsApiTicket($appId = NULL , $appSecret = NULL){
       if(!empty($this->jsApiTime) && intval($this->jsApiTime) > time() && !empty($this->jsApiTicket)){
       $ticket = $this->jsApiTicket;
              }
       else{
       $ticket = $this->wxJsApiTicket($appId,$appSecret);
       $this->jsApiTicket = $ticket;
       $this->jsApiTime = time() + 7200;
              }
       return $ticket;
          }
       /****************************************************
           *  微信通過(guò)OPENID獲取用戶(hù)信息,返回?cái)?shù)組
           ****************************************************/
       public function wxGetUser($openId){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$wxAccessToken."&openid=".$openId."&lang=zh_CN";
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *  微信生成二維碼ticket
           ****************************************************/
       public function wxQrCodeTicket($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url        = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       return $result;
          }
       /****************************************************
           *  微信通過(guò)ticket生成二維碼
           ****************************************************/
       public function wxQrCode($ticket){
       $url    = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket);
       return $url;
          }
       /****************************************************
           *  微信通過(guò)指定模板信息發(fā)送給指定用戶(hù),發(fā)送完成后返回指定JSON數(shù)據(jù)
           ****************************************************/
       public function wxSendTemplate($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       return $result;
          }
       /****************************************************
           *      發(fā)送自定義的模板消息
           ****************************************************/
       public function wxSetSend($touser, $template_id, $url, $data, $topcolor = &#39;#7B68EE&#39;){
       $template = array(
       &#39;touser&#39; => $touser,
       &#39;template_id&#39; => $template_id,
       &#39;url&#39; => $url,
       &#39;topcolor&#39; => $topcolor,
       &#39;data&#39; => $data
       );
       $jsonData = urldecode(json_encode($template));
       echo $jsonData;
       $result = $this->wxSendTemplate($jsonData);
       return $result;
          }
       /****************************************************
           *  微信設(shè)置OAUTH跳轉(zhuǎn)URL,返回字符串信息 - SCOPE = snsapi_base //驗(yàn)證時(shí)不返回確認(rèn)頁(yè)面,只能獲取OPENID
           ****************************************************/
       public function wxOauthBase($redirectUrl,$state = "",$appId = NULL){
       $appId          = is_null($appId) ? self::appId : $appId;
       $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_base&state=".$state."#wechat_redirect";
       return $url;
          }
       /****************************************************
           *  微信設(shè)置OAUTH跳轉(zhuǎn)URL,返回字符串信息 - SCOPE = snsapi_userinfo //獲取用戶(hù)完整信息
           ****************************************************/
       public function wxOauthUserinfo($redirectUrl,$state = "",$appId = NULL){
       $appId          = is_null($appId) ? self::appId : $appId;
       $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_userinfo&state=".$state."#wechat_redirect";
       return $url;
          }
       /****************************************************
           *  微信OAUTH跳轉(zhuǎn)指定URL
           ****************************************************/
       public function wxHeader($url){
              header("location:".$url);
          }
       /****************************************************
           *  微信通過(guò)OAUTH返回頁(yè)面中獲取AT信息
           ****************************************************/
       public function wxOauthAccessToken($code,$appId = NULL , $appSecret = NULL){
       $appId          = is_null($appId) ? self::appId : $appId;
       $appSecret      = is_null($appSecret) ? self::appSecret : $appSecret;
       $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code";
       $result         = $this->wxHttpsRequest($url);
       //print_r($result);
       $jsoninfo       = json_decode($result, true);
       //$access_token     = $jsoninfo["access_token"];
       return $jsoninfo;
          }
       /****************************************************
           *  微信通過(guò)OAUTH的Access_Token的信息獲取當(dāng)前用戶(hù)信息 // 只執(zhí)行在snsapi_userinfo模式運(yùn)行
           ****************************************************/
       public function wxOauthUser($OauthAT,$openId){
       $url            = "https://api.weixin.qq.com/sns/userinfo?access_token=".$OauthAT."&openid=".$openId."&lang=zh_CN";
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *  創(chuàng)建自定義菜單
           ****************************************************/
       public function wxMenuCreate($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *  獲取自定義菜單
           ****************************************************/
       public function wxMenuGet(){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *  刪除自定義菜單
           ****************************************************/
       public function wxMenuDelete(){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *  獲取第三方自定義菜單
           ****************************************************/
       public function wxMenuGetInfo(){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *  微信客服接口 - Add 添加客服人員
           ****************************************************/
       public function wxServiceAdd($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/customservice/kfaccount/add?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *  微信客服接口 - Update 編輯客服人員
           ****************************************************/
       public function wxServiceUpdate($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/customservice/kfaccount/update?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *  微信客服接口 - Delete 刪除客服人員
           ****************************************************/
       public function wxServiceDelete($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/customservice/kfaccount/del?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信客服接口 - 上傳頭像
           *******************************************************/
       public function wxServiceUpdateCover($kf_account, $media = &#39;&#39;) {
       $wxAccessToken  = $this->wxAccessToken();
       //$data[&#39;access_token&#39;] =  $wxAccessToken;
       $data[&#39;media&#39;]     =  &#39;@D:\\workspace\\htdocs\\yky_test\\logo.jpg&#39;;
       $url            = "https:// api.weixin.qq.com/customservice/kfaccount/uploadheadimg?access_token=".$wxAccessToken."&kf_account=".$kf_account;
       $result         = $this->wxHttpsRequest($url,$data);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信客服接口 - 獲取客服列表
           ****************************************************/
       public function wxServiceList(){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/customservice/getkflist?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信客服接口 - 獲取在線(xiàn)客服接待信息
           ****************************************************/
       public function wxServiceOnlineList(){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/customservice/getonlinekflist?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信客服接口 - 客服發(fā)送信息
           ****************************************************/
       public function wxServiceSend($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信客服會(huì)話(huà)接口 - 創(chuàng)建會(huì)話(huà)
           ****************************************************/
       public function wxServiceSessionAdd($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/customservice/kfsession/create?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信客服會(huì)話(huà)接口 - 關(guān)閉會(huì)話(huà)
           ****************************************************/
       public function wxServiceSessionClose(){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/customservice/kfsession/close?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信客服會(huì)話(huà)接口 - 獲取會(huì)話(huà)
           ****************************************************/
       public function wxServiceSessionGet($openId){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/customservice/kfsession/getsession?access_token=".$wxAccessToken."&openid=" . $openId;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信客服會(huì)話(huà)接口 - 獲取會(huì)話(huà)列表
           ****************************************************/
       public function wxServiceSessionList($kf_account){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/customservice/kfsession/getsessionlist?access_token=".$wxAccessToken."&kf_account=" . $kf_account ;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信客服會(huì)話(huà)接口 - 未接入會(huì)話(huà)
           ****************************************************/
       public function wxServiceSessionWaitCase(){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/customservice/kfsession/getwaitcase?access_token=".$wxAccessToken;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 申請(qǐng)?jiān)O(shè)備ID
           ****************************************************/
       public function wxDeviceApply($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/device/applyid?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 編輯設(shè)備ID
           ****************************************************/
       public function wxDeviceUpdate($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/device/update?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 本店關(guān)聯(lián)設(shè)備
           ****************************************************/
       public function wxDeviceBindLocation($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/device/bindlocation?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 查詢(xún)?cè)O(shè)備列表
           ****************************************************/
       public function wxDeviceSearch($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/device/search?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 新增頁(yè)面
           ****************************************************/
       public function wxPageAdd($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/page/add?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 編輯頁(yè)面
           ****************************************************/
       public function wxPageUpdate($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/page/update?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 查詢(xún)頁(yè)面
           ****************************************************/
       public function wxPageSearch($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/page/search?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 刪除頁(yè)面
           ****************************************************/
       public function wxPageDelete($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/page/delete?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信搖一搖 - 上傳圖片素材
           *******************************************************/
       public function wxMaterialAdd($media = &#39;&#39;) {
       $wxAccessToken  = $this->wxAccessToken();
       //$data[&#39;access_token&#39;] =  $wxAccessToken;
       $data[&#39;media&#39;]     =  &#39;@D:\\workspace\\htdocs\\yky_test\\logo.jpg&#39;;
       $url            = "https://api.weixin.qq.com/shakearound/material/add?access_token=".$wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$data);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 配置設(shè)備與頁(yè)面的關(guān)聯(lián)關(guān)系
           ****************************************************/
       public function wxDeviceBindPage($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/device/bindpage?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 獲取搖周邊的設(shè)備及用戶(hù)信息
           ****************************************************/
       public function wxGetShakeInfo($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/user/getshakeinfo?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /****************************************************
           *      微信搖一搖 - 以設(shè)備為維度的數(shù)據(jù)統(tǒng)計(jì)接口
           ****************************************************/
       public function wxGetShakeStatistics($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/shakearound/statistics/device?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*****************************************************
           *      生成隨機(jī)字符串 - 最長(zhǎng)為32位字符串
           *****************************************************/
       public function wxNonceStr($length = 16, $type = FALSE) {
       $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
       $str = "";
       for ($i = 0; $i < $length; $i++) {
       $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
              }
       if($type == TRUE){
       return strtoupper(md5(time() . $str));
              }
       else {
       return $str;
              }
          }
       /*******************************************************
           *      微信商戶(hù)訂單號(hào) - 最長(zhǎng)28位字符串
           *******************************************************/
       public function wxMchBillno($mchid = NULL) {
       if(is_null($mchid)){
       if(self::mchid == "" || is_null(self::mchid)){
       $mchid = time();
                  }
       else{
       $mchid = self::mchid;
                  }
              }
       else{
       $mchid = substr(addslashes($mchid),0,10);
              }
       return date("Ymd",time()).time().$mchid;
          }
       /*******************************************************
           *      微信格式化數(shù)組變成參數(shù)格式 - 支持url加密
           *******************************************************/
       public function wxSetParam($parameters){
       if(is_array($parameters) && !empty($parameters)){
       $this->parameters = $parameters;
       return $this->parameters;
              }
       else{
       return array();
              }
          }
       /*******************************************************
           *      微信格式化數(shù)組變成參數(shù)格式 - 支持url加密
           *******************************************************/
       public function wxFormatArray($parameters = NULL, $urlencode = FALSE){
       if(is_null($parameters)){
       $parameters = $this->parameters;
              }
       $restr = "";//初始化空
       ksort($parameters);//排序參數(shù)
       foreach ($parameters as $k => $v){//循環(huán)定制參數(shù)
       if (null != $v && "null" != $v && "sign" != $k) {
       if($urlencode){//如果參數(shù)需要增加URL加密就增加,不需要?jiǎng)t不需要
       $v = urlencode($v);
                      }
       $restr .= $k . "=" . $v . "&";//返回完整字符串
       }
              }
       if (strlen($restr) > 0) {//如果存在數(shù)據(jù)則將最后“&”刪除
       $restr = substr($restr, 0, strlen($restr)-1);
              }
       return $restr;//返回字符串
       }
       /*******************************************************
           *      微信MD5簽名生成器 - 需要將參數(shù)數(shù)組轉(zhuǎn)化成為字符串[wxFormatArray方法]
           *******************************************************/
       public function wxMd5Sign($content, $privatekey){
       try {
       if (is_null($privatekey)) {
       throw new Exception("財(cái)付通簽名key不能為空!");
                  }
       if (is_null($content)) {
       throw new Exception("財(cái)付通簽名內(nèi)容不能為空");
                  }
       $signStr = $content . "&key=" . $privatekey;
       return strtoupper(md5($signStr));
              }
       catch (Exception $e)
              {
       die($e->getMessage());
              }
          }
       /*******************************************************
           *      微信Sha1簽名生成器 - 需要將參數(shù)數(shù)組轉(zhuǎn)化成為字符串[wxFormatArray方法]
           *******************************************************/
       public function wxSha1Sign($content){
       try {
       if (is_null($content)) {
       throw new Exception("簽名內(nèi)容不能為空");
                  }
       //$signStr = $content;
       return sha1($content);
              }
       catch (Exception $e)
              {
       die($e->getMessage());
              }
          }
       /*******************************************************
           *      微信jsApi整合方法 - 通過(guò)調(diào)用此方法獲得jsapi數(shù)據(jù)
           *******************************************************/
       public function wxJsapiPackage(){
       $jsapi_ticket = $this->wxVerifyJsApiTicket();
       // 注意 URL 一定要?jiǎng)討B(tài)獲取,不能 hardcode.
       $protocol = (!empty($_SERVER[&#39;HTTPS&#39;]) && $_SERVER[&#39;HTTPS&#39;] !== &#39;off&#39; || $_SERVER[&#39;SERVER_PORT&#39;] == 443) ? "https://" : "http://";
       $url = $protocol.$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
       $timestamp = time();
       $nonceStr = $this->wxNonceStr();
       $signPackage = array(
       "jsapi_ticket" => $jsapi_ticket,
       "nonceStr"  => $nonceStr,
       "timestamp" => $timestamp,
       "url"       => $url
       );
       // 這里參數(shù)的順序要按照 key 值 ASCII 碼升序排序
       $rawString = "jsapi_ticket=$jsapi_ticket&noncestr=$nonceStr&timestamp=$timestamp&url=$url";
       //$rawString = $this->wxFormatArray($signPackage);
       $signature = $this->wxSha1Sign($rawString);
       $signPackage[&#39;signature&#39;] = $signature;
       $signPackage[&#39;rawString&#39;] = $rawString;
       $signPackage[&#39;appId&#39;] = self::appId;
       return $signPackage;
          }
       /*******************************************************
           *      微信卡券:JSAPI 卡券Package - 基礎(chǔ)參數(shù)沒(méi)有附帶任何值 - 再生產(chǎn)環(huán)境中需要根據(jù)實(shí)際情況進(jìn)行修改
           *******************************************************/
       public function wxCardPackage($cardId , $timestamp = &#39;&#39;){
       $api_ticket = $this->wxVerifyJsApiTicket();
       if(!empty($timestamp)){
       $timestamp = $timestamp;
              }
       else{
       $timestamp = time();
              }
       $arrays = array(self::appSecret,$timestamp,$cardId);
              sort($arrays , SORT_STRING);
       //print_r($arrays);
              //echo implode("",$arrays)."<br />";
       $string = sha1(implode($arrays));
       //echo $string;
       $resultArray[&#39;cardId&#39;] = $cardId;
       $resultArray[&#39;cardExt&#39;] = array();
       $resultArray[&#39;cardExt&#39;][&#39;code&#39;] = &#39;&#39;;
       $resultArray[&#39;cardExt&#39;][&#39;openid&#39;] = &#39;&#39;;
       $resultArray[&#39;cardExt&#39;][&#39;timestamp&#39;] = $timestamp;
       $resultArray[&#39;cardExt&#39;][&#39;signature&#39;] = $string;
       //print_r($resultArray);
       return $resultArray;
          }
       /*******************************************************
           *      微信卡券:JSAPI 卡券全部卡券 Package
           *******************************************************/
       public function wxCardAllPackage($cardIdArray = array(),$timestamp = &#39;&#39;){
       $reArrays = array();
       if(!empty($cardIdArray) && (is_array($cardIdArray) || is_object($cardIdArray))){
       //print_r($cardIdArray);
       foreach($cardIdArray as  $value){
       //print_r($this->wxCardPackage($value,$openid));
       $reArrays[] = $this->wxCardPackage($value,$timestamp);
                  }
       //print_r($reArrays);
       }
       else{
       $reArrays[] = $this->wxCardPackage($cardIdArray,$timestamp);
              }
       return strval(json_encode($reArrays));
          }
       /*******************************************************
           *      微信卡券:獲取卡券列表
           *******************************************************/
       public function wxCardListPackage($cardType = "" , $cardId = ""){
       //$api_ticket = $this->wxVerifyJsApiTicket();
       $resultArray = array();
       $timestamp = time();
       $nonceStr = $this->wxNonceStr();
       //$strings = 
       $arrays = array(self::appId,self::appSecret,$timestamp,$nonceStr);
              sort($arrays , SORT_STRING);
       $string = sha1(implode($arrays));
       $resultArray[&#39;app_id&#39;] = self::appId;
       $resultArray[&#39;card_sign&#39;] = $string;
       $resultArray[&#39;time_stamp&#39;] = $timestamp;
       $resultArray[&#39;nonce_str&#39;] = $nonceStr;
       $resultArray[&#39;card_type&#39;] = $cardType;
       $resultArray[&#39;card_id&#39;] = $cardId;
       return $resultArray;
          }
       /*******************************************************
           *      將數(shù)組解析XML - 微信紅包接口
           *******************************************************/
       public function wxArrayToXml($parameters = NULL){
       if(is_null($parameters)){
       $parameters = $this->parameters;
              }
       if(!is_array($parameters) || empty($parameters)){
       die("參數(shù)不為數(shù)組無(wú)法解析");
              }
       $xml = "<xml>";
       foreach ($arr as $key=>$val)
              {
       if (is_numeric($val))
                  {
       $xml.="<".$key.">".$val."</".$key.">";
                  }
       else
       $xml.="<".$key."><![CDATA[".$val."]]></".$key.">";
              }
       $xml.="</xml>";
       return $xml;
          }
       /*******************************************************
           *      微信卡券:上傳LOGO - 需要改寫(xiě)動(dòng)態(tài)功能
           *******************************************************/
       public function wxCardUpdateImg() {
       $wxAccessToken  = $this->wxAccessToken();
       //$data[&#39;access_token&#39;] =  $wxAccessToken;
       $data[&#39;buffer&#39;]     =  &#39;@D:\\workspace\\htdocs\\yky_test\\logo.jpg&#39;;
       $url            = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$data);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
       //array(1) { ["url"]=> string(121) "http://mmbiz.qpic.cn/mmbiz/ibuYxPHqeXePNTW4ATKyias1Cf3zTKiars9PFPzF1k5icvXD7xW0kXUAxHDzkEPd9micCMCN0dcTJfW6Tnm93MiaAfRQ/0" } 
       }
       /*******************************************************
           *      微信卡券:獲取顏色
           *******************************************************/
       public function wxCardColor(){
       $wxAccessToken  = $this->wxAccessToken();
       $url                = "https://api.weixin.qq.com/card/getcolors?access_token=".$wxAccessToken;
       $result         = $this->wxHttpsRequest($url);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:拉取門(mén)店列表
           *******************************************************/
       public function wxBatchGet($offset = 0, $count = 0){
       $jsonData = json_encode(array(&#39;offset&#39; => intval($offset) , &#39;count&#39; => intval($count)));
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/location/batchget?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:創(chuàng)建卡券
           *******************************************************/
       public function wxCardCreated($jsonData) {
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/create?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:查詢(xún)卡券詳情
           *******************************************************/
       public function wxCardGetInfo($jsonData) {
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/get?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:設(shè)置白名單
           *******************************************************/
       public function wxCardWhiteList($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/testwhitelist/set?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:消耗卡券
           *******************************************************/
       public function wxCardConsume($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/code/consume?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:刪除卡券
           *******************************************************/
       public function wxCardDelete($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/delete?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:選擇卡券 - 解析CODE
           *******************************************************/
       public function wxCardDecryptCode($jsonData){
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/code/decrypt?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:更改庫(kù)存
           *******************************************************/
       public function wxCardModifyStock($cardId , $increase_stock_value = 0 , $reduce_stock_value = 0){
       if(intval($increase_stock_value) == 0 && intval($reduce_stock_value) == 0){
       return false;
              }
       $jsonData = json_encode(array("card_id" => $cardId , &#39;increase_stock_value&#39; => intval($increase_stock_value) , &#39;reduce_stock_value&#39; => intval($reduce_stock_value)));
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/modifystock?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
       /*******************************************************
           *      微信卡券:查詢(xún)用戶(hù)CODE
           *******************************************************/
       public function wxCardQueryCode($code , $cardId = &#39;&#39;){
       $jsonData = json_encode(array("code" => $code , &#39;card_id&#39; => $cardId ));
       $wxAccessToken  = $this->wxAccessToken();
       $url            = "https://api.weixin.qq.com/card/code/get?access_token=" . $wxAccessToken;
       $result         = $this->wxHttpsRequest($url,$jsonData);
       $jsoninfo       = json_decode($result, true);
       return $jsoninfo;
          }
      }
      <?php
          require_once &#39;lib.inc.php&#39;;
          $wx = new WxApi();
           
          if(!isset($_GET[&#39;code&#39;])){
              header("location:https://open.weixin.qq.com/connect/oauth2/authorize?appid=".WxApi::appId."&redirect_uri=http://".$_SERVER[&#39;SERVER_NAME&#39;].$_SERVER[&#39;PHP_SELF&#39;]."&response_type=code&scope=snsapi_base&state=1#wechat_redirect");
          }
          else{
              $CODE =  $_GET[&#39;code&#39;];
              $Info = $wx->wxOauthAccessToken($CODE);
              //print_r($Info);
              $openId = $Info[&#39;openid&#39;];
               
          }
       
          $signPackage = $wx->wxJsapiPackage();
      ?>
      <html>
          <head>
              <title>JSAPI接口測(cè)試</title>
              <meta charset="UTF-8">
              <meta name="viewport" content="width=device-width, initial-scale=1.0">
              <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
              <script>
                  wx.config({
                    debug: true,
                    appId: &#39;<?php echo $signPackage["appId"];?>&#39;,
                    timestamp: <?php echo $signPackage["timestamp"];?>,
                    nonceStr: &#39;<?php echo $signPackage["nonceStr"];?>&#39;,
                    signature: &#39;<?php echo $signPackage["signature"];?>&#39;,
                    jsApiList: [
                      // 所有要調(diào)用的 API 都要加到這個(gè)列表中
                      &#39;onMenuShareTimeline&#39;,
              &#39;onMenuShareAppMessage&#39;
                    ]
                  });
                   
                  wx.ready(function () {
                      // 在這里調(diào)用 API
                      wx.onMenuShareAppMessage({
                          title: &#39;互聯(lián)網(wǎng)之子&#39;,
                          desc: &#39;在長(zhǎng)大的過(guò)程中,我才慢慢發(fā)現(xiàn),我身邊的所有事,別人跟我說(shuō)的所有事,那些所謂本來(lái)如此,注定如此的事,它們其實(shí)沒(méi)有非得如此,事情是可以改變的。更重要的是,有些事既然錯(cuò)了,那就該做出改變。&#39;,
                          link: &#39;http://movie.douban.com/subject/25785114/&#39;,
                          imgUrl: &#39;http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg&#39;,
                          trigger: function (res) {
                              // 不要嘗試在trigger中使用ajax異步請(qǐng)求修改本次分享的內(nèi)容,因?yàn)榭蛻?hù)端分享操作是一個(gè)同步操作,這時(shí)候使用ajax的回包會(huì)還沒(méi)有返回
                              alert(&#39;用戶(hù)點(diǎn)擊發(fā)送給朋友&#39;);
                          },
                          success: function (res) {
                              alert(&#39;已分享&#39;);
                          },
                          cancel: function (res) {
                              alert(&#39;已取消&#39;);
                          },
                          fail: function (res) {
                              alert(JSON.stringify(res));
                          }
                      });
                       
                      wx.onMenuShareTimeline({
                              title: &#39;互聯(lián)網(wǎng)之子&#39;,
                              link: &#39;http://movie.douban.com/subject/25785114/&#39;,
                              imgUrl: &#39;http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg&#39;,
                              trigger: function (res) {
                                      // 不要嘗試在trigger中使用ajax異步請(qǐng)求修改本次分享的內(nèi)容,因?yàn)榭蛻?hù)端分享操作是一個(gè)同步操作,這時(shí)候使用ajax的回包會(huì)還沒(méi)有返回
                                      alert(&#39;用戶(hù)點(diǎn)擊分享到朋友圈&#39;);
                              },
                              success: function (res) {
                                      alert(&#39;已分享&#39;);
                              },
                              cancel: function (res) {
                                      alert(&#39;已取消&#39;);
                              },
                              fail: function (res) {
                                      alert(JSON.stringify(res));
                              }
                      });
                  });
                   
                  var readyFunc = function onBridgeReady() {
                          document.querySelector(&#39;#batchAddCard&#39;).addEventListener(&#39;click&#39;,function(e) {
                                  WeixinJSBridge.invoke(&#39;batchAddCard&#39;, {
                                  "card_list": [<?php echo $kqInfo;?>]
                                  },
                                  function(res) {
                                          alert(res.err_msg + "  _  " + res.card_list);
                                  });
                          }); 
                  }
                  if (typeof WeixinJSBridge === "undefined") {
                          document.addEventListener(&#39;WeixinJSBridgeReady&#39;, readyFunc, false);
                  }
                  else {
                          readyFunc();
                  }
                </script>
          </head>
          <body>
              <div>
                  <input type="button" id="batchAddCard" name="batchAddCard" value="添加卡券" />
              </div>
          </body>
      </html>
      <?php
      /**
       * Description of wechat
       *
       * @author Administrator
       */
      class WeChat extends WxApi{
          public $token = "";
          //put your code here
          public function __construct($token = "") {
              parent::__construct();
              $this->token = $token;
          }
       
          public function wcCheckSignature(){
              try{
                  if (empty($this->token)) {
                      throw new Exception(&#39;TOKEN is not defined!&#39;);
                  }
                   
                  $signature = $_GET["signature"];
                  $timestamp = $_GET["timestamp"];
                  $nonce = $_GET["nonce"];
                       
                  $token = $this->token;
                  $tmpArr = array($token, $timestamp, $nonce);
                  // use SORT_STRING rule
                  sort($tmpArr, SORT_STRING);
                  $tmpStr = implode( $tmpArr );
                  $tmpStr = sha1( $tmpStr );
       
                  if( $tmpStr == $signature ){
                          return true;
                  }else{
                          return false;
                  }
              } 
              catch (Exception $e) {
                  echo &#39;Message: &#39; .$e->getMessage();
              }
          }
           
          public function wcValid(){
              $echoStr = isset($_GET["echostr"]) && !empty($_GET["echostr"]) ? addslashes($_GET["echostr"]) : NULL;
              if(is_null($echoStr)){
                  $this->wcMsg();
              }
              else{
                  //valid signature , option
                  if($this->wcCheckSignature()){
                      echo $echoStr;
                      exit;
                  }
                  else{
                      exit();
                  }
              }
          }
           
          public function wcMsg(){
              //get post data, May be due to the different environments
              $postStr = isset($GLOBALS["HTTP_RAW_POST_DATA"]) && !empty($GLOBALS["HTTP_RAW_POST_DATA"]) ? $GLOBALS["HTTP_RAW_POST_DATA"] : "";
              if(!empty($postStr)){
                  libxml_disable_entity_loader(true);
                  $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
                  $this->zcLog(TRUE,$postObj);
                   
                  $fromUsername = $postObj->FromUserName;
                  $toUsername = $postObj->ToUserName;
                  $MsgType = $postObj->MsgType;
                   
                  if($MsgType == &#39;event&#39;){//執(zhí)行事件相應(yīng)
                      $Event = $postObj->Event;
                      switch ($Event) {
                          case &#39;subscribe&#39;://關(guān)注
                              break;
                          case &#39;unsubscribe&#39;://取消關(guān)注
                              break;
                          case &#39;SCAN&#39;://掃描
                              break;
                          case &#39;LOCATION&#39;://地址
                              break;
                          case &#39;CLICK&#39;://點(diǎn)擊時(shí)間
                              break;
                          case &#39;VIEW&#39;://跳轉(zhuǎn)
                              break;
                          case &#39;card_pass_check&#39;://卡券審核通過(guò)
                              break;
                          case &#39;card_not_pass_check&#39;://卡券審核失敗
                              break;
                          case &#39;user_get_card&#39;://用戶(hù)領(lǐng)取卡券
                              break;
                          case &#39;user_del_card&#39;://用戶(hù)刪除卡券
                              break;
                          case &#39;user_view_card&#39;://用戶(hù)瀏覽會(huì)員卡
                              break;
                          case &#39;user_consume_card&#39;://用戶(hù)核銷(xiāo)卡券
                              break;
                          case &#39;kf_create_session&#39;://創(chuàng)建會(huì)話(huà)
                              break;
                          case &#39;kf_close_session&#39;://關(guān)閉會(huì)話(huà)
                              break;
                          case &#39;kf_switch_session&#39;://轉(zhuǎn)接會(huì)話(huà)
                              break;
                          default:
                              break;
                      }
                  }
                  else{
                      switch ($MsgType) {
                          case &#39;text&#39;://文本格式
                              break;
                          case &#39;image&#39;://圖片格式
                              break;
                          case &#39;voice&#39;://聲音
                              break;
                          case &#39;video&#39;://視頻
                              break;
                          case &#39;shortvideo&#39;://小視頻
                              break;
                          case &#39;location&#39;://上傳地理位置
                              break;
                          case &#39;link&#39;://鏈接相應(yīng)
                              break;
                          default:
                              break;
                      }                
                  }
                   
                  ////////////////////////////////////////////////////////////////////
                  $keyword = trim($postObj->Content);
                  $time = time();
                  $textTpl = "<xml>
                                  <ToUserName><![CDATA[%s]]></ToUserName>
                                  <FromUserName><![CDATA[%s]]></FromUserName>
                                  <CreateTime>%s</CreateTime>
                                  <MsgType><![CDATA[%s]]></MsgType>
                                  <Content><![CDATA[%s]]></Content>
                                  <FuncFlag>0</FuncFlag>
                              </xml>";             
                  if(!empty( $keyword )){
                      $msgType = "text";
                      $contentStr = "Welcome to wechat world!";
                      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
                      echo $resultStr;
                  }
                  else{
                      echo "Input something...";
                  }
                  ////////////////////////////////////////////////////////////////////
              }
              else{
                  echo "暫時(shí)沒(méi)有任何信息!";
                  exit;
              }
          }
           
          //日志LOG
          public function zcLog($errcode , $errmsg){
              $this->returnAy = array();
              $this->returnAy[&#39;errcode&#39;] = $errcode;
              $this->returnAy[&#39;errmsg&#39;] = $errmsg;
              $this->returnAy[&#39;errtime&#39;] = date("Y-m-d H:i:s",time());
              $logfile = fopen("logfile_".date("Ymd",time()).".txt", "a+");
              $txt = json_encode($this->returnAy)."\n";
              fwrite($logfile, $txt);
              fclose($logfile);
              //return $this->returnAy;
          }
           
      }


      Statement of this Website
      The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

      Hot AI Tools

      Undress AI Tool

      Undress AI Tool

      Undress images for free

      Undresser.AI Undress

      Undresser.AI Undress

      AI-powered app for creating realistic nude photos

      AI Clothes Remover

      AI Clothes Remover

      Online AI tool for removing clothes from photos.

      Clothoff.io

      Clothoff.io

      AI clothes remover

      Video Face Swap

      Video Face Swap

      Swap faces in any video effortlessly with our completely free AI face swap tool!

      Hot Tools

      Notepad++7.3.1

      Notepad++7.3.1

      Easy-to-use and free code editor

      SublimeText3 Chinese version

      SublimeText3 Chinese version

      Chinese version, very easy to use

      Zend Studio 13.0.1

      Zend Studio 13.0.1

      Powerful PHP integrated development environment

      Dreamweaver CS6

      Dreamweaver CS6

      Visual web development tools

      SublimeText3 Mac version

      SublimeText3 Mac version

      God-level code editing software (SublimeText3)