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接口 ,有著一定的參考價(jià)值,現(xiàn)在分享給大家,有需要的朋友可以參考一下

      本文給大家介紹的是個(gè)人總結(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;://點(diǎn)擊時(shí)間
                  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 "暫時(shí)沒有任何信息!";
            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ù)進(jìn)行更新
         ********************************************************/
       
        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();
              //超時(shí)時(shí)間
              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 分別屬于兩個(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 返回指定微信公眾號的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獲取用戶信息,返回?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;
          }
           
          /****************************************************
           * 微信通過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 //驗(yàn)證時(shí)不返回確認(rèn)頁面,只能獲取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的信息獲取當(dāng)前用戶信息 // 只執(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;
          }
               
          /*****************************************************
           *   生成隨機(jī)字符串 - 最長為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加密就增加,不需要?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整合方法 - 通過調(diào)用此方法獲得jsapi數(shù)據(jù)
           *******************************************************/    
          public function wxJsapiPackage(){
            $jsapi_ticket = $this->wxJsApiTicket();
             
            // 注意 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;
          }
           
           
          /*******************************************************
           *   將數(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 - 需要改寫動(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;
          }
           
          /*******************************************************
           *   微信卡券:創(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ù)實(shí)際情況進(jìn)行修改
           *******************************************************/   
          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 都要加到這個(gè)列表中
              &#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),我身邊的所有事,別人跟我說的所有事,那些所謂本來如此,注定如此的事,它們其實(shí)沒有非得如此,事情是可以改變的。更重要的是,有些事既然錯(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異步請求修改本次分享的內(nèi)容,因?yàn)榭蛻舳朔窒聿僮魇且粋€(gè)同步操作,這時(shí)候使用ajax的回包會還沒有返回
                  alert(&#39;用戶點(diǎn)擊發(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)容,因?yàn)榭蛻舳朔窒聿僮魇且粋€(gè)同步操作,這時(shí)候使用ajax的回包會還沒有返回
                      alert(&#39;用戶點(diǎn)擊分享到朋友圈&#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ì)的移動(dòng)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介面的詳細(xì)內(nèi)容。更多資訊請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

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

      熱AI工具

      Undress AI Tool

      Undress AI Tool

      免費(fèi)脫衣圖片

      Undresser.AI Undress

      Undresser.AI Undress

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

      AI Clothes Remover

      AI Clothes Remover

      用於從照片中去除衣服的線上人工智慧工具。

      Clothoff.io

      Clothoff.io

      AI脫衣器

      Video Face Swap

      Video Face Swap

      使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

      熱工具

      記事本++7.3.1

      記事本++7.3.1

      好用且免費(fèi)的程式碼編輯器

      SublimeText3漢化版

      SublimeText3漢化版

      中文版,非常好用

      禪工作室 13.0.1

      禪工作室 13.0.1

      強(qiáng)大的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

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

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

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

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

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

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

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

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

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

      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個(gè)國家地區(qū),提供超過600種加密貨幣,在全球擁有2.7億註冊用戶。

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

      安卓手機(jī)用戶可通過以下步驟下載並安裝火幣/火必App:1.確保網(wǎng)絡(luò)穩(wěn)定、存儲空間充足;2.通過火幣/火必官方網(wǎng)站下載App,使用瀏覽器訪問官網(wǎng)並點(diǎn)擊下載鏈接或掃描二維碼,或通過第三方應(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. 在手機(jī)文件管理器中找到下載的.apk文件,開啟“未知來源”安裝權(quán)限;3. 點(diǎn)擊安裝包進(jìn)行安裝,安裝完成後打開APP並註冊或登錄賬號;4. 設(shè)置複雜密碼、開啟二次驗(yàn)證、定期更換密碼、妥善保管私鑰和助記詞,並謹(jǐn)防釣魚網(wǎng)站以保障賬戶安全。

      See all articles