微信分享筆記(第二版)
週日過來擼了一下微信分享的功能,翻了以前的部落格,微信分享等api筆記,發現寫的真的好混亂,還有有一些點當時都寫錯了,順手重新記錄一遍吧。
準備工作
首先是肯定參考 微信JS-SDK說明文件,如果你還沒有認證之後,開通了分享介面的微信公共號,可以在 微信公眾平臺
-> 開發者工具
->公共平臺測試工具
,申請一個測試號。
自動分配 一個測試公眾號
,AppID
,AppSecret
,這樣就可以做 Token 驗證和今天的主角 微信分享
了。按照 微信JS-SDK說明文件 JSSDK使用步驟,步驟一:繫結域名,在這個頁面要設定 JS介面安全域名
。
注意:個人主體的公眾號,是無法使用這個功能的。
另外:如果是真實的公眾平臺是需要驗證檔案的。
使用JSSDK
做完一些基礎配置之後,專案中分別要做兩件事情
服務端驗籤
獲取 access_token
之後 獲取 jsapi_ticket
,最後生成簽名 signature
,和生成簽名的引數一起返回給前端。
/**
* @var string
* APPID & APPSECRET
*/
private $APPID = "你的APPID";
private $APPSECRET = "你的APPSECRET";
/**
* @return array
* 生成簽名config
*/
public function outWeixin()
{
$jsapi_ticket = $this->getJsApiTicket();
$nonceStr = 'leon0204';
$url = "https://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//獲取當前不帶#和hash值的url
$timestamp = time();//當前時間戳
$string1 = "jsapi_ticket=" . $jsapi_ticket . "&noncestr=" . $nonceStr . "×tamp=" . $timestamp . "&url=" . $url;//按微信規定連線的字串
$signature = sha1($string1);//加密
$wxJsConfig = array();
$wxJsConfig['AppID'] = $this->APPID;
$wxJsConfig['timestamp'] = $timestamp;
$wxJsConfig['nonceStr'] = $nonceStr;
$wxJsConfig['signature'] = $signature;
return $wxJsConfig;
}
/**
* @return string
* 獲取jsapi_ticket
*/
private function getJsApiTicket()
{
$access_token = $this->getAccessToken();
$jsapi_ticket = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" . $access_token . "&type=jsapi";
$res = file_get_contents($jsapi_ticket); //獲取檔案內容或獲取網路請求的內容
$result = json_decode($res, true); //接受一個 JSON 格式的字串並且把它轉換為 PHP 變數
$jsapi_ticket = $result['ticket'];
return $jsapi_ticket;
}
/**
* @return mixed
* 獲取access_token
*/
private function getAccessToken()
{
$token_access_url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->APPID . "&secret=" . $this->APPSECRET;
$res = file_get_contents($token_access_url); //獲取檔案內容或獲取網路請求的內容
$result = json_decode($res, true); //接受一個 JSON 格式的字串並且把它轉換為 PHP 變數
$wxdata['access_token'] = $result['access_token'];
$access_token = $wxdata['access_token'];
return $access_token;
}
Important ! 這裡偷懶沒有寫快取 access_token
和 jsapi_ticket
,實際上一定要寫的。7200S 有效期,自己隨便通過什麼辦法設定快取就好了,不要每次都請求介面。
頁面使用 Jssdk
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script>
//微信
wx.config({
debug: false, // 開啟除錯模式,呼叫的所有api的返回值會在客戶端alert出來,若要檢視傳入的引數,可以在pc端開啟,引數資訊會通過log打出,僅在pc端時才會列印。
appId: '{{$wx['AppID']}}', // 必填,公眾號的唯一標識
timestamp: {{$wx['timestamp']}}, // 必填,生成簽名的時間戳
nonceStr: '{{$wx['nonceStr']}}', // 必填,生成簽名的隨機串
signature: '{{$wx['signature']}}',// 必填,簽名
jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS介面列表
});
@foreach($articleList as $value)
@section('pageDesc')@endsection
wx.ready(function () {
wx.onMenuShareTimeline({
title: '有人邀請你看:{{$value->title}}', // 分享標題
link: window.location.href, // 分享連結
imgUrl: '', // 分享圖示
success: function () {
// 使用者確認分享後執行的回撥函式
alert('分享成功');
},
cancel: function () {
// 使用者取消分享後執行的回撥函式
alert('取消分享');
}
});
wx.onMenuShareAppMessage({
title: '有人邀請你看:{{$value->title}}', // 分享標題
desc: '{{$value->description}}', // 分享描述
link: window.location.href, // 分享連結,該連結域名或路徑必須與當前頁面對應的公眾號JS安全域名一致
imgUrl: '', // 分享圖示
type: '', // 分享型別,music、video或link,不填預設為link
dataUrl: '', // 如果type是music或video,則要提供資料連結,預設為空
success: function () {
// 使用者確認分享後執行的回撥函式
alert('分享成功');
},
cancel: function () {
// 使用者取消分享後執行的回撥函式
alert('取消分享');
}
});
});
@endforeach
</script>
這裡模版引擎是 Laravel
中的 blade
。
這樣就完成分享啦
坑點
開啟 debug: true
方便除錯。
1 參考之前的部落格,一個點造成了簽名錯誤:
$string1 = "jsapi_ticket=".$jsapi_ticket."&noncestr=".$nonceStr."×tamp=".$timestamp."&url=".$url;//按微信規定連線的字串
// ×tamp 應該是 ×tamp ,也不知道之前是怎麼記錄的,坑了半天
這個簽名是通過 微信 JS 介面簽名校驗工具 輸入生成簽名的引數,和微信生成的簽名對比,看出來我的簽名演算法有問題。
2 提示 invalid url domain
,是我把域名設定成了 Https
,實際上寫域名 www.xxx.com
就可以了 。
3 簽名成功之後,發現分享時候,配置的標題沒有生效,因為是在微信客戶端測試的,後來退出微信客戶端搞定。
4 如果前端用 axios
或者 ajax 調介面,可能獲取不到 url
, 需要約定傳遞 url
引數 。axios
跨域 可以設定 header
解決 。
相關文章
- 微信sdk 公眾號 微信支付 NFC 坑&筆記筆記
- 微信分享
- 微信小程式學習筆記微信小程式筆記
- 微信團隊原創分享:iOS版微信的記憶體監控系統技術實踐iOS記憶體
- 《Effective Java 第二版》讀書筆記Java筆記
- 微信團隊原創分享:Android版微信後臺保活實戰分享(程式保活篇)Android
- 【Java】微信公眾號開發筆記Java筆記
- 微信小程式入門學習筆記微信小程式筆記
- 微信分享 - 開荒
- 微信語音分享
- 記一次微信分享前後端實現後端
- 微信小程式開發學習筆記[3]微信小程式筆記
- 微信小程式開發學習筆記[4]微信小程式筆記
- mpvue開發微信小程式踩坑筆記Vue微信小程式筆記
- 微信小程式開發學習筆記[2]微信小程式筆記
- 微信最新iOS微信6.7.4版正式釋出 iOS版微信6.7.4更新了什麼?iOS
- 實現微信分享功能
- VUE專案微信分享Vue
- android微信分享、微信支付的一些坑Android
- 印象筆記 --- 方法分享筆記筆記
- 分享為什麼不加微信分享呀
- Head First HTML 與 CSS(第二版)學習筆記HTMLCSS筆記
- 微信小程式--學習筆記(思維導圖)微信小程式筆記
- 微信JSSDK遇見的坑--vue微信自定義分享JSVue
- APICloud分享圖片到微信APICloud
- 微信分享測試步驟
- uniapp h5微信分享APPH5
- 微信分享(移動web端)Web
- Javabase筆記分享Java筆記
- 微信 Linux 測試版Linux
- php實現的微信分享到朋友圈並記錄分享次數功能PHP
- 微信支付 WEB APP 配置資訊流程(個人筆記)WebAPP筆記
- SAP FSM 學習筆記(二) : SAP FSM的微信接入筆記
- .Net微信網頁開發之使用微信JS-SDK自定義微信分享內容網頁JS
- javaSE第二章筆記Java筆記
- 微信自定義分享支援https(php)HTTPPHP
- 分享微信域名檢測API介面API
- Flutter Notes | Android 借殼分享微信FlutterAndroid