• <label id="pxtpz"><meter id="pxtpz"></meter></label>
      1. <span id="pxtpz"><optgroup id="pxtpz"></optgroup></span>

        當前位置:雨林木風下載站 > 網絡軟件教程 > 詳細頁面

        php完成微信sdk分享接口

        php完成微信sdk分享接口

        更新時間:2025-09-20 文章作者:未知 信息來源:網絡 閱讀次數:

        微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺...
        微信(WeChat)是騰訊公司于2011年1月21日推出的一個為智能終端提供即時通訊服務的免費應用程序,由張小龍所帶領的騰訊廣州研發中心產品團隊打造 [2] 。微信支持跨通信運營商、跨操作系統平臺通過網絡快速發送免費(需消耗少量網絡流量)語音短信、視頻、圖片和文字,同時,也可以使用通過共享流媒體內容的資料和基于位置的社交插件“搖一搖”、“漂流瓶”、“朋友圈”、”公眾平臺“、”語音記事本“等服務插件。
        軟件開發工具包(外語首字母縮寫:SDK、外語全稱:Software Development Kit)一般都是一些軟件工程師為特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件時的開發工具的集合。本文主要和大家分享php實現微信sdk分享接口,希望能幫助到大家。

        <?php
        class Wxsdk
        {
            private $appId;
            private $appSecret;
        
            /*
             * 這里為威獅碼的公眾號的openid和appsecret,如果配置到其他的子商家會出現需要關注威獅碼公眾號,
             * 則需要獲取數據庫的vender表里面的openid和appsecret
             * */
            public function __construct($appId = '自己的appid', $appSecret = '自己的appSecret')
            {
                $this->appId = $appId;
                $this->appSecret = $appSecret;
            }
        
        
            public function getSignPackage(Request $request)
            {
        //接收到前端的轉義url轉義回來
                $url = $_POST;
                $durl = $url['url'];
                $durl = urldecode($durl);
        
                $jsapiTicket = $this->getJsApiTicket();
                $timestamp = time();
                $nonceStr = $this->createNonceStr();
                // 這里參數的順序要按照 key 值 ASCII 碼升序排序
                $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr&timestamp=$timestamp&url=$durl";
        
        
                $signature = sha1($string);
        
        
                $signPackage = [
                    "appId" => $this->appId,
                    "nonceStr" => $nonceStr,
                    "timestamp" => $timestamp,
                    "url" => $url,
                    "signature" => $signature,
                    "rawString" => $string
                ];
        //        var_dump($signPackage);die;
                throw new SuccessMessage(['msg' => $signPackage]);
            }
        
        
            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;
            }
        
        
            private function getJsApiTicket()
            {
                // jsapi_ticket 應該全局存儲與更新,以下代碼以寫入到文件中做示例
                $data = json_decode(file_get_contents("jssdk/jsapi_ticket.json"));
                if ($data->expire_time < time()) {
                    $accessToken = $this->getAccessToken();
                    //定義傳遞的參數數組
                    $params['type'] = 'jsapi';
                    $params['access_token'] = $accessToken;
                    $url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $params['access_token'] . "&type=" . $params['type'] . "";
                    $res = json_decode(curl_get($url, $params));
                    $ticket = isset($res->ticket) ? $res->ticket : NULL;
                    if ($ticket) {
                        $res->expire_time = time() + 7000;
                        $res->jsapi_ticket = $ticket;
                        $fp = fopen("jssdk/jsapi_ticket.json", "w");
                        fwrite($fp, json_encode($res));
                        fclose($fp);
                    }
                } else {
                    $ticket = $data->jsapi_ticket;
                }
                return $ticket;
            }
        
        
            private function getAccessToken()
            {
                // access_token 應該全局存儲與更新,以下代碼以寫入到文件中做示例
                $data = json_decode(file_get_contents("jssdk/access_token.json"));
                if ($data->expire_time < time()) {
                    //定義傳遞的參數數組
                    $params['grant_type'] = 'client_credential';
                    $params['appid'] = $this->appId;
                    $params['secret'] = $this->appSecret;
                    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=" . $params['grant_type'] . "&appid=" . $params['appid'] . "&secret=" . $params['secret'] . "";
                    $res = json_decode(curl_post($url, $params));
                    $access_token = isset($res->access_token) ? $res->access_token : NULL;
                    if ($access_token) {
                        $res->expire_time = time() + 7000;
                        $res->access_token = $access_token;
                        $fp = fopen("jssdk/access_token.json", "w");
                        fwrite($fp, json_encode($res));
                        fclose($fp);
                    }
                } else {
                    $access_token = $data->access_token;
                }
                return $access_token;
            }
        前端代碼

        核對官方步驟,確認簽名算法。

        • 確認簽名算法正確,可用 http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 頁面工具進行校驗。

        • 確認config中nonceStr(js中駝峰標準大寫S), timestamp與用以簽名中的對應noncestr, timestamp一致。

        • 確認url是頁面完整的url(請在當前頁面alert(location.href.split('#')[0])確認),包括'http(s)://'部分,以及'?'后面的GET參數部分,但不包括'#'hash后面的部分。

        • 確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。

        • 確保一定緩存access_token和jsapi_ticket。

        • 確保你獲取用來簽名的url是動態獲取的,動態頁面可參見實例代碼中php的實現方式。如果是html的靜態頁面在前端通過ajax將url傳到后臺簽名,前端需要用js獲取當前頁面除去'#'hash部分的鏈接(可用location.href.split('#')[0]獲取,而且需要encodeURIComponent,后臺decodeURIComponent解碼),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數,如果不是動態獲取當前鏈接,將導致分享后的頁面簽名失敗。

        簽名是正確,上面的步驟還沒能解決你的問題(invalid signature)那就用是url的問題,注意:微信公眾號必須配置了你調試的安全域名(可以配置二級域名:xxx.com,而不用配置多個a.xxx.com/b.xxx.com等)。

        原因:微信分享時候會給你當前頁面添加多個參數,你sha1時候必須保證url地址是微信給你加了參數之后的地址,這樣才不會報config:invalid signature.

        解決方案:sha1之前url必須是解碼之后的正常的肉眼直接能識別的url,如果你用的是靜態頁面,在你配置wx.config之前,先通過encodeURIComponent(location.href.split('#')[0])把當前url編碼傳遞到后臺,后臺通過decodeURIComponent解碼,核心代碼如下:

        前臺html頁面,編碼傳遞url:

        jQuery.post("/xxx", {"url": encodeURIComponent(window.location.href.split('#')[0]),"t": new Date().getTime()}, function (result) {
            if (result.errno != 0) {
                alert("您當前的網絡不穩定請稍后再試!");
                return;
            }
            var shareUrl = result.data.url;
            wx.config({
                debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數,可以在pc端打開,參數信息會通過log打出,僅在pc端時才會打印。
                appId: 'xxx', // 必填,公眾號的唯一標識
                timestamp: result.data.timestamp, // 必填,生成簽名的時間戳
                nonceStr: result.data.nonceStr, // 必填,生成簽名的隨機串
                signature: result.data.signature,// 必填,簽名,見附錄1
                jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表見附錄2
            });

        以上就是php實現微信sdk分享接口的詳細內容,更多請關注php中文網其它相關文章!


        微信提供公眾平臺、朋友圈、消息推送等功能,用戶可以通過“搖一搖”、“搜索號碼”、“附近的人”、掃二維碼方式添加好友和關注公眾平臺,同時微信將內容分享給好友以及將用戶看到的精彩內容分享到微信朋友圈。

        溫馨提示:喜歡本站的話,請收藏一下本站!

        本類教程下載

        系統下載排行

        主站蜘蛛池模板: jizz免费观看视频| 亚洲无人区视频大全| 亚洲精品无码专区久久同性男| 免费看国产精品麻豆| 亚洲精品无码不卡在线播放HE| 亚洲gv猛男gv无码男同短文| 亚洲国产精品美女| 免费视频爱爱太爽了| 免费a级毛片无码av| 亚洲精品乱码久久久久久下载| 一级毛片免费毛片毛片| 免费观看AV片在线播放| 亚洲国产香蕉人人爽成AV片久久| 亚洲AV无码专区亚洲AV桃| 国产va在线观看免费| 欧洲精品免费一区二区三区| 亚洲AV中文无码字幕色三| 久久国产乱子精品免费女| 免费看小12萝裸体视频国产| www免费黄色网| 亚洲AV无码专区在线播放中文| 麻豆成人久久精品二区三区免费| 国产福利免费在线观看| 中文字幕亚洲综合小综合在线 | 国内免费高清在线观看| jlzzjlzz亚洲乱熟在线播放| 一本天堂ⅴ无码亚洲道久久| 中文在线免费看视频| 免费国产在线观看| GOGOGO高清免费看韩国| 亚洲国产精品狼友中文久久久| 77777亚洲午夜久久多喷| 国产成人无码区免费A∨视频网站 国产成人涩涩涩视频在线观看免费 | fc2成年免费共享视频18| 亚洲AV中文无码乱人伦下载| 亚色九九九全国免费视频| 亚洲欧洲无码AV不卡在线| 最近最新MV在线观看免费高清| 亚洲视频网站在线观看| 久久免费高清视频| 亚洲av无码一区二区三区观看|