\r\n    

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

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

    微信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;://點(diǎn)擊時間
                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ù)進(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();
            //超時時間
            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文件
            //默認(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;);
     
            //第二種方式,兩個文件合成一個.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)證時不返回確認(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加密就增加,不需要則不需要
                $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 一定要動態(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ù)實(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 都要加到這個列表中
            &#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í)沒有非得如此,事情是可以改變的。更重要的是,有些事既然錯了,那就該做出改變。&#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)榭蛻舳朔窒聿僮魇且粋€同步操作,這時候使用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)榭蛻舳朔窒聿僮魇且粋€同步操作,這時候使用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ì)的移動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)文章!

    本站聲明
    本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(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

    免費(fèi)脫衣服圖片

    Undresser.AI Undress

    Undresser.AI Undress

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

    AI Clothes Remover

    AI Clothes Remover

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

    Clothoff.io

    Clothoff.io

    AI脫衣機(jī)

    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)

    公司安全軟件導(dǎo)致應(yīng)用無法運(yùn)行?如何排查和解決? 公司安全軟件導(dǎo)致應(yīng)用無法運(yùn)行?如何排查和解決? Apr 19, 2025 pm 04:51 PM

    公司安全軟件導(dǎo)致部分應(yīng)用無法正常運(yùn)行的排查與解決方法許多公司為了保障內(nèi)部網(wǎng)絡(luò)安全,會部署安全軟件。...

    幣圈最新消息APP排名推薦(2025權(quán)威發(fā)布) 幣圈最新消息APP排名推薦(2025權(quán)威發(fā)布) Apr 21, 2025 pm 09:33 PM

    最佳的加密貨幣交易和分析平臺包括:1. OKX:全球交易量第一,支持多種交易,提供AI行情分析和鏈上數(shù)據(jù)監(jiān)控。 2. 幣安:全球最大交易所,提供深度行情和新幣首發(fā)。 3. 芝麻開門:以現(xiàn)貨交易和OTC通道著稱,提供自動化交易策略。 4. CoinMarketCap:權(quán)威行情數(shù)據(jù)平臺,覆蓋20000 幣種。 5. CoinGecko:以社區(qū)情緒分析見長,提供DeFi和NFT趨勢監(jiān)控。 6. 非小號:國內(nèi)行情平臺,提供A股與幣市聯(lián)動分析。 7. 鏈上財(cái)經(jīng):專注區(qū)塊鏈新聞,每日更新深度報(bào)道。 8. 金色財(cái)經(jīng):24小

    抖音網(wǎng)頁版入口登錄鏈接地址https 抖音網(wǎng)頁版入口網(wǎng)址免費(fèi) 抖音網(wǎng)頁版入口登錄鏈接地址https 抖音網(wǎng)頁版入口網(wǎng)址免費(fèi) May 22, 2025 pm 04:24 PM

    抖音網(wǎng)頁版的登錄入口是https://www.douyin.com/。登錄步驟包括:1.打開瀏覽器;2.輸入網(wǎng)址https://www.douyin.com/;3.點(diǎn)擊“登錄”按鈕并選擇登錄方式;4.輸入賬號密碼;5.完成登錄。網(wǎng)頁版提供了瀏覽、搜索、互動、上傳視頻和個人主頁管理等功能,具有大屏幕體驗(yàn)、多任務(wù)處理、便捷的賬號管理和數(shù)據(jù)統(tǒng)計(jì)等優(yōu)勢。

    加密貨幣交易所詐騙套路有哪些 加密貨幣交易所詐騙套路有哪些 Apr 20, 2025 pm 05:06 PM

    加密貨幣交易所10大騙局速查表 常見騙局:虛假交易所、龐氏資金盤、合約操控、假的幣釣魚、客服詐騙等 識別要點(diǎn):查監(jiān)管牌照、核對合約地址、警惕高收益承諾 必做防護(hù): 只用主流交易所(Binance/Coinbase) 啟用硬件錢包 拒絕共享私鑰/驗(yàn)證碼 遇騙處理:立即截圖、凍結(jié)資產(chǎn)、平臺舉報(bào) 報(bào)警 核心原則:任何索要密碼/轉(zhuǎn)賬的要求都是詐騙!

    幣安這些c2c交易有風(fēng)險嗎 幣安這些c2c交易有風(fēng)險嗎 Apr 30, 2025 pm 06:54 PM

    幣安C2C交易讓用戶直接買賣加密貨幣,需注意交易對手、支付和價格波動風(fēng)險,選擇高信用度用戶和安全支付方式可降低風(fēng)險。

    Java如何正確生成并顯示微信小程序帶參數(shù)二維碼? Java如何正確生成并顯示微信小程序帶參數(shù)二維碼? Apr 19, 2025 pm 04:48 PM

    在Java中生成帶參數(shù)的微信小程序二維碼并將其顯示在HTML頁面上,是一個常見的需求。本文將詳細(xì)探討如何使用J...

    gate.io芝麻開門最新官方app地址 gate.io芝麻開門最新官方app地址 Apr 22, 2025 pm 01:03 PM

    Gate.io官方APP可以通過以下方式下載:1. 訪問官方網(wǎng)站gate.io下載;2. 在App Store或Google Play搜索&quot;Gate.io&quot;下載。務(wù)必通過官方渠道下載以確保安全。

    uc瀏覽器與qq瀏覽器哪個好用 uc和qq瀏覽器深度對比評測 uc瀏覽器與qq瀏覽器哪個好用 uc和qq瀏覽器深度對比評測 May 22, 2025 pm 08:33 PM

    選擇UC瀏覽器還是QQ瀏覽器取決于你的需求:1.UC瀏覽器適合追求快速加載和豐富娛樂功能的用戶;2.QQ瀏覽器適合需要穩(wěn)定性和與騰訊產(chǎn)品無縫連接的用戶。

    See all articles