成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

thinkphp3.2,微信JS-SDK開發(fā)過程中遇到的各種問題與細(xì)節(jié)分享

miya / 2802人閱讀

摘要:備注登錄后可在開發(fā)者中心查看對(duì)應(yīng)的接口權(quán)限。下載官網(wǎng)提供的示例代碼,參照中的代碼一步一步來實(shí)現(xiàn)。否則分享后的頁面會(huì)簽名失敗返回的與分享的是否一致

首先完成官方文檔前兩步(很好理解就不具體說了):
步驟一:綁定域名
先登錄微信公眾平臺(tái)進(jìn)入“公眾號(hào)設(shè)置”的“功能設(shè)置”里填寫“JS接口安全域名”。
備注:登錄后可在“開發(fā)者中心”查看對(duì)應(yīng)的接口權(quán)限。
步驟二:引入JS文件
在需要調(diào)用JS接口的頁面引入如下JS文件,(支持https):jweixin-1.2.0.js
備注:支持使用 AMD/CMD 標(biāo)準(zhǔn)模塊加載方法加載
然后是從步驟3開始進(jìn)行實(shí)現(xiàn)
步驟三:通過config接口注入權(quán)限驗(yàn)證配置
這個(gè)地方采用ajax的方式來注入權(quán)限;

    var link = "";                //用來接收返回的url

    $(document).ready(function(){
        ajaxconfig();
    });
    
    function ajaxconfig(){
        /*    獲取當(dāng)前頁面url,傳遞給服務(wù)器端完成簽名,此處是最大的坑一定要對(duì)url進(jìn)行encodeURIComponent(),
         *    因?yàn)轫撁嬉坏┓窒?,微信客戶端?huì)在你的鏈接末尾加入其它參數(shù),如果不是動(dòng)態(tài)獲取當(dāng)前鏈接,將導(dǎo)致分享后的頁面簽名失敗。
         */
        
        var url = encodeURIComponent(window.location.href.split("#")[0]);
        
        var eventinfo = {
            url:url,
        };
    
        $.ajax({

            type: "post",
            url: "{:U("Event/get_config")}",     //    服務(wù)器端url
            data : eventinfo,
            dataType: "json",
            success: function(obj){
                // 注入權(quán)限驗(yàn)證配置
                wx.config({
                    debug : true,                 //實(shí)現(xiàn)階段開啟debug
                    appId : obj.appId,             //必填,公眾號(hào)的唯一標(biāo)識(shí)
                    timestamp : obj.timestamp,   //必填,生成簽名的時(shí)間戳
                    nonceStr : obj.nonceStr,     //必填,生成簽名的隨機(jī)串
                    signature : obj.signature,     //必填,簽名
                    jsApiList : [                 //必填,需要使用的JS接口列表,所有JS接口列表見官方文檔
                        "checkJsApi",
                        "onMenuShareTimeline",
                        "onMenuShareAppMessage",
                        "onMenuShareQQ",
                        "onMenuShareWeibo"
                    ]
                }); 
                link = obj.url;                    //    獲取成功簽名返回的url
            }
        })
    }

    wx.ready(function () {
        // 注入權(quán)限驗(yàn)證成功后會(huì)執(zhí)行這里,以"分享給朋友"為例
        wx.onMenuShareAppMessage({
    
            title: "",                 // 分享標(biāo)題
            desc: "",                 // 分享描述
            link: link,             // 分享鏈接,該鏈接域名或路徑必須與當(dāng)前頁面對(duì)應(yīng)的公眾號(hào)JS安全域名一致(ajax返回的url)
            imgUrl: "",             // 分享圖標(biāo)
            type: "",                 // 分享類型,music、video或link,不填默認(rèn)為link
            dataUrl: "",             // 如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空
            success: function () { 
            
                // 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
            },
            cancel: function () { 
                // 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
            }
        });
         };

下一步,在服務(wù)器端完成簽名,返回權(quán)限驗(yàn)證配置信息。下載官網(wǎng)提供的示例代碼,參照jssdk.php中的代碼一步一步來實(shí)現(xiàn)。
先創(chuàng)建一個(gè)"活動(dòng)(Event)"控制器:EventController.class.php;模版文件event.html;

// 控制器代碼
// 獲取隨機(jī)串,直接復(fù)制jssdk.php
private function createNonceStr($length = 16) {
  $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  $str = "";
  for ($i = 0; $i < $length; $i++) {
    $str .= substr($chars, mt_rand(0, strlen($chars) - 1), 1);
  }
  return $str;
}
//獲取票據(jù),復(fù)制jssdk.php進(jìn)行修改
private function getJsApiTicket() {
//用于緩存jsapiTicket的文件地址,復(fù)制官方例子中的jsapi_ticket.php到你要存放的位置
//拼接文件地址
$jsapi_ticket_url = $_SERVER["DOCUMENT_ROOT"]."/Public/js/home/event/jsapi_ticket.php";
    
// jsapi_ticket 應(yīng)該全局存儲(chǔ)與更新,以下代碼以寫入到文件中做示例
$data = json_decode( $this -> get_php_file($jsapi_ticket_url) );    //修改get_php_file( )中的變量
if ($data->expire_time < time()) {
    $accessToken = $this->getAccessToken();    
    $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=$accessToken";
    $res = json_decode($this->httpGet($url));    
    $ticket = $res->ticket;
    if ($ticket) {
        $data -> expire_time = time() + 7000;
        $data -> jsapi_ticket = $ticket;
        $this -> set_php_file($jsapi_ticket_url, json_encode($data));    //修改set_php_file( )中的變量
    }
} else {
    $ticket = $data->jsapi_ticket;
}
  return $ticket;
}
//獲取AccessToken,復(fù)制jssdk.php進(jìn)行修改
private function getAccessToken() {
    
$appId = "你的AppID";
$appSecret = "開發(fā)者密碼AppSecret";
//用于緩存AccessToken的文件地址,復(fù)制官方例子中的access_token.php到你要存放的位置    
$access_token_url = $_SERVER["DOCUMENT_ROOT"]."/Public/js/home/event/access_token.php";
    
// access_token 應(yīng)該全局存儲(chǔ)與更新,以下代碼以寫入到文件中做示例
$data = json_decode($this->get_php_file($access_token_url));    //修改get_php_file( )中的變量    
if ( $data -> expire_time < time()) {  
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appId&secret=$appSecret";
    $res = json_decode($this->httpGet($url));
    $access_token = $res->access_token;    
    if ($access_token) {
        $data -> expire_time = time() + 7000;
        $data -> access_token = $access_token;    
        $this -> set_php_file($access_token_url, json_encode($data));    //修改set_php_file( )中的變量
    }
} else {    
    $access_token = $data->access_token;
}
return $access_token;
}

//直接復(fù)制jssdk.php
private function httpGet($url) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
$res = curl_exec($curl);
curl_close($curl);
return $res;
}
//直接復(fù)制jssdk.php
private function get_php_file($filename) {
return trim(substr(file_get_contents($filename), 15));
}
//直接復(fù)制jssdk.php
private function set_php_file($filename, $content) {
$fp = fopen($filename, "w");
fwrite($fp, "" . $content);
fclose($fp);
}

