南田鎮(zhèn)php實現(xiàn)微信sdk分享接口
閱讀 34755 · 發(fā)布日期 2020-08-24 17:26 · 溫州優(yōu)光網(wǎng)絡科技有限公司|建站|APP小程序制作|做網(wǎng)站SEO推廣優(yōu)化
【摘要】
軟件開發(fā)工具包(外語首字母縮寫:SDK、外語全稱:Software Development Kit)一般都是一些軟件工程師為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應用軟件時的開發(fā)工具的集合。本文主要和大家分享php實現(xiàn)微信sdk分享接口,希望能幫助到大家。 【溫州小程序開發(fā),溫州微信公眾號,平陽做網(wǎng)站,平陽網(wǎng)站建設公司,平陽小程序商城制作,昆陽萬全做網(wǎng)站,鰲江水頭小程序,蕭江騰蛟微信公眾號,山門順溪南雁海西南麂鳳臥麻步懷溪網(wǎng)絡網(wǎng)店服務,政采云網(wǎng)店管理服務】...
軟件開發(fā)工具包(外語首字母縮寫:SDK、外語全稱:Software Development Kit)一般都是一些軟件工程師為特定的軟件包、軟件框架、硬件平臺、操作系統(tǒng)等建立應用軟件時的開發(fā)工具的集合。
本文主要和大家分享php實現(xiàn)微信sdk分享接口,希望能幫助到大家。
private $appId;
private $appSecret;
/* * 這里為威獅碼的公眾號的openid和appsecret,如果配置到其他的子商家會出現(xiàn)需要關注威獅碼公眾號, * 則需要獲取數(shù)據(jù)庫的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();
// 這里參數(shù)的順序要按照 key 值 ASCII 碼升序排序 $string = "jsapi_ticket=$jsapiTicket&noncestr=$nonceStr×tamp=$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 $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 $accessToken = $this->getAccessToken();
//定義傳遞的參數(shù)數(shù)組 $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 //定義傳遞的參數(shù)數(shù)組 $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參數(shù)部分,但不包括'
#'
hash后面的部分。
確認 config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
確保一定緩存access_token和jsapi_ticket。
確保你獲取用來簽名的url是動態(tài)獲取的,動態(tài)頁面可參見實例代碼中php的實現(xiàn)方式。
如果是html的靜態(tài)頁面在前端通過ajax將url傳到后臺簽名,前端需要用js獲取當前頁面除去'
#'
hash部分的鏈接(可用location.href.split('
#'
)[0]獲取,而且需要encodeURIComponent,后臺decodeURIComponent解碼),因為頁面一旦分享,微信客戶端會在你的鏈接末尾加入其它參數(shù),如果不是動態(tài)獲取當前鏈接,將導致分享后的頁面簽名失敗。
簽名是正確,上面的步驟還沒能解決你的問題(invalid signature)那就用是url的問題,注意:
微信公眾號必須配置了你調試的安全域名(可以配置二級域名:
xxx.com,而不用配置多個a.xxx.com/b.xxx.com等)。
原因:
微信分享時候會給你當前頁面添加多個參數(shù),你sha1時候必須保證url地址是微信給你加了參數(shù)之后的地址,這樣才不會報config:
invalid signature.解決方案:
sha1之前url必須是解碼之后的正常的肉眼直接能識別的url,如果你用的是靜態(tài)頁面,在你配置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("您當前的網(wǎng)絡不穩(wěn)定請稍后再試!");
return;
}
var shareUrl = result.data.url;
wx.config({
debug: true, // 開啟調試模式,調用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過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實現(xiàn)微信sdk分享接口的詳細內容,更多請關注php中文網(wǎng)其它相關文章!
微信
分享相關標簽:
php 接口 分享本文原創(chuàng)發(fā)布php中文網(wǎng),轉載請注明出處,感謝您的尊重!
上一篇:
微信掃碼支付的Asp.Net MVC開發(fā)
下一篇:
微信如何獲取openid相關文章相關視頻修改微信號有什么影響嗎?微信中共享實時位置什么意思數(shù)據(jù)庫設計的基本原則是什么?微信小程序調用圖片安全APIphp實現(xiàn)微信sdk分享接口PHP開發(fā)基礎教程之簡介PHP新手入門之簡介PHP開發(fā)基礎教程之環(huán)境搭建php學習路線介紹php環(huán)境配置 [溫州做微信公眾號]
為您推薦
- 微信公眾號里“JS接口域名”實現(xiàn)分享功能 2020-08-24
- 微信支付驗證或簽名失敗是什么原因?附三種解決方案 2020-08-24
- android微信登陸、分享做了一段時間了發(fā)現(xiàn)的一些坑 2020-08-24
- 最新整理出的微信分享后端接口實現(xiàn)的大致流程 2020-08-24
- 微信公眾號開發(fā):商戶如何給用戶發(fā)紅包實例講解 2020-08-24
- 長見識了,原來微信瀏覽器內可以直接啟動外部瀏覽器 2020-08-24
- 怎么創(chuàng)建微信公眾號自定義菜單欄?這里給出了權威解答 2020-08-24
- 微信公眾號開發(fā),實現(xiàn)倒計時的一個功能(純代碼) 2020-08-24