首先要有一個認(rèn)證過的公眾號,才會有權(quán)限
打開微信的jsskd 使用說明
在頁面中引入微信的js文件
http://res.wx.qq.com/open/js/...
引入后
配置config
wx.config({
debug: true, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。
appId: '', // 必填,公眾號的唯一標(biāo)識
timestamp: , // 必填,生成簽名的時間戳
nonceStr: '', // 必填,生成簽名的隨機(jī)串
signature: '',// 必填,簽名
jsApiList: [] // 必填,需要使用的JS接口列表
});
詳細(xì)說一下怎么獲取每一個屬性
debug 為true的時候方便找錯,提示你的錯誤信息
appId 就是你公眾號的id
timestamp 就是一個隨機(jī)的時間戳,溫馨提示時間戳最多為10位,當(dāng)時因?yàn)檫@個問題找了半天
nonceStr 就是一個隨機(jī)字符串
signature 簽名,最麻煩的
要獲取簽名 先要獲取 access_token (有效期7200秒,開發(fā)者必須在自己的服務(wù)全局緩存access_token ):
access_token通過接口獲取
https請求方式: GET
https://api.weixin.qq.com/cgi...
appid 是你自己的id,secret是你自己的秘鑰
正常情況下,微信會返回下述JSON數(shù)據(jù)包給公眾號:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
錯誤時微信會返回錯誤碼等信息,JSON數(shù)據(jù)包示例如下(該示例為AppID無效錯誤):
{"errcode":40013,"errmsg":"invalid appid"}
記得獲取完 access_token 要配置白名單 不然會報錯 40094,白名單可以配置多個,用回車 隔開
第一步拿到的access_token 采用http GET方式請求獲得jsapi_ticket(有效期7200秒,開發(fā)者必須在自己的服務(wù)全局緩存jsapi_ticket)
https://api.weixin.qq.com/cgi...
access_token 是你剛剛獲取到的 access_token,type是固定的
成功返回如下JSON:
{
"errcode":0,
"errmsg":"ok",
"ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-
41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
"expires_in":7200
}
獲得jsapi_ticket之后,就可以生成JS-SDK權(quán)限驗(yàn)證的簽名了。簽名算法建議放在后臺來實(shí)現(xiàn)
簽名生成規(guī)則如下:參與簽名的字段包括noncestr(隨機(jī)字符串), 有效的jsapi_ticket, timestamp(時間戳), url(當(dāng)前網(wǎng)頁的URL,不包含#及其后面部分) 。對所有待簽名參數(shù)按照字段名的ASCII 碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1。這里需要注意的是所有參數(shù)名均為小寫字符。對string1作sha1加密,字段名和字段值都采用原始值,不進(jìn)行URL 轉(zhuǎn)義。
即signature=sha1(string1)。 示例:
noncestr=Wm3WZYTPz0wzccnW
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg
timestamp=1414587457
url=http://mp.weixin.qq.com?params=value
步驟1. 對所有待簽名參數(shù)按照字段名的ASCII 碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1:
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW×tamp=1414587457&url=http://mp.weixin.qq.com?params=value
步驟2. 對string1進(jìn)行sha1簽名,得到signature:
0f9de62fce790f9a083d5c99e95740ceb90c27ed
注意事項(xiàng)
1.簽名用的noncestr和timestamp必須與wx.config中的nonceStr和timestamp相同。
2.簽名用的url必須是調(diào)用JS接口頁面的完整URL。
3.出于安全考慮,開發(fā)者必須在服務(wù)器端實(shí)現(xiàn)簽名的邏輯。
如出現(xiàn)invalid signature 等錯誤詳見附錄5常見錯誤及解決辦法。
常見的報錯
調(diào)用config 接口的時候傳入?yún)?shù) debug: true 可以開啟debug模式,頁面會alert出錯誤信息。以下為常見錯誤及解決方法:
1.invalid url domain當(dāng)前頁面所在域名與使用的appid沒有綁定,請確認(rèn)正確填寫綁定的域名,僅支持80(http)和443(https)兩個端口,因此不需要填寫端口號(一個appid可以綁定三個有效域名,見 ]目錄1.1.1)。
2.invalid signature簽名錯誤。建議按如下順序檢查:
1.確認(rèn)簽名算法正確,可用http://mp.weixin.qq.com/debug... 頁面工具進(jìn)行校驗(yàn)。
2.確認(rèn)config中nonceStr(js中駝峰標(biāo)準(zhǔn)大寫S), timestamp與用以簽名中的對應(yīng)noncestr, timestamp一致。
3.確認(rèn)url是頁面完整的url(請?jiān)诋?dāng)前頁面alert(location.href.split('#')[0])確認(rèn)),包括'http(s)://'部分,以及'?'后面的GET參數(shù)部分,但不包括'#'hash后面的部分。
4.確認(rèn) config 中的 appid 與用來獲取 jsapi_ticket 的 appid 一致。
5.確保一定緩存access_token和jsapi_ticket。
6.確保你獲取用來簽名的url是動態(tài)獲取的,動態(tài)頁面可參見實(shí)例代碼中php的實(shí)現(xiàn)方式。如果是html的靜態(tài)頁面在前端通過ajax將url傳到后臺簽名,前端需要用js獲取當(dāng)前頁面除去'#'hash部分的鏈接(可用location.href.split('#')[0]獲取,而且需要encodeURIComponent),因?yàn)轫撁嬉坏┓窒?,微信客戶端會在你的鏈接末尾加入其它參?shù),如果不是動態(tài)獲取當(dāng)前鏈接,將導(dǎo)致分享后的頁面簽名失敗。
3.the permission value is offline verifying這個錯誤是因?yàn)閏onfig沒有正確執(zhí)行,或者是調(diào)用的JSAPI沒有傳入config的jsApiList參數(shù)中。建議按如下順序檢查:
1.確認(rèn)config正確通過。
2.如果是在頁面加載好時就調(diào)用了JSAPI,則必須寫在wx.ready的回調(diào)中。
3.確認(rèn)config的jsApiList參數(shù)包含了這個JSAPI。
4.permission denied該公眾號沒有權(quán)限使用這個JSAPI,或者是調(diào)用的JSAPI沒有傳入config的jsApiList參數(shù)中(部分接口需要認(rèn)證之后才能使用)。
5.function not exist當(dāng)前客戶端版本不支持該接口,請升級到新版體驗(yàn)。
6.為什么6.0.1版本config:ok,但是6.0.2版本之后不ok(因?yàn)?.0.2版本之前沒有做權(quán)限驗(yàn)證,所以config都是ok,但這并不意味著你config中的簽名是OK的,請?jiān)?.0.2檢驗(yàn)是否生成正確的簽名以保證config在高版本中也ok。)
7.在iOS和Android都無法分享(請確認(rèn)公眾號已經(jīng)認(rèn)證,只有認(rèn)證的公眾號才具有分享相關(guān)接口權(quán)限,如果確實(shí)已經(jīng)認(rèn)證,則要檢查監(jiān)聽接口是否在wx.ready回調(diào)函數(shù)中觸發(fā))
8.服務(wù)上線之后無法獲取jsapi_ticket,自己測試時沒問題。(因?yàn)閍ccess_token和jsapi_ticket必須要在自己的服務(wù)器緩存,否則上線后會觸發(fā)頻率限制。請確保一定對token和ticket做緩存以減少2次服務(wù)器請求,不僅可以避免觸發(fā)頻率限制,還加快你們自己的服務(wù)速度。目前為了方便測試提供了1w的獲取量,超過閥值后,服務(wù)將不再可用,請確保在服務(wù)上線前一定全局緩存access_token和jsapi_ticket,兩者有效期均為7200秒,否則一旦上線觸發(fā)頻率限制,服務(wù)將不再可用)。
9.uploadImage怎么傳多圖(目前只支持一次上傳一張,多張圖片需等前一張圖片上傳之后再調(diào)用該接口)
10.沒法對本地選擇的圖片進(jìn)行預(yù)覽(chooseImage接口本身就支持預(yù)覽,不需要額外支持)
11.通過a鏈接(例如先通過微信授權(quán)登錄)跳轉(zhuǎn)到b鏈接,invalid signature簽名失?。ê笈_生成簽名的鏈接為使用jssdk的當(dāng)前鏈接,也就是跳轉(zhuǎn)后的b鏈接,請不要用微信登錄的授權(quán)鏈接進(jìn)行簽名計(jì)算,后臺簽名的url一定是使用jssdk的當(dāng)前頁面的完整url除去'#'部分)
12.出現(xiàn)config:fail錯誤(這是由于傳入的config參數(shù)不全導(dǎo)致,請確保傳入正確的appId、timestamp、nonceStr、signature和需要使用的jsApiList)
13.如何把jsapi上傳到微信的多媒體資源下載到自己的服務(wù)器(請參見文檔中uploadVoice和uploadImage接口的備注說明)
14.Android通過jssdk上傳到微信服務(wù)器,第三方再從微信下載到自己的服務(wù)器,會出現(xiàn)雜音(微信團(tuán)隊(duì)已經(jīng)修復(fù)此問題,目前后臺已優(yōu)化上線)
15.綁定父級域名,是否其子域名也是可用的(是的,合法的子域名在綁定父域名之后是完全支持的)
16.在iOS微信6.1版本中,分享的圖片外鏈不顯示,只能顯示公眾號頁面內(nèi)鏈的圖片或者微信服務(wù)器的圖片,已在6.2中修復(fù)
17.是否需要對低版本自己做兼容(jssdk都是兼容低版本的,不需要第三方自己額外做更多工作,但有的接口是6.0.2新引入的,只有新版才可調(diào)用)
18.該公眾號支付簽名無效,無法發(fā)起該筆交易(請確保你使用的jweixin.js是官方線上版本,不僅可以減少用戶流量,還有可能對某些bug進(jìn)行修復(fù),拷貝到第三方服務(wù)器中使用,官方將不對其出現(xiàn)的任何問題提供保障,具體支付簽名算法可參考 JSSDK微信支付一欄)
19.目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實(shí)現(xiàn)web app的頁面會導(dǎo)致簽名失敗,此問題已在Android6.2中修復(fù)
20.uploadImage在chooseImage的回調(diào)中有時候Android會不執(zhí)行,Android6.2會解決此問題,若需支持低版本可以把調(diào)用uploadImage放在setTimeout中延遲100ms解決
21.require subscribe錯誤說明你沒有訂閱該測試號,該錯誤僅測試號會出現(xiàn)
22.getLocation返回的坐標(biāo)在openLocation有偏差,因?yàn)間etLocation返回的是gps坐標(biāo),openLocation打開的騰訊地圖為火星坐標(biāo),需要第三方自己做轉(zhuǎn)換,6.2版本開始已經(jīng)支持直接獲取火星坐標(biāo)
23.查看公眾號(未添加): "menuItem:addContact"不顯示,目前僅有從公眾號傳播出去的鏈接才能顯示,來源必須是公眾號
24.ICP備案數(shù)據(jù)同步有一天延遲,所以請?jiān)诘诙战壎?/p>
因?yàn)殡S機(jī)字符串和時間戳要和算法的保持一致,所以我是用了后臺返回給我的,
每次分享微信客戶端都會在你的鏈接后面加上參數(shù),表示這是第二次分享的,
一旦加入?yún)?shù)會導(dǎo)致我們的簽名失敗。當(dāng)時我也是很絕望啊,在網(wǎng)上找了很多的例子都沒有能實(shí)質(zhì)性的解決這個問題,最后解決方案是
我每次會把當(dāng)前的url傳遞給后臺,后臺每次都在生成簽名,但是7200秒生成的簽名是不會變的,感覺可行,立馬實(shí)施起來
附上源碼
Weixin(){
console.log(window.location.href.split('#')[0]);
let encodeURIComponen=encodeURIComponent(window.location.href.split('#')[0]);
const data={jssdkUrl:encodeURIComponen};
console.log(data);
axios.post("./api/getSignature",data,{
headers: {
"Content-Type": "application/json",
"Accept":"application/json"
}
}).then((response) => {
//success
console.log(response);
const jssdk=response.data.data;
wx.config({
debug: false, // 開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。
appId: jssdk.appId, // 必填,公眾號的唯一標(biāo)識
timestamp: jssdk.timestamp, // 必填,生成簽名的時間戳
nonceStr:jssdk.nonceStr, // 必填,生成簽名的隨機(jī)串
signature: jssdk.signature,// 必填,簽名
jsApiList: [
"onMenuShareTimeline",
"onMenuShareAppMessage"
] // 必填,需要使用的JS接口列表
});
//分享
wx.ready(function(){
// 微信分享的數(shù)據(jù)
//分享給朋友圈
wx.onMenuShareTimeline({
title: '', // 分享標(biāo)題
link: window.location.href.split('#')[0], // 分享鏈接,該鏈接域名或路徑必須與當(dāng)前頁面對應(yīng)的公眾號JS安全域名一致
imgUrl: '', // 分享圖標(biāo)
success: function () {
// 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
console.log("分享成功");
},cancel: function () {
// 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
console.log("分享失敗");
}
});
//分享給朋友
wx.onMenuShareAppMessage({
title: '', // 分享標(biāo)題
desc: '', // 分享描述
link: window.location.href.split('#')[0], // 分享鏈接,該鏈接域名或路徑必須與當(dāng)前頁面對應(yīng)的公眾號JS安全域名一致
imgUrl: '', // 分享圖標(biāo)
type: 'link', // 分享類型,music、video或link,不填默認(rèn)為link
success: function () {
// 用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù)
console.log("分享成功");
},
cancel: function () {
// 用戶取消分享后執(zhí)行的回調(diào)函數(shù)
console.log("分享失敗");
}
});
})
}, (error) => {
console.log(error)
});
},
雖然這個這段代碼符合很多大部分的場景,但是畢竟不是萬金油,還是要看你的場景
成長的路上總是坎坎坷坷...
北大青鳥APTECH成立于1999年。依托北京大學(xué)優(yōu)質(zhì)雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
達(dá)內(nèi)教育集團(tuán)成立于2002年,是一家由留學(xué)海歸創(chuàng)辦的高端職業(yè)教育培訓(xùn)機(jī)構(gòu),是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
北大課工場是北京大學(xué)校辦產(chǎn)業(yè)為響應(yīng)國家深化產(chǎn)教融合/校企合作的政策,積極推進(jìn)“中國制造2025”,實(shí)現(xiàn)中華民族偉大復(fù)興的升級產(chǎn)業(yè)鏈。利用北京大學(xué)優(yōu)質(zhì)教育資源及背
博為峰,中國職業(yè)人才培訓(xùn)領(lǐng)域的先行者
曾工作于聯(lián)想擔(dān)任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔(dān)任項(xiàng)目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍(lán)懿科技有限責(zé)任公司從事總經(jīng)理職務(wù)負(fù)責(zé)iOS教學(xué)及管理工作。
浪潮集團(tuán)項(xiàng)目經(jīng)理。精通Java與.NET 技術(shù), 熟練的跨平臺面向?qū)ο箝_發(fā)經(jīng)驗(yàn),技術(shù)功底深厚。 授課風(fēng)格 授課風(fēng)格清新自然、條理清晰、主次分明、重點(diǎn)難點(diǎn)突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應(yīng)用開發(fā)經(jīng)驗(yàn)。曾經(jīng)歷任德國Software AG 技術(shù)顧問,美國Dachieve 系統(tǒng)架構(gòu)師,美國AngelEngineers Inc. 系統(tǒng)架構(gòu)師。