public function get_config(){
    
    $url = urldecode(I("post.url")); //    把a(bǔ)jax發(fā)送過來的url進(jìn)行解碼?。?!此處是坑
    $timestamp =  time();//    時(shí)間戳
    $nonceStr = $this -> createNonceStr(16);//    隨機(jī)串
    $jsapiTicket = $this-> getJsApiTicket();//    票據(jù)
    
    $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$timestamp&url=$url";

    $signature = sha1($string);//    簽名
    
    //在這也可以將 分享標(biāo)題,分享描述,縮略圖地址等一起返回    
    $config["appId"] = "AppID";
    $config["timestamp"] = $timestamp;
    $config["nonceStr"] = $nonceStr;
    $config["signature"] = $signature;
    $config["url"] = $url;
    
    $this -> ajaxReturn($config);    
}    

在手機(jī)測(cè)試,開啟debug后,如果簽名成功直接提示OK,如果簽名沒有成功,逐步打印,查找錯(cuò)誤位置。
1、AccessToken是否獲取成功
2、AccessToken和jsapiTicket 是否能寫入和讀取
3、url是否轉(zhuǎn)碼和解碼,這個(gè)地方非常重要。否則分享后的頁面會(huì)簽名失敗
4、ajax返回的url與分享的link是否一致

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/30676.html

