<strike id="8gmow"><rt id="8gmow"></rt></strike>
  • <ul id="8gmow"><center id="8gmow"></center></ul>
  • <fieldset id="8gmow"></fieldset>
    \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成人天堂

    WeChat 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. [代碼]微信入口類(lèi)

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

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

    <?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ù)會(huì)繼續(xù)進(jìn)行更新
       ********************************************************/
     
      class WxApi {
        //const appId     = "";
        //const appSecret   = "";
        const appId     = "";
        const appSecret   = "";
        //const mchid     = ""; //商戶(hù)號(hào)
        //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ū)提交數(shù)據(jù) - 微信紅包使用
         ****************************************************/
     
        public function wxHttpsRequestPem($url, $vars, $second=30,$aHeader=array()){
            $ch = curl_init();
            //超時(shí)時(shí)間
            curl_setopt($ch,CURLOPT_TIMEOUT,$second);
            curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);
            //這里設(shè)置代理,如果有的話(huà)
            //curl_setopt($ch,CURLOPT_PROXY, &#39;10.206.30.98&#39;);
            //curl_setopt($ch,CURLOPT_PROXYPORT, 8080);
            curl_setopt($ch,CURLOPT_URL,$url);
            curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);
            curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
     
            //以下兩種方式需選擇一種
     
            //第一種方法,cert 與 key 分別屬于兩個(gè).pem文件
            //默認(rèn)格式為PEM,可以注釋
            curl_setopt($ch,CURLOPT_SSLCERTTYPE,&#39;PEM&#39;);
            curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/apiclient_cert.pem&#39;);
            //默認(rèn)格式為PEM,可以注釋
            curl_setopt($ch,CURLOPT_SSLKEYTYPE,&#39;PEM&#39;);
            curl_setopt($ch,CURLOPT_SSLKEY,getcwd().&#39;/apiclient_key.pem&#39;);
     
            curl_setopt($ch,CURLOPT_CAINFO,&#39;PEM&#39;);
            curl_setopt($ch,CURLOPT_CAINFO,getcwd().&#39;/rootca.pem&#39;);
     
            //第二種方式,兩個(gè)文件合成一個(gè).pem文件
            //curl_setopt($ch,CURLOPT_SSLCERT,getcwd().&#39;/all.pem&#39;);
     
            if( count($aHeader) >= 1 ){
                curl_setopt($ch, CURLOPT_HTTPHEADER, $aHeader);
            }
     
            curl_setopt($ch,CURLOPT_POST, 1);
            curl_setopt($ch,CURLOPT_POSTFIELDS,$vars);
            $data = curl_exec($ch);
            if($data){
                curl_close($ch);
                return $data;
            }
            else { 
                $error = curl_errno($ch);
                echo "call faild, errorCode:$error\n"; 
                curl_close($ch);
                return false;
            }
        }
     
        /****************************************************
         * 微信獲取AccessToken 返回指定微信公眾號(hào)的at信息
         ****************************************************/
     
        public function wxAccessToken($appId = NULL , $appSecret = NULL){
            $appId     = is_null($appId) ? self::appId : $appId;
            $appSecret   = is_null($appSecret) ? self::appSecret : $appSecret;
             
            $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 返回指定微信公眾號(hào)的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;
        }
         
        /****************************************************
         * 微信通過(guò)OPENID獲取用戶(hù)信息,返回?cái)?shù)組
         ****************************************************/
     
        public function wxGetUser($openId){
          $wxAccessToken = $this->wxAccessToken();
          $url      = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$wxAccessToken."&openid=".$openId."&lang=zh_CN";
          $result     = $this->wxHttpsRequest($url);
          $jsoninfo    = json_decode($result, true);
          return $jsoninfo;
        }    
     
        /****************************************************
         * 微信生成二維碼ticket
         ****************************************************/
     
        public function wxQrCodeTicket($jsonData){
          $wxAccessToken = $this->wxAccessToken();
          $url    = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=".$wxAccessToken;
          $result     = $this->wxHttpsRequest($url,$jsonData);
          return $result;
        }
         
        /****************************************************
         * 微信通過(guò)ticket生成二維碼
         ****************************************************/
        public function wxQrCode($ticket){
          $url  = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" . urlencode($ticket);
          return $url;
        }
     
        /****************************************************
         *   發(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)頁(yè)面,只能獲取OPENID
         ****************************************************/
     
        public function wxOauthBase($redirectUrl,$state = "",$appId = NULL){
            $appId     = is_null($appId) ? self::appId : $appId;
            $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_base&state=".$state."#wechat_redirect";
            return $url;
        }
     
        /****************************************************
         * 微信設(shè)置OAUTH跳轉(zhuǎn)URL,返回字符串信息 - SCOPE = snsapi_userinfo //獲取用戶(hù)完整信息
         ****************************************************/
     
        public function wxOauthUserinfo($redirectUrl,$state = "",$appId = NULL){
            $appId     = is_null($appId) ? self::appId : $appId;
            $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$appId."&redirect_uri=".$redirectUrl."&response_type=code&scope=snsapi_userinfo&state=".$state."#wechat_redirect";
            return $url;
        }
     
        /****************************************************
         * 微信OAUTH跳轉(zhuǎn)指定URL
         ****************************************************/
     
        public function wxHeader($url){
            header("location:".$url);
        }
     
        /****************************************************
         * 微信通過(guò)OAUTH返回頁(yè)面中獲取AT信息
         ****************************************************/
     
        public function wxOauthAccessToken($code,$appId = NULL , $appSecret = NULL){
            $appId     = is_null($appId) ? self::appId : $appId;
            $appSecret   = is_null($appSecret) ? self::appSecret : $appSecret;
            $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$appId."&secret=".$appSecret."&code=".$code."&grant_type=authorization_code";
            $result     = $this->wxHttpsRequest($url);
            //print_r($result);
            $jsoninfo    = json_decode($result, true);
            //$access_token   = $jsoninfo["access_token"];
            return $jsoninfo;      
        }
     
        /****************************************************
         * 微信通過(guò)OAUTH的Access_Token的信息獲取當(dāng)前用戶(hù)信息 // 只執(zhí)行在snsapi_userinfo模式運(yùn)行
         ****************************************************/
     
        public function wxOauthUser($OauthAT,$openId){
            $url      = "https://api.weixin.qq.com/sns/userinfo?access_token=".$OauthAT."&openid=".$openId."&lang=zh_CN";
            $result     = $this->wxHttpsRequest($url);
            $jsoninfo    = json_decode($result, true);
            return $jsoninfo;      
        }
     
        /****************************************************
         * 創(chuàng)建自定義菜單
         ****************************************************/
     
        public function wxMenuCreate($jsonData){
          $wxAccessToken = $this->wxAccessToken();
          $url      = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $wxAccessToken;
          $result     = $this->wxHttpsRequest($url,$jsonData);
          $jsoninfo    = json_decode($result, true);
          return $jsoninfo;      
        }
     
        /****************************************************
         * 獲取自定義菜單
         ****************************************************/
     
        public function wxMenuGet(){
          $wxAccessToken = $this->wxAccessToken();
          $url      = "https://api.weixin.qq.com/cgi-bin/menu/get?access_token=" . $wxAccessToken;
          $result     = $this->wxHttpsRequest($url);
          $jsoninfo    = json_decode($result, true);
          return $jsoninfo;
        }
     
        /****************************************************
         * 刪除自定義菜單
         ****************************************************/
     
        public function wxMenuDelete(){
          $wxAccessToken = $this->wxAccessToken();
          $url      = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token=" . $wxAccessToken;
          $result     = $this->wxHttpsRequest($url);
          $jsoninfo    = json_decode($result, true);
          return $jsoninfo;
        }
     
        /****************************************************
         * 獲取第三方自定義菜單
         ****************************************************/
     
        public function wxMenuGetInfo(){
          $wxAccessToken = $this->wxAccessToken();
          $url      = "https://api.weixin.qq.com/cgi-bin/get_current_selfmenu_info?access_token=" . $wxAccessToken;
          $result     = $this->wxHttpsRequest($url);
          $jsoninfo    = json_decode($result, true);
          return $jsoninfo;
        }
             
        /*****************************************************
         *   生成隨機(jī)字符串 - 最長(zhǎng)為32位字符串
         *****************************************************/
        public function wxNonceStr($length = 16, $type = FALSE) {
          $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
          $str = "";
          for ($i = 0; $i < $length; $i++) {
           $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
          }
          if($type == TRUE){
            return strtoupper(md5(time() . $str));
          }
          else {
            return $str;
          }
        }
         
        /*******************************************************
         *   微信商戶(hù)訂單號(hào) - 最長(zhǎng)28位字符串
         *******************************************************/
         
        public function wxMchBillno($mchid = NULL) {
          if(is_null($mchid)){
            if(self::mchid == "" || is_null(self::mchid)){
              $mchid = time();
            }
            else{
              $mchid = self::mchid;
            }
          }
          else{
            $mchid = substr(addslashes($mchid),0,10);
          }
          return date("Ymd",time()).time().$mchid;
        }
         
        /*******************************************************
         *   微信格式化數(shù)組變成參數(shù)格式 - 支持url加密
         *******************************************************/   
         
        public function wxSetParam($parameters){
          if(is_array($parameters) && !empty($parameters)){
            $this->parameters = $parameters;
            return $this->parameters;
          }
          else{
            return array();
          }
        }
         
        /*******************************************************
         *   微信格式化數(shù)組變成參數(shù)格式 - 支持url加密
         *******************************************************/
         
      public function wxFormatArray($parameters = NULL, $urlencode = FALSE){
          if(is_null($parameters)){
            $parameters = $this->parameters;
          }
          $restr = "";//初始化空
          ksort($parameters);//排序參數(shù)
          foreach ($parameters as $k => $v){//循環(huán)定制參數(shù)
            if (null != $v && "null" != $v && "sign" != $k) {
              if($urlencode){//如果參數(shù)需要增加URL加密就增加,不需要?jiǎng)t不需要
                $v = urlencode($v);
              }
              $restr .= $k . "=" . $v . "&";//返回完整字符串
            }
          }
          if (strlen($restr) > 0) {//如果存在數(shù)據(jù)則將最后“&”刪除
            $restr = substr($restr, 0, strlen($restr)-1);
          }
          return $restr;//返回字符串
      }
         
        /*******************************************************
         *   微信MD5簽名生成器 - 需要將參數(shù)數(shù)組轉(zhuǎn)化成為字符串[wxFormatArray方法]
         *******************************************************/
        public function wxMd5Sign($content, $privatekey){
        try {
            if (is_null($privatekey)) {
              throw new Exception("財(cái)付通簽名key不能為空!");
            }
            if (is_null($content)) {
              throw new Exception("財(cái)付通簽名內(nèi)容不能為空");
            }
            $signStr = $content . "&key=" . $privatekey;
            return strtoupper(md5($signStr));
          }
          catch (Exception $e)
          {
            die($e->getMessage());
          }
        }
         
        /*******************************************************
         *   微信Sha1簽名生成器 - 需要將參數(shù)數(shù)組轉(zhuǎn)化成為字符串[wxFormatArray方法]
         *******************************************************/
        public function wxSha1Sign($content){
          try {
            if (is_null($content)) {
              throw new Exception("簽名內(nèi)容不能為空");
            }
            //$signStr = $content;
            return sha1($content);
          }
          catch (Exception $e)
          {
            die($e->getMessage());
          }
        }
         
        /*******************************************************
         *   微信jsApi整合方法 - 通過(guò)調(diào)用此方法獲得jsapi數(shù)據(jù)
         *******************************************************/    
        public function wxJsapiPackage(){
          $jsapi_ticket = $this->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ù)組無(wú)法解析");
          }
           
          $xml = "<xml>";
          foreach ($arr as $key=>$val)
          {
            if (is_numeric($val))
            {
              $xml.="<".$key.">".$val."</".$key.">"; 
            }
            else
              $xml.="<".$key."><![CDATA[".$val."]]></".$key.">"; 
          }
          $xml.="</xml>";
          return $xml; 
        }
         
        /*******************************************************
         *   微信卡券:上傳LOGO - 需要改寫(xiě)動(dòng)態(tài)功能
         *******************************************************/
        public function wxCardUpdateImg() {
          $wxAccessToken = $this->wxAccessToken();
          //$data[&#39;access_token&#39;] = $wxAccessToken;
          $data[&#39;buffer&#39;]   = &#39;@D:\\workspace\\htdocs\\yky_test\\logo.jpg&#39;;
          $url      = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token=".$wxAccessToken;
          $result     = $this->wxHttpsRequest($url,$data);
          $jsoninfo    = json_decode($result, true);
          return $jsoninfo;
          //array(1) { ["url"]=> string(121) "http://mmbiz.qpic.cn/mmbiz/ibuYxPHqeXePNTW4ATKyias1Cf3zTKiars9PFPzF1k5icvXD7xW0kXUAxHDzkEPd9micCMCN0dcTJfW6Tnm93MiaAfRQ/0" } 
        }
         
        /*******************************************************
         *   微信卡券:獲取顏色
         *******************************************************/
        public function wxCardColor(){
          $wxAccessToken = $this->wxAccessToken();
          $url        = "https://api.weixin.qq.com/card/getcolors?access_token=".$wxAccessToken;
          $result     = $this->wxHttpsRequest($url);
          $jsoninfo    = json_decode($result, true);
          return $jsoninfo;
        }
         
        /*******************************************************
         *   微信卡券:創(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ù)沒(méi)有附帶任何值 - 再生產(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();
      //通過(guò)網(wǎng)頁(yè)獲取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接口測(cè)試</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="拉起卡券庫(kù)" /><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;在長(zhǎng)大的過(guò)程中,我才慢慢發(fā)現(xiàn),我身邊的所有事,別人跟我說(shuō)的所有事,那些所謂本來(lái)如此,注定如此的事,它們其實(shí)沒(méi)有非得如此,事情是可以改變的。更重要的是,有些事既然錯(cuò)了,那就該做出改變。&#39;,
              link: &#39;http://movie.douban.com/subject/25785114/&#39;,
              imgUrl: &#39;http://demo.open.weixin.qq.com/jssdk/images/p2166127561.jpg&#39;,
              trigger: function (res) {
                // 不要嘗試在trigger中使用ajax異步請(qǐng)求修改本次分享的內(nèi)容,因?yàn)榭蛻?hù)端分享操作是一個(gè)同步操作,這時(shí)候使用ajax的回包會(huì)還沒(méi)有返回
                alert(&#39;用戶(hù)點(diǎn)擊發(fā)送給朋友&#39;);
              },
              success: function (res) {
                alert(&#39;已分享&#39;);
              },
              cancel: function (res) {
                alert(&#39;已取消&#39;);
              },
              fail: function (res) {
                alert(JSON.stringify(res));
              }
            });
             
          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異步請(qǐng)求修改本次分享的內(nèi)容,因?yàn)榭蛻?hù)端分享操作是一個(gè)同步操作,這時(shí)候使用ajax的回包會(huì)還沒(méi)有返回
                    alert(&#39;用戶(hù)點(diǎn)擊分享到朋友圈&#39;);
                },
                success: function (res) {
                    alert(&#39;已分享&#39;);
                },
                cancel: function (res) {
                    alert(&#39;已取消&#39;);
                },
                fail: function (res) {
                    alert(JSON.stringify(res));
                }
            });
          };  
           
           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,幫助第三方為用戶(hù)提供更優(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;測(cè)試卡券&#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;測(cè)試測(cè)試測(cè)試&#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;測(cè)試數(shù)據(jù)\n測(cè)試數(shù)據(jù)\n測(cè)試數(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 示例

    以上がWeChat APIインターフェースの詳細(xì)內(nèi)容です。詳細(xì)については、PHP 中國(guó)語(yǔ) Web サイトの他の関連記事を參照してください。

    このウェブサイトの聲明
    この記事の內(nèi)容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰屬します。このサイトは、それに相當(dāng)する法的責(zé)任を負(fù)いません。盜作または侵害の疑いのあるコンテンツを見(jiàn)つけた場(chǎng)合は、admin@php.cn までご連絡(luò)ください。

    ホットAIツール

    Undress AI Tool

    Undress AI Tool

    脫衣畫(huà)像を無(wú)料で

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード寫(xiě)真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    寫(xiě)真から衣服を削除するオンライン AI ツール。

    Clothoff.io

    Clothoff.io

    AI衣類(lèi)リムーバー

    Video Face Swap

    Video Face Swap

    完全無(wú)料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡(jiǎn)単に交換できます。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無(wú)料のコードエディター

    SublimeText3 中國(guó)語(yǔ)版

    SublimeText3 中國(guó)語(yǔ)版

    中國(guó)語(yǔ)版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強(qiáng)力な PHP 統(tǒng)合開(kāi)発環(huán)境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開(kāi)発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    會(huì)社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 會(huì)社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

    一部のアプリケーションが適切に機(jī)能しないようにする會(huì)社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業(yè)は、內(nèi)部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開(kāi)します。 ...

    通貨サークルでの最新ニュースアプリのランキングの推奨事項(xiàng)(2025年の権威あるリリース) 通貨サークルでの最新ニュースアプリのランキングの推奨事項(xiàng)(2025年の権威あるリリース) Apr 21, 2025 pm 09:33 PM

    最高の暗號(hào)通貨取引および分析プラットフォームには、次のものが含まれます。1。OKX:トレーディングボリュームの世界のナンバーワン、複數(shù)のトランザクションをサポートし、AI市場(chǎng)分析とチェーン上のデータ監(jiān)視を提供します。 2。Binance:世界最大の交換、詳細(xì)な市場(chǎng)條件と新しい通貨の初めての提供を提供します。 3。SESAMEオープンドア:スポット取引とOTCチャネルで知られている、自動(dòng)取引戦略を提供します。 4。CoinMarketCap:20,000通貨をカバーする権威ある市場(chǎng)データプラットフォーム。 5。COINGECKO:コミュニティの感情分析で知られることは、DefiおよびNFTトレンドの監(jiān)視を提供します。 6。非小口座:國(guó)內(nèi)の市場(chǎng)プラットフォーム。Aシェアと通貨市場(chǎng)の間の連攜の分析を提供します。 7。オンチェーンファイナンス:ブロックチェーンニュースに焦點(diǎn)を當(dāng)て、毎日詳細(xì)なレポートを更新します。 8。ゴールデンファイナンス:24小

    Tiktok Webバージョン入學(xué)ログインリンクアドレスhttps tiktok webバージョン入學(xué)ウェブサイト無(wú)料 Tiktok Webバージョン入學(xué)ログインリンクアドレスhttps tiktok webバージョン入學(xué)ウェブサイト無(wú)料 May 22, 2025 pm 04:24 PM

    Douyin Webバージョンのログインポータルはhttps://www.douyin.com/です。ログイン手順には次のものが含まれます。1。ブラウザを開(kāi)きます。 2。URLを入力してくださいhttps://www.douyin.com/; 3. [ログイン]ボタンをクリックして、ログインメソッドを選択します。 4.アカウントのパスワードを入力します。 5。完全にログインします。 Webバージョンは、ブラウジング、検索、インタラクション、ビデオのアップロード、個(gè)人用ホームページ管理などの機(jī)能を提供し、大畫(huà)面エクスペリエンス、マルチタスク、便利なアカウント管理、データ統(tǒng)計(jì)などの利點(diǎn)があります。

    暗號(hào)通貨交換の詐欺ルーチンは何ですか? 暗號(hào)通貨交換の詐欺ルーチンは何ですか? Apr 20, 2025 pm 05:06 PM

    暗號(hào)通貨交換に関する10のトップ詐欺 一般的な詐欺:偽の交換、ポンジの資本取引、契約操作、偽のコインフィッシング、顧客サービス詐欺など。 識(shí)別ポイント:規(guī)制ライセンスを確認(rèn)し、契約アドレスを確認(rèn)し、高利回りのコミットメントに注意してください 保護(hù)する必要があります: 主流の交換のみを使用します(Binance/Coinbase) ハードウェアウォレットを有効にします 秘密キー/検証コードを共有します 詐欺に対処する:すぐにスクリーンショットを撮り、資産を凍結(jié)し、プラットフォームで報(bào)告し、警察に報(bào)告する コア原則:パスワード/転送のリクエストは詐欺です!

    これらのC2Cトランザクションはバイナンスのリスクがありますか? これらのC2Cトランザクションはバイナンスのリスクがありますか? Apr 30, 2025 pm 06:54 PM

    Binance C2Cトランザクションにより、ユーザーは暗號(hào)通貨を直接売買(mǎi)し、カウンターパーティ、支払い、価格の変動(dòng)のリスクに注意を払うことができます。高クレジットユーザーを選択して安全な支払い方法を選択すると、リスクを減らすことができます。

    gate.ioセサミドア最新の公式アプリアドレス gate.ioセサミドア最新の公式アプリアドレス Apr 22, 2025 pm 01:03 PM

    公式gate.ioアプリは、次の方法でダウンロードできます。1。公式Webサイトgate.ioにアクセスしてダウンロードします。 2。AppStoreまたはGoogle Playで「gate.io」を検索してダウンロードします。安全性を確保するには、公式チャンネルからダウンロードしてください。

    JavaのパラメーターQRコードを使用してWeChatアプレットを正しく生成して表示する方法は? JavaのパラメーターQRコードを使用してWeChatアプレットを正しく生成して表示する方法は? Apr 19, 2025 pm 04:48 PM

    Javaにパラメーターを使用してWeChatアプレットQRコードを生成し、HTMLページに表示することは一般的な要件です。この記事では、Jの使用方法について詳しく説明します。

    UCブラウザまたはQQブラウザのどちらが良いですか? UCおよびQQブラウザーの詳細(xì)な比較と評(píng)価 UCブラウザまたはQQブラウザのどちらが良いですか? UCおよびQQブラウザーの詳細(xì)な比較と評(píng)価 May 22, 2025 pm 08:33 PM

    UCブラウザまたはQQブラウザの選択は、ニーズに依存します。1。UCブラウザは、高速負(fù)荷とリッチなエンターテイメント機(jī)能を追求するユーザーに適しています。 2。QQブラウザは、Tencent製品との安定性とシームレスな接続が必要なユーザーに適しています。

    See all articles