<label id="v08f7"></label>
    <li id="v08f7"></li>

    <label id="v08f7"></label>
    \r\n        
    \r\n            \r\n            \r\n            \r\n            \r\n             \r\n            <\/div>\r\n        <\/div>\r\n         \r\n        

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

    ? php教程 PHP源碼 WeChat API ?????(??) - WeChat ??/WeChat ?? ??/WeChat ??/WeChat ???/JSAPI

    WeChat API ?????(??) - WeChat ??/WeChat ?? ??/WeChat ??/WeChat ???/JSAPI

    Nov 09, 2016 am 10:04 AM

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

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

    <?php
    include_once &#39;lib.inc.php&#39;;
    $wcObj = new WeChat("YOUKUIYUAN");
    $wcObj->wcValid();
    ?>
    <?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;://用戶瀏覽會(huì)員卡
                            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;
        }
         
    }
    ?>
    <?php
     
        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;
            }
             
             
        }
    <?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>
            <div>
                <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 />
                <div id="showInfo">
                 
                </div>
            </div>
             
            <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的回包會(huì)還沒有返回
                            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的回包會(huì)還沒有返回
                                    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;***********************&#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>
    $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);


    ? ????? ??
    ? ?? ??? ????? ???? ??? ??????, ???? ?????? ????. ? ???? ?? ???? ?? ??? ?? ????. ???? ??? ???? ???? ??? ?? admin@php.cn?? ?????.

    ? AI ??

    Undresser.AI Undress

    Undresser.AI Undress

    ???? ?? ??? ??? ?? AI ?? ?

    AI Clothes Remover

    AI Clothes Remover

    ???? ?? ???? ??? AI ?????.

    Video Face Swap

    Video Face Swap

    ??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

    ???

    ??? ??

    ???++7.3.1

    ???++7.3.1

    ???? ?? ?? ?? ???

    SublimeText3 ??? ??

    SublimeText3 ??? ??

    ??? ??, ???? ?? ????.

    ???? 13.0.1 ???

    ???? 13.0.1 ???

    ??? PHP ?? ?? ??

    ???? CS6

    ???? CS6

    ??? ? ?? ??

    SublimeText3 Mac ??

    SublimeText3 Mac ??

    ? ??? ?? ?? ?????(SublimeText3)

    ???

    ??? ??

    ??? ????
    1601
    29
    PHP ????
    1502
    276
    ???