相關(guān)文章

  • 微信 js-sdk 使用心得

    摘要:前端配置微信微信是微信公眾平臺(tái)面向網(wǎng)頁開發(fā)者提供的基于微信的網(wǎng)頁開發(fā)工具包,通過使用微信,網(wǎng)頁開發(fā)者,可借助微信高效的使用拍照掃碼錄音定位等原生應(yīng)用愛具有的能力。 前端配置微信 js-sdk 微信js-sdk 是微信公眾平臺(tái)面向網(wǎng)頁開發(fā)者提供的基于微信的網(wǎng)頁開發(fā)工具包,通過使用微信 js-sdk,網(wǎng)頁開發(fā)者,可借助微信高效的使用 拍照、掃碼、錄音、定位等原生應(yīng)用愛具有的能力。 前端開發(fā)...

    岳光 評(píng)論0 收藏0
  • 微信公眾號(hào)頁面(VUE)如何配置微信JS-SDK和高德地圖,以及遇到一些問題記錄

    摘要:安裝并引入依賴包這里是說明文檔下載依賴包在需要用到的模塊引入檢查是否引入成功可以在引入的模塊中執(zhí)行控制臺(tái)顯示以上代碼表示引入成功配置微信所有需要使用的頁面必須先注入配置信息,否則將無法調(diào)用開啟調(diào)試模式調(diào)用的所有的返回值會(huì) 1.安裝并引入JS-SDK依賴包 這里是JS-SDK說明文檔 1.1 npm 下載依賴包 npm install weixin-js-sdk --save 1.2.在...

    Joyven 評(píng)論0 收藏0
  • 深究WeixinJSBridge未定義之因

    摘要:未使用微信如果網(wǎng)頁中未使用微信用戶在微信中打開網(wǎng)站可能會(huì)觸發(fā)這個(gè)錯(cuò)誤,目前看來只有忽略。關(guān)于微信支付方法監(jiān)聽事件之后再進(jìn)行下一步操作方法直接使用文檔中的支付代碼,不要使用公眾號(hào)支付文檔里面的代碼。 Fundebug并沒有使用微信JS-SDK,然而卻收到了WeixinJSBridge is not defined的報(bào)錯(cuò): showImg(https://segmentfault.com...

    gself 評(píng)論0 收藏0
  • 帶你使用JS-SDK自定義微信分享效果

    摘要:準(zhǔn)備工作微信官方開發(fā)者文檔地址現(xiàn)在的思路已經(jīng)很明確了,就是通過調(diào)用微信的實(shí)現(xiàn)自定義分享效果。安裝微信開發(fā)者工具,用于本地調(diào)試。前言 想必各位在寫wap端時(shí)都遇到過這樣的場(chǎng)景吧   ----自定義分享標(biāo)題、圖片、描述 接下來小編給大家講解下分享相關(guān)操作 預(yù)期效果 原始的分享效果: 使用微信JS-SDK的分享效果: 可以看出縮略圖,標(biāo)題,摘要樣式良好,給用戶的體驗(yàn)很好。 準(zhǔn)備工作 微信官方...

    番茄西紅柿 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

miya

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<