1. \r\n    

      \r\n      \r\n      \r\n      \r\n      \r\n       \r\n      <\/p>\r\n    <\/p>\r\n     \r\n    

      亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

      微信API接口

      May 14, 2018 pm 03:32 PM
      api 微信 接口

      這篇文章介紹的內(nèi)容是關(guān)于微信API接口 ,有著一定的參考價值,現(xiàn)在分享給大家,有需要的朋友可以參考一下

      本文給大家介紹的是個人總結(jié)的一些微信API接口,包括微信支付、微信紅包、微信卡券、微信小店等,十分的全面,有需要的小伙伴可以參考下。

      微信入口綁定,微信事件處理,微信API全部操作包含在這些文件中。
      微信支付、微信紅包、微信卡券、微信小店。

      1. [代碼]index.php? ??

      <?php
      include_once &#39;lib.inc.php&#39;;
       
      $wcObj = new WeChat("YOUKUIYUAN");
      $wcObj->wcValid();

      2. [代碼]微信入口類

      <?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;://點擊時間
                  break;
                case &#39;VIEW&#39;://跳轉(zhuǎn)
                  break;
                case &#39;card_pass_check&#39;://卡券審核通過
                  break;
                case &#39;card_not_pass_check&#39;://卡券審核失敗
                  break;
                case &#39;user_get_card&#39;://用戶領(lǐng)取卡券
                  break;
                case &#39;user_del_card&#39;://用戶刪除卡券
                  break;
                case &#39;user_view_card&#39;://用戶瀏覽會員卡
                  break;
                case &#39;user_consume_card&#39;://用戶核銷卡券
                  break;
                case &#39;merchant_order&#39;://微小店用戶下單付款
                  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 "暫時沒有任何信息!";
            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;
        }
         
      }

      3. [代碼]微信操作類 - 更新了自定義菜單部分

      <?php
        /********************************************************
         *   @author Kyler You <QQ:2444756311>
         *   @link http://mp.weixin.qq.com/wiki/home/index.html
         *   @version 2.0.1
         *   @uses $wxApi = new WxApi();
         *   @package 微信API接口 陸續(xù)會繼續(xù)進行更新
         ********************************************************/
       
        class WxApi {
          //const appId     = "";
          //const appSecret   = "";
          const appId     = "";
          const appSecret   = "";
          //const mchid     = ""; //商戶號
          //const privatekey  = ""; //私鑰
          public $parameters = array();
       
          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ù)據(jù) - 微信紅包使用
           ****************************************************/
       
          public function wxHttpsRequestPem($url, $vars, $second=30,$aHeader=array()){
              $ch = curl_init();
              //超時時間
              curl_setopt($ch,CURLOPT_TIMEOUT,$second);
              curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
              //這里設(shè)置代理,如果有的話
              //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 分別屬于兩個.pem文件
              //默認格式為PEM,可以注釋
              curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
              curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/apiclient_cert.pem&#39;);
              //默認格式為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;);
       
              //第二種方式,兩個文件合成一個.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 返回指定微信公眾號的at信息
           ****************************************************/
       
          public function wxAccessToken($appId = NULL , $appSecret = NULL){
              $appId     = is_null($appId) ? self::appId : $appId;
              $appSecret   = is_null($appSecret) ? self::appSecret : $appSecret;
               
              $data = json_decode(file_get_contents("access_token.json"));
              if ($data->expire_time < time()) {
                //echo $appId,$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"];
                if ($access_token) {
                  $data->expire_time = time() + 7000;
                  $data->access_token = $access_token;
                  $fp = fopen("access_token.json", "w");
                  fwrite($fp, json_encode($data));
                  fclose($fp);
                }
              }
              else {
                $access_token = $data->access_token;
              }
              return $access_token;
          }
       
          /****************************************************
           * 微信獲取AccessToken 返回指定微信公眾號的at信息
           ****************************************************/
       
          public function wxJsApiTicket($appId = NULL , $appSecret = NULL){
              $appId     = is_null($appId) ? self::appId : $appId;
              $appSecret   = is_null($appSecret) ? self::appSecret : $appSecret;
               
              $data = json_decode(file_get_contents("jsapi_ticket.json"));
              if ($data->expire_time < time()) {        
                $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;];
                if ($ticket) {
                  $data->expire_time = time() + 7000;
                  $data->jsapi_ticket = $ticket;
                  $fp = fopen("jsapi_ticket.json", "w");
                  fwrite($fp, json_encode($data));
                  fclose($fp);
                }
              }
              else {
                $ticket = $data->jsapi_ticket;
              }
              return $ticket;
          }
           
          /****************************************************
           * 微信通過OPENID獲取用戶信息,返回數(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;
          }
           
          /****************************************************
           * 微信通過ticket生成二維碼
           ****************************************************/
          public function wxQrCode($ticket){
            $url  = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket);
            return $url;
          }
       
          /****************************************************
           *   發(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 = json_encode($template);
              $result = $this->wxSendTemplate($jsonData);
              return $result;
          }
       
          /****************************************************
           * 微信設(shè)置OAUTH跳轉(zhuǎn)URL,返回字符串信息 - SCOPE = snsapi_base //驗證時不返回確認頁面,只能獲取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 //獲取用戶完整信息
           ****************************************************/
       
          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);
          }
       
          /****************************************************
           * 微信通過OAUTH返回頁面中獲取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;      
          }
       
          /****************************************************
           * 微信通過OAUTH的Access_Token的信息獲取當前用戶信息 // 只執(zhí)行在snsapi_userinfo模式運行
           ****************************************************/
       
          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;
          }
               
          /*****************************************************
           *   生成隨機字符串 - 最長為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;
            }
          }
           
          /*******************************************************
           *   微信商戶訂單號 - 最長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加密就增加,不需要則不需要
                  $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("財付通簽名key不能為空!");
              }
              if (is_null($content)) {
                throw new Exception("財付通簽名內(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整合方法 - 通過調(diào)用此方法獲得jsapi數(shù)據(jù)
           *******************************************************/    
          public function wxJsapiPackage(){
            $jsapi_ticket = $this->wxJsApiTicket();
             
            // 注意 URL 一定要動態(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;
          }
           
           
          /*******************************************************
           *   將數(shù)組解析XML - 微信紅包接口
           *******************************************************/
          public function wxArrayToXml($parameters = NULL){
            if(is_null($parameters)){
              $parameters = $this->parameters;
            }
             
            if(!is_array($parameters) || empty($parameters)){
              die("參數(shù)不為數(shù)組無法解析");
            }
             
            $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 - 需要改寫動態(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;
          }
           
          /*******************************************************
           *   微信卡券:創(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;
          }
           
          /*******************************************************
           *   微信卡券:JSAPI 卡券Package - 基礎(chǔ)參數(shù)沒有附帶任何值 - 再生產(chǎn)環(huán)境中需要根據(jù)實際情況進行修改
           *******************************************************/   
          public function wxCardPackage($cardId){
            $timestamp = time();
            $api_ticket = $this->wxJsApiTicket();
            $cardId = $cardId;
            $arrays = array($api_ticket,$timestamp,$cardId);
            sort($arrays);
            $string = sha1(implode("",$arrays));
       
            $resultArray[&#39;card_id&#39;] = $cardId;
            $resultArray[&#39;card_ext&#39;] = array();
            $resultArray[&#39;card_ext&#39;][&#39;openid&#39;] = &#39;oOmn4s9MiwqHSNNvPn0dBtU23toA&#39;;
            $resultArray[&#39;card_ext&#39;][&#39;timestamp&#39;] = $timestamp;
            $resultArray[&#39;card_ext&#39;][&#39;signature&#39;] = $string;
       
            return $resultArray;
          }
           
           
        }

      4. [代碼]微信JSAPI

      <?php
        require_once &#39;lib.inc.php&#39;;
        $wx = new WxApi();
        //通過網(wǎng)頁獲取openid
        //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();
        //print_r($signPackage);
        $kqInfo = $wx->wxCardPackage("");
        $listInfo = $wx->wxCardListPackage();
      ?>
      <html>
        <head>
          <title>JSAPI接口測試</title>
          <meta charset="UTF-8">
          <meta name="viewport" content="width=device-width, initial-scale=1.0">
           
          <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
          <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>
        </head>
        <body>
          <p>
            <input type="button" id="batchAddCard" name="batchAddCard" value="添加卡券" /><br />
            <input type="button" id="openCard" name="openCard" value="拉起卡券庫" /><br />
            <input type="button" id="ShareTimeLine" name="ShareTimeLine" value="分享朋友圈" /><br />
            <p id="showInfo">
             
            </p>
          </p>
           
          <script>
            wx.config({
             debug: false,
             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 都要加到這個列表中
              &#39;onMenuShareTimeline&#39;,
               &#39;onMenuShareAppMessage&#39;,
               &#39;addCard&#39;,
               &#39;openCard&#39;
             ]
            });
             
            wx.ready(function () {
              // 在這里調(diào)用 API
              wx.onMenuShareAppMessage({
                title: &#39;互聯(lián)網(wǎng)之子&#39;,
                desc: &#39;在長大的過程中,我才慢慢發(fā)現(xiàn),我身邊的所有事,別人跟我說的所有事,那些所謂本來如此,注定如此的事,它們其實沒有非得如此,事情是可以改變的。更重要的是,有些事既然錯了,那就該做出改變。&#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異步請求修改本次分享的內(nèi)容,因為客戶端分享操作是一個同步操作,這時候使用ajax的回包會還沒有返回
                  alert(&#39;用戶點擊發(fā)送給朋友&#39;);
                },
                success: function (res) {
                  alert(&#39;已分享&#39;);
                },
                cancel: function (res) {
                  alert(&#39;已取消&#39;);
                },
                fail: function (res) {
                  alert(JSON.stringify(res));
                }
              });
               
            document.querySelector(&#39;#ShareTimeLine&#39;).onclick = function () {
              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異步請求修改本次分享的內(nèi)容,因為客戶端分享操作是一個同步操作,這時候使用ajax的回包會還沒有返回
                      alert(&#39;用戶點擊分享到朋友圈&#39;);
                  },
                  success: function (res) {
                      alert(&#39;已分享&#39;);
                  },
                  cancel: function (res) {
                      alert(&#39;已取消&#39;);
                  },
                  fail: function (res) {
                      alert(JSON.stringify(res));
                  }
              });
            };  
             
             document.querySelector(&#39;#batchAddCard&#39;).onclick = function () {
              wx.addCard({
               cardList: [
                {
                 cardId: &#39;p7G0Cj_1HGF2nijO4sTlVTzawFhI&#39;,
                 cardExt: &#39;{"timestamp":"<?php echo $kqInfo[&#39;cardExt&#39;][&#39;timestamp&#39;];?>", "signature":"<?php echo $kqInfo[&#39;cardExt&#39;][&#39;signature&#39;];?>"}&#39;
                }
               ],
               success: function (res) {
                var cardList = res.cardList; // 添加的卡券列表信息
                alert(cardList);
               },
              cancel: function (res) {
                  alert(&#39;已取消&#39;);
              },
              fail: function (res) {
                  alert(JSON.stringify(res));
              }
              });
             };
              
             var shareData = {
              title: &#39;微信JS-SDK Demo&#39;,
              desc: &#39;微信JS-SDK,幫助第三方為用戶提供更優(yōu)質(zhì)的移動web服務(wù)&#39;,
              link: &#39;http://demo.open.weixin.qq.com/jssdk/&#39;,
              imgUrl: &#39;http://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRt8Qia4lv7k3M9J1SKqKCImxJCt7j9rHYicKDI45jRPBxdzdyREWnk0ia0N5TMnMfth7SdxtzMvVgXg/0&#39;
             };
              
             wx.onMenuShareAppMessage(shareData);
              
             wx.onMenuShareTimeline(shareData);
            });
       
            var readyFunc = function onBridgeReady() {
              // 綁定關(guān)注事件
              document.querySelector(&#39;#openCard&#39;).addEventListener(&#39;click&#39;,
                function(e) {
                  WeixinJSBridge.invoke(&#39;chooseCard&#39;, {
                    "app_id": "<?php echo $listInfo[&#39;app_id&#39;]?>",
                    "location_id ": &#39;&#39;,
                    "sign_type": "SHA1",
                    "card_sign": "<?php echo $listInfo[&#39;card_sign&#39;]?>",
                    "card_id": "<?php echo $listInfo[&#39;card_id&#39;]?>",
                    "card_type": "<?php echo $listInfo[&#39;card_type&#39;]?>",
                    "time_stamp": "<?php echo $listInfo[&#39;time_stamp&#39;]?>",
                    "nonce_str": "<?php echo $listInfo[&#39;nonce_str&#39;]?>"
                  },
                function(res) {
                  alert(res.err_msg + res.choose_card_info);
                  $("#showInfo").empty().append(res.err_msg + res.choose_card_info);
                });
              });
            }
             
            if (typeof WeixinJSBridge === "undefined") {
              document.addEventListener(&#39;WeixinJSBridgeReady&#39;, readyFunc, false);
            } else {
              readyFunc();
            }
       
           </script>
        </body>
      </html>

      5. [代碼]創(chuàng)建卡券

      $kqinfo = array("card" => array());
      $kqinfo[&#39;card&#39;][&#39;card_type&#39;] = &#39;GENERAL_COUPON&#39;;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;] = array(&#39;base_info&#39; => array(), &#39;default_detail&#39; => array());
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;logo_url&#39;] = &#39;URL&#39;;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;code_type&#39;] = &#39;CODE_TYPE_QRCODE&#39;;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;brand_name&#39;] = &#39;&#39;;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;title&#39;] = &#39;測試卡券&#39;;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;color&#39;] = &#39;Color030&#39;;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;notice&#39;] = &#39;測試測試測試&#39;;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;description&#39;] = &#39;這是一張優(yōu)惠券&#39;;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;date_info&#39;][&#39;type&#39;] = 1;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;date_info&#39;][&#39;begin_timestamp&#39;] = time();
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;date_info&#39;][&#39;end_timestamp&#39;] = time() + 100 * 24 * 3600;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;base_info&#39;][&#39;sku&#39;][&#39;quantity&#39;] = 100000;
      $kqinfo[&#39;card&#39;][&#39;general_coupon&#39;][&#39;default_detail&#39;] = &#39;測試數(shù)據(jù)\n測試數(shù)據(jù)\n測試數(shù)據(jù)&#39;;
       
      //var_dump($kqinfo);
      //$kqinfo = json_encode($kqinfo);
      $kqinfo = C::enJson($kqinfo);
       
      //print_r( $kqinfo);
      //$resultData = $wx->wxCardCreated($kqinfo);

      相關(guān)推薦:

      php Restful api 示例

      以上是微信API接口的詳細內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

      本站聲明
      本文內(nèi)容由網(wǎng)友自發(fā)貢獻,版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

      熱AI工具

      Undress AI Tool

      Undress AI Tool

      免費脫衣服圖片

      Undresser.AI Undress

      Undresser.AI Undress

      人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

      AI Clothes Remover

      AI Clothes Remover

      用于從照片中去除衣服的在線人工智能工具。

      Clothoff.io

      Clothoff.io

      AI脫衣機

      Video Face Swap

      Video Face Swap

      使用我們完全免費的人工智能換臉工具輕松在任何視頻中換臉!

      熱工具

      記事本++7.3.1

      記事本++7.3.1

      好用且免費的代碼編輯器

      SublimeText3漢化版

      SublimeText3漢化版

      中文版,非常好用

      禪工作室 13.0.1

      禪工作室 13.0.1

      功能強大的PHP集成開發(fā)環(huán)境

      Dreamweaver CS6

      Dreamweaver CS6

      視覺化網(wǎng)頁開發(fā)工具

      SublimeText3 Mac版

      SublimeText3 Mac版

      神級代碼編輯軟件(SublimeText3)

      熱門話題

      Laravel 教程
      1597
      29
      PHP教程
      1488
      72
      拷貝漫畫(官網(wǎng)入口)_拷貝漫畫(nba)正版在線閱讀入口 拷貝漫畫(官網(wǎng)入口)_拷貝漫畫(nba)正版在線閱讀入口 Jun 05, 2025 pm 04:12 PM

      拷貝漫畫無疑是一個不容錯過的寶藏。在這里,你可以找到各種風(fēng)格的籃球漫畫,從熱血勵志的競技故事,到輕松幽默的日常喜劇,應(yīng)有盡有。無論是想重溫經(jīng)典,還是想發(fā)掘新作,拷貝漫畫都能滿足你的需求。通過拷貝漫畫提供的正版在線閱讀入口,你將告別盜版資源的困擾,享受高清流暢的閱讀體驗,更能支持你喜愛的漫畫作者,為正版漫畫的發(fā)展貢獻一份力量。

      AI寫作軟件排行榜單前十名推薦 AI寫作軟件哪些免費 AI寫作軟件排行榜單前十名推薦 AI寫作軟件哪些免費 Jun 04, 2025 pm 03:27 PM

      結(jié)合 2025 年最新行業(yè)動態(tài)與多維度評測數(shù)據(jù),以下為綜合排名前十的 AI 寫作軟件推薦,涵蓋通用創(chuàng)作、學(xué)術(shù)研究、商業(yè)營銷等主流場景,同時兼顧中文優(yōu)化與本地化服務(wù):

      奈斯漫畫官方頁面免費漫畫在線看 奈斯漫畫登錄頁面免費入口網(wǎng)站 奈斯漫畫官方頁面免費漫畫在線看 奈斯漫畫登錄頁面免費入口網(wǎng)站 Jun 12, 2025 pm 08:18 PM

      奈斯漫畫,一個致力于為漫畫愛好者打造的沉浸式閱讀體驗平臺,匯聚了海量國內(nèi)外優(yōu)質(zhì)漫畫資源。它不僅僅是一個漫畫閱讀平臺,更是一個連接漫畫家與讀者、分享漫畫文化的社區(qū)。通過簡潔直觀的界面設(shè)計和強大的搜索功能,奈斯漫畫讓你能夠輕松找到心儀的作品,享受流暢舒適的閱讀體驗。告別漫長的等待和繁瑣的操作,即刻進入奈斯漫畫的世界,開啟你的漫畫之旅吧!

      蛙漫 網(wǎng)址在線看入口 漫蛙漫畫(網(wǎng)頁入口)在線觀看 蛙漫 網(wǎng)址在線看入口 漫蛙漫畫(網(wǎng)頁入口)在線觀看 Jun 12, 2025 pm 08:06 PM

      蛙漫漫畫,憑借其豐富多元的漫畫資源和便捷流暢的在線閱讀體驗,已成為眾多漫畫愛好者的首選。它就像一個充滿活力的池塘,源源不斷地涌現(xiàn)出新鮮有趣的故事,等待著你去發(fā)現(xiàn)和探索。蛙漫漫畫涵蓋了各種題材,從熱血冒險到甜蜜戀愛,從奇幻科幻到懸疑推理,無論你喜歡哪種類型,都能在這里找到心儀的作品。其簡潔直觀的界面設(shè)計,更讓你能夠輕松上手,快速找到想看的漫畫,沉浸在精彩紛呈的漫畫世界中。

      包子漫畫(入口)_包子漫畫(新入口)2025 包子漫畫(入口)_包子漫畫(新入口)2025 Jun 05, 2025 pm 04:18 PM

      在這里,您可以盡情暢游于浩瀚的漫畫海洋,探索各種題材和風(fēng)格的作品,從熱血激昂的少年漫,到細膩動人的少女漫,從懸疑燒腦的推理漫,到輕松搞笑的日常漫,應(yīng)有盡有,總有一款能夠觸動您的心弦。我們不僅擁有海量的正版漫畫資源,還不斷引進和更新最新的作品,確保您能夠第一時間閱讀到您喜愛的漫畫。

      b安最新注冊地址_怎么注冊b安交易所 b安最新注冊地址_怎么注冊b安交易所 May 26, 2025 pm 07:12 PM

      2025b安最新官網(wǎng)入口地址:https://www.marketwebb.co/zh-CN/join?ref=507720986&amp;type=wenzi;幣安(Binance)交易所是一家全球性的加密貨幣交易所,服務(wù)包括北美、歐洲、臺灣、中東、香港、馬來西亞在內(nèi)的180個國家地區(qū),提供超過600種加密貨幣,在全球擁有2.7億注冊用戶。

      安卓手機如何下載火幣 火必下載教程(手把手教程) 安卓手機如何下載火幣 火必下載教程(手把手教程) Jun 12, 2025 pm 10:12 PM

      安卓手機用戶可通過以下步驟下載并安裝火幣/火必App:1.確保網(wǎng)絡(luò)穩(wěn)定、存儲空間充足;2.通過火幣/火必官方網(wǎng)站下載App,使用瀏覽器訪問官網(wǎng)并點擊下載鏈接或掃描二維碼,或通過第三方應(yīng)用商店如應(yīng)用寶、華為應(yīng)用市場搜索下載,也可通過朋友分享獲取安裝包;3.找到下載的.apk文件,開啟“未知來源應(yīng)用”安裝權(quán)限,按提示完成安裝等等。

      易歐交易所下載安裝包 易歐安卓下載安裝包 易歐交易所下載安裝包 易歐安卓下載安裝包 Jun 12, 2025 pm 10:09 PM

      易歐交易所(OKX)安卓客戶端下載安裝步驟如下:1. 通過官網(wǎng)www.okx.com或官方二維碼下載官方正版安裝包;2. 在手機文件管理器中找到下載的.apk文件,開啟“未知來源”安裝權(quán)限;3. 點擊安裝包進行安裝,安裝完成后打開APP并注冊或登錄賬號;4. 設(shè)置復(fù)雜密碼、開啟二次驗證、定期更換密碼、妥善保管私鑰和助記詞,并謹防釣魚網(wǎng)站以保障賬戶安全。

      See all articles