微信JS SDK 接口調(diào)用詳解_第1頁
微信JS SDK 接口調(diào)用詳解_第2頁
微信JS SDK 接口調(diào)用詳解_第3頁
微信JS SDK 接口調(diào)用詳解_第4頁
微信JS SDK 接口調(diào)用詳解_第5頁
已閱讀5頁,還剩21頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、微信JSSDK調(diào)用詳解目錄1概述1.1使用說明1.1.1步驟一:引入JS文件步驟二:通過config接口注入權(quán)限驗證配置步驟三:通過ready接口處理成功驗證步驟四:通過error接口處理失敗驗證1.2接口調(diào)用說明2基礎(chǔ)接口2.1判斷當(dāng)前客戶端版本是否支持指定JS接口3分享接口3.1獲取“分享到朋友圈”按鈕點擊狀態(tài)及自定義分享內(nèi)容接口3.2獲取“分享給朋友”按鈕點擊狀態(tài)及自定義分享內(nèi)容接口3.3獲取“分享到QQ”按鈕點擊狀態(tài)及自定義分享內(nèi)容接口3.4獲取“分享到騰訊微博”按鈕點擊狀態(tài)及自定義分享內(nèi)容接口4圖像接口4.1拍照或從手機相冊中選圖接口4.2預(yù)覽圖片接口4.3上傳圖片接口4.4下載圖片

2、接口5音頻接口5.1開始錄音接口5.2停止錄音接口5.3監(jiān)聽錄音自動停止接口5.4播放語音接口5.5暫停播放接口5.6停止播放接口5.7監(jiān)聽語音播放完畢接口5.8上傳語音接口5.9下載語音接口6智能接口6.1識別音頻并返回識別結(jié)果接口7設(shè)備信息7.1獲取網(wǎng)絡(luò)狀態(tài)接口8地理位置8.1使用微信內(nèi)置地圖查看位置接口8.2獲取地理位置接口9界面操作隱藏右上角菜單接口9.2顯示右上角菜單接口9.3關(guān)閉當(dāng)前網(wǎng)頁窗口接口9.4批量隱藏功能按鈕接口9.5批量顯示功能按鈕接口9.6隱藏所有非基礎(chǔ)按鈕接口9.7顯示所有功能按鈕接口10微信掃一掃調(diào)起微信掃一掃接口11微信小店11.1跳轉(zhuǎn)微信商品頁接口12微信卡券調(diào)

3、起適用于門店的卡券歹U表并獲取用戶選擇歹U表12.2批量添加卡券接口12.3查看微信卡包中的卡券接口13微信支付13.1發(fā)起一個微信支付請求14附錄1-JS-SDK使用權(quán)限簽名算法15附錄2-所有JS接口列表16附錄3-所有菜單項列表17附錄4-位置簽名生成算法18附錄5-支付擴展字段及簽名生成算法19附錄6-卡券擴展字段及簽名生成算法20附錄7-常見錯誤及解決方法附錄8-DEMO頁面和示例代碼附錄9-問題反饋概述微信JS-SDK是微信公眾平臺面向網(wǎng)頁開發(fā)者提供的基于微信內(nèi)的網(wǎng)頁開發(fā)工具包。通過使用微信JS-SDK,網(wǎng)頁開發(fā)者可借助微信高效地使用拍照、選圖、語音、位置等手機系統(tǒng)的能力,同時可以

4、直接使用微信分享、掃一掃、卡券、支付等微信特有的能力,為微信用戶提供更優(yōu)質(zhì)的網(wǎng)頁體驗。此文檔面向網(wǎng)頁開發(fā)者介紹微信JS-SDK如何使用及相關(guān)注意事項。使用說明在使用微信JS-SDK對應(yīng)的JS接口前,需確保公眾號已獲得使用對應(yīng)JS接口的權(quán)限,可登錄微信公眾平臺進(jìn)入開發(fā)者中心”查看對應(yīng)的接口權(quán)限。注意:所有的JS接口只能在公眾號綁定的域名下調(diào)用,公眾號開發(fā)者需要先登錄微信公眾平臺進(jìn)入“公眾號設(shè)置”“功能設(shè)置”里填寫“JS接口安全域名”。步驟一:引入JS文件在需要調(diào)用JS接口的頁面引入如下JS文件,(支持https): HYPERLINK /ope_n/js/jweixi_n-1.0.0.js /o

5、pen/js/jweixin-1.0.0.js備注:支持使用AMD/CMD標(biāo)準(zhǔn)模塊加載方法加載步驟二:通過config接口注入權(quán)限驗證配置所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調(diào)用(同一個url僅需調(diào)用一次,對于變化url的SPA的webapp可在每次url變化時進(jìn)行調(diào)用)。wx.config(debug:true,/開啟調(diào)試模式,調(diào)用的所有api的返回值會在客戶端alert出來,若要查看傳入的參數(shù),可以在pc端打開,參數(shù)信息會通過log打出,僅在pc端時才會打印。appId:,/必填,公眾號的唯一標(biāo)識timestamp:,/必填,生成簽名的時間戳nonceStr:/必填

6、,生成簽名的隨機串signature:,/必填,簽名,見附錄1jsApiList:/必填,需要使用的JS接口列表,所有JS接口列表見附錄2);步驟三:通過ready接口處理成功驗證wx.ready(function()/config信息驗證后會執(zhí)行ready方法,所有接口調(diào)用都必須在config接口獲得結(jié)果之后,config是一個客戶端的異步操作,所以如果需要在頁面加載時就調(diào)用相關(guān)接口,則須把相關(guān)接口放在ready函數(shù)中調(diào)用來確保正確執(zhí)行。對于用戶觸發(fā)時才調(diào)用的接口,則可以直接調(diào)用,不需要放在ready函數(shù)中。);步驟四:通過error接口處理失敗驗證wx.error(function(res

7、)/config信息驗證失敗會執(zhí)行error函數(shù),如簽名過期導(dǎo)致驗證失敗,具體錯誤信息可以打開config的debug模式查看,也可以在返回的res參數(shù)中查看,對于SPA可以在這里更新簽名。);接口調(diào)用說明所有接口通過wx對象(也可使用jWeixin對象)來調(diào)用,參數(shù)是一個對象,除了每個接口本身需要傳的參數(shù)之外,還有以下通用參數(shù):success:接口調(diào)用成功時執(zhí)行的回調(diào)函數(shù)。fail:接口調(diào)用失敗時執(zhí)行的回調(diào)函數(shù)。complete:接口調(diào)用完成時執(zhí)行的回調(diào)函數(shù),無論成功或失敗都會執(zhí)行。cancel:用戶點擊取消時的回調(diào)函數(shù),僅部分有用戶取消操作的api才會用到。trigger:監(jiān)聽Menu中的

8、按鈕點擊時觸發(fā)的方法,該方法僅支持Menu中的相關(guān)接口。以上幾個函數(shù)都帶有一個參數(shù),類型為對象,其中除了每個接口本身返回的數(shù)據(jù)之外,還有一個通用屬性errMsg,其值格式如下:1調(diào)用成功時:xxx:ok,其中xxx為調(diào)用的接口名2.用戶取消時:xxx:cancel,其中xxx為調(diào)用的接口名3調(diào)用失敗時:其值為具體錯誤信息基礎(chǔ)接口判斷當(dāng)前客戶端版本是否支持指定JS接口wx.checkJsApi(jsApiList:chooselmage/需要檢測的JS接口列表,所有JS接口列表見附錄2,success:function(res)/以鍵值對的形式返回,可用的api值true,不可用為false/如

9、:checkResult:chooselmage:true,errMsg:checkJsApi:ok);備注:checkJsApi接口是客戶端6.0.2新引入的一個預(yù)留接口,第一期開放的接口均可不使用checkJsApi來檢測。分享接口請注意不要有誘導(dǎo)分享等違規(guī)行為,對于誘導(dǎo)分享行為將永久回收公眾號接口權(quán)限,詳細(xì)規(guī)則請查看:朋友圈管理常見問題。獲取“分享到朋友圈”按鈕點擊狀態(tài)及自定義分享內(nèi)容接口wx.onMenuShareTimeline(title:,/分享標(biāo)題link:,/分享鏈接imgUrl:,/分享圖標(biāo)success:function()/用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù),cancel:f

10、unction()/用戶取消分享后執(zhí)行的回調(diào)函數(shù));獲取“分享給朋友”按鈕點擊狀態(tài)及自定義分享內(nèi)容接口wx.onMenuShareAppMessage(title:,/分享標(biāo)題desc:/分享描述link:,/分享鏈接imgUrl:,/分享圖標(biāo)type:/分享類型,music、video或link,不填默認(rèn)為linkdataUrl:/如果type是music或video,則要提供數(shù)據(jù)鏈接,默認(rèn)為空success:function()/用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù),cancel:function()/用戶取消分享后執(zhí)行的回調(diào)函數(shù));獲取“分享到QQ”按鈕點擊狀態(tài)及自定義分享內(nèi)容接口wx.onMe

11、nuShareQQ(title:,/分享標(biāo)題desc:,/分享描述link:,/分享鏈接imgUrl:/分享圖標(biāo)success:function()/用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù),cancel:function()/用戶取消分享后執(zhí)行的回調(diào)函數(shù));獲取“分享到騰訊微博”按鈕點擊狀態(tài)及自定義分享內(nèi)容接口wx.onMenuShareWeibo(title:,/分享標(biāo)題desc:/分享描述link:,/分享鏈接imgUrl:/分享圖標(biāo)success:function()/用戶確認(rèn)分享后執(zhí)行的回調(diào)函數(shù),cancel:function()/用戶取消分享后執(zhí)行的回調(diào)函數(shù));圖像接口拍照或從手機相冊中選圖接

12、口wx.chooselmage(success:function(res)varlocalIds=res.locallds;/返回選定照片的本地ID列表,localld可以作為img標(biāo)簽的src屬性顯示圖片);預(yù)覽圖片接口wx.previewlmage(current:/當(dāng)前顯示的圖片鏈接urls:/需要預(yù)覽的圖片鏈接列表);上傳圖片接口wx.uploadlmage();localld:/需要上傳的圖片的本地ID,由chooselmage接口獲得isShowProgressTips:1/默認(rèn)為1,顯示進(jìn)度提示success:function(res)varserverId=res.server

13、Id;/返回圖片的服務(wù)器端ID);備注:可用微信下載多媒體文件接口下載上傳的圖片,此處獲得的serverId即media_id,參考文檔./12/58bfcfabbd501c7cd77c19bd9cfa8354.html下載圖片接口wx.downloadImage(serverId:,/需要下載的圖片的服務(wù)器端ID,由uploadImage接口獲得isShowProgressTips:1/默認(rèn)為1,顯示進(jìn)度提示success:function(res)varlocalId=res.localId;/返回圖片下載后的本地ID);音頻接口開始錄音接口wx.startRecord();停止錄音接口w

14、x.stopRecord(success:function(res)varlocalId=res.localId;監(jiān)聽錄音自動停止接口wx.onVoiceRecordEnd(/錄音時間超過一分鐘沒有停止的時候會執(zhí)行complete回調(diào)complete:function(res)varlocalId=res.localld;);播放語音接口wx.playVoice(localId:/需要播放的音頻的本地ID,由stopRecord接口獲得);暫停播放接口wx.pauseVoice(localId:/需要暫停的音頻的本地ID,由stopRecord接口獲得);停止播放接口wx.stopVoice(

15、localId:/需要停止的音頻的本地ID,由stopRecord接口獲得);監(jiān)聽語音播放完畢接口wx.onVoicePlayEnd(serverId:,/需要下載的音頻的服務(wù)器端ID,由uploadVoice接口獲得success:function(res)varlocalId=res.localId;/返回音頻的本地ID);上傳語音接口wx.uploadVoice(localld:/需要上傳的音頻的本地ID,由stopRecord接口獲得isShowProgressTips:1/默認(rèn)為1,顯示進(jìn)度提示success:function(res)varserverId=res.serverId

16、;/返回音頻的服務(wù)器端ID);備注:可用微信下載多媒體文件接口下載上傳的語音,此處獲得的serverId即media_id,參考文檔./12/58bfcfabbd501c7cd77c19bd9cfa8354.html下載語音接口wx.downloadVoice(serverId:,/需要下載的音頻的服務(wù)器端ID,由uploadVoice接口獲得isShowProgressTips:1/默認(rèn)為1,顯示進(jìn)度提示success:function(res)varlocalId=res.localId;/返回音頻的本地ID);智能接口識別音頻并返回識別結(jié)果接口wx.translateVoice(loca

17、lId:,/需要識別的音頻的本地Id,由錄音相關(guān)接口獲得isShowProgressTips:1,/默認(rèn)為1,顯示進(jìn)度提示success:function(res)alert(res.translateResult);/語音識別的結(jié)果);設(shè)備信息獲取網(wǎng)絡(luò)狀態(tài)接口wx.getNetworkType(success:function(res)varnetworkType二workType;/返回網(wǎng)絡(luò)類型2g,3g,4g,wifi);地理位置使用微信內(nèi)置地圖查看位置接口wx.openLocation(latitude:0,/緯度,浮點數(shù),范圍為90-90longitude:0,/經(jīng)度,浮點數(shù),范圍為

18、180-180。name:,/位置名address:,/地址詳情說明scale:1,/地圖縮放級別,整形值,范圍從128。默認(rèn)為最大infoUrl:/在查看位置界面底部顯示的超鏈接,可點擊跳轉(zhuǎn));獲取地理位置接口wx.getLocation(timestamp:0,/位置簽名時間戳,僅當(dāng)需要兼容6.0.2版本之前時提供nonceStr:/位置簽名隨機串,僅當(dāng)需要兼容6.0.2版本之前時提供addrSign:/位置簽名,僅當(dāng)需要兼容6.0.2版本之前時提供,詳見附錄4success:function(res)varlongitude=res.longitude;/緯度,浮點數(shù),范圍為90-90v

19、arlatitude二res.latitude;/經(jīng)度,浮點數(shù),范圍為180T80。varspeed=res.speed;/速度,以米/每秒計varaccuracy=res.accuracy;/位置精度);界面操作隱藏右上角菜單接口wx.hideOptionMenu();顯示右上角菜單接口wx.showOptionMenu();關(guān)閉當(dāng)前網(wǎng)頁窗口接口wx.closeWindow();批量隱藏功能按鈕接口wx.hideMenultems(menuList:/要隱藏的菜單項,所有menu項見附錄3);批量顯示功能按鈕接口wx.showMenultems(menuList:/要顯示的菜單項,所有men

20、u項見附錄3);隱藏所有非基礎(chǔ)按鈕接口wx.hideAllNonBaseMenultem();顯示所有功能按鈕接口wx.showAllNonBaseMenultem();微信掃一掃調(diào)起微信掃一掃接口wx.scanQRCode(desc:scanQRCodedesc,needResult:0,/默認(rèn)為0,掃描結(jié)果由微信處理,1則直接返回掃描結(jié)果,scanType:qrCode,barCode,/可以指定掃二維碼還是一維碼,默認(rèn)二者都有success:function(res)varresult二res.resultStr;/當(dāng)needResult為1時,掃碼返回的結(jié)果);微信小店跳轉(zhuǎn)微信商品頁接

21、口wx.openProductSpecificView(productld:/商品idviewType:/0默認(rèn)值,普通商品詳情頁1掃一掃商品詳情頁2小店商品詳情頁);微信卡券調(diào)起適用于門店的卡券列表并獲取用戶選擇列表wx.chooseCard(shopld:,/門店IdcardType:,/卡券類型cardId:,/卡券IdtimeStamp:0,/卡券簽名時間戳nonceStr:/卡券簽名隨機串cardSign:/卡券簽名,詳見附錄6success:function(res)varcardList=res.cardList;/用戶選中的卡券列表信息);批量添加卡券接口wx.addCard(

22、cardList:cardId:cardExt:,/需要添加的卡券列表success:function(res)varcardList=res.cardList;/添加的卡券列表信息);查看微信卡包中的卡券接口wx.openCard(cardList:cardId:code:/需要打開的卡券列表);微信支付發(fā)起一個微信支付請求wx.chooseWXPay(timestamp:0,/支付簽名時間戳noncestr:/支付簽名隨機串package:,/訂單詳情擴展字符串,詳見附錄5paySign:/支付簽名,詳見附錄5);附錄1-JS-SDK使用權(quán)限簽名算法jsapi_ticket生成簽名之前必須

23、先了解一下jsapi_ticket,jsapi_ticket是公眾號用于調(diào)用微信JS接口的臨時票據(jù)。正常情況下,jsapi_ticket的有效期為7200秒,通過access_token來獲取。由于獲取jsapi_ticket的api調(diào)用次數(shù)非常有限,頻繁刷新jsapi_ticket會導(dǎo)致api調(diào)用受限,影響自身業(yè)務(wù),開發(fā)者必須在自己的服務(wù)全局緩存jsapi_ticket。參考以下文檔獲取access_token(有效期7200秒,開發(fā)者必須在自己的服務(wù)全局緩存access_token):./15/54ce45d8d30b6bf6758f68d2e95bc627.html用第一步拿到的acce

24、ss_token采用httpGET方式請求獲得jsapi_ticket(有效期7200秒,開發(fā)者必須在自己的服務(wù)全局緩存jsapi_ticket):/cqi-bin/ticket/qetticket?access_token=ACCESSTOKEN&type=isapi成功返回如下JSON:errcode:0,1errmsg:ok,ticket:bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41Z03MhKoyN50fkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA,expires_in:7200獲得jsapi_ticket之后,就可以生成JS

25、-SDK權(quán)限驗證的簽名了。簽名算法簽名生成規(guī)則如下:參與簽名的字段包括noncestr(隨機字符串),有效的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=Wm3WZYTPz0wz

26、ccnWjsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VMOP37wVUCFvkVAy_90u5h9nbSIYy3-SI-HhTdfl2fzFy1AOcHKP7qgtimestamp=1414587457url= HYPERLINK http:/mp.weix http:/mp.weix步驟1.對所有待簽名參數(shù)按照字段名的ASCII碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key仁valuel&key2=value2.)拼接成字符串string1:jsapi_ticket二sM4A0VdWfPE4DxkXGEs8VMCPGGVi4C3VM0

27、P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFylA0cHKP7qg&noncestr二Wm3WZYTPz0wzccnW×tamp=1414587457&url二步驟2.對string1進(jìn)行sha1簽名,得到signature:f4d90daf4b3bca3078abl55816175ba34c443a7b注意事項簽名用的noncestr和timestamp必須與wx.config中的nonceStr和timestamp相同。簽名用的url必須是調(diào)用JS接口頁面的完整URL。出于安全考慮,開發(fā)者必須在服務(wù)器端實現(xiàn)簽名的邏輯附錄2-所有JS接口列表版

28、本1.0.0接口onMenuShareTimelineonMenuShareAppMessageonMenuShareQQonMenuShareWeibostartRecordstopRecordonVoiceRecordEndplayVoicepauseVoicestopVoiceonVoicePlayEnduploadVoicedownloadVoicechooseImagepreviewImageuploadImagedownloadlmagetranslateVoicegetNetworkTypeopenLocationgetLocationhideOptionMenushowOpti

29、onMenuhideMenultemsshowMenultemshideAllNonBaseMenultemshowAllNonBaseMenultemcloseWindowscanQRCodechooseWXPayopenProductSpecificViewaddCardchooseCardopenCard附錄3-所有菜單項列表基本類舉報:menultem:exposeArticle調(diào)整字體:menultem:setFont”日間模式:menultem:dayMode”夜間模式:menultem:nightMode刷新:menultem:refresh查看公眾號(已添加):menultem

30、:profile查看公眾號(未添加):menultem:addContact傳播類發(fā)送給朋友:menultem:share:appMessage分享到朋友圈:menultem:share:timeline分享到QQ:menultem:share:qq分享至UWeibo:menultem:share:weiboApp收藏:menultemfavorite分享至UFB:menultem:share:facebook保護(hù)類調(diào)試:menultem:jsDebug編輯標(biāo)簽:menultem:editTag刪除:menultem:delete復(fù)制鏈接:menultem:copyUrl原網(wǎng)頁:menulte

31、m:originPage閱讀模式:menultem:readMode在QQ瀏覽器中打開:menultem:openWithQQBrowser在Safari中打開:menultem:openWithSafari郵件:menultem:share:email一些特殊公眾號:menultem:share:brand”附錄4-位置簽名生成算法addrSign的生成規(guī)則與JS-SDK權(quán)限驗證的簽名生成規(guī)則相同(參考附錄1),只是參與簽名參數(shù)有所不同。參與addrSign的簽名參數(shù)有:appld、url(當(dāng)前網(wǎng)頁url)、timestamp、noncestr、accesstoken(用戶授權(quán)憑證,請參照o

32、auth2.0協(xié)議獲?。?。附錄5-支付擴展字段及簽名生成算法訂單詳情(package)擴展字符串定義在商戶調(diào)起JSAPI時,商戶需要此時確定該筆訂單詳情,并將該訂單詳情通過一定的方式進(jìn)行組合放入package。JSAPI調(diào)用后,微信將通過package的內(nèi)容生成預(yù)支付單。下面將定義package的所需字段列表以及簽名方法。接口需要注意:所有傳入?yún)?shù)都是字符串類型!package所需字段列表:是否說明參數(shù)名稱否格式必填字符串銀行類型,固bank_type通道是定為固定為WX;類型WX,注意大寫字符串body商品描述類型,128字節(jié)商品描述;以下附加數(shù)據(jù)商戶號商戶訂單號訂單總金額支付幣種通知URL

33、訂單生成的機器IP交易起始時間交易結(jié)束時間物流費用attachpartnerout_trade_nototaleefee_typenotify_urlspbill_create_iptime_starttime_expiretransport_feeproduct_fee字符串訂單總金額,單位為分;類型取值:1(人民幣),暫只支持1;在支付完成后,接收微信通知支付結(jié)果的URL,需給絕對路徑,255字符內(nèi),格式如如:/tenpay.asp;示為20091225091010,時區(qū)為GMT+8beijing;該時間取自商戶服務(wù)器;訂單失效時間,格式為yyyyMMddHHmmss,示為20091227

34、091010,時區(qū)為GMT+8beijing;該時間取自商戶服務(wù)器;物流費用,單位為分。如果有值,必須保證商品字符串類型否字符串字符串類型,類型宀卄附加數(shù)據(jù),原樣返回;128字節(jié)以下字符串字符串類型注冊時分配的財付通商戶號類型partnerld;字符串類型,32商戶系統(tǒng)內(nèi)部的訂單號,32個字符內(nèi)、可包字節(jié)以含字母;確保在商戶系統(tǒng)唯一一下字符串類型,默認(rèn)值是1字符串類型,255字節(jié)以下字符串類型,15指用戶瀏覽器端IP,不是商戶服務(wù)器IP,格字節(jié)以式為IPV4;下字符串訂單生成時間,格式為yyyyMMddHHmmss,類型,14如2009年12月25日9點10分10秒表字節(jié)以下字符串類型,14如

35、2009年12月27日9點10分10秒表字節(jié)以下transport_fee+product_fee=total_fee;物流費用,單位為分。如果有值,必須保證費用類型transport_fee+product_fee=total_fee;商品標(biāo)記傳入.u參數(shù)input_charset宀斤斤字付編碼goods_tag字符串類型字符串類型商品標(biāo)記,優(yōu)惠券時可能用到;取值范圍:GBK、UTF-8,默認(rèn):GBKpackage生成方法:由于package中攜帶了生成訂單的詳細(xì)信息,因此在微信將對package里面的內(nèi)容進(jìn)行鑒權(quán),確定package攜帶的信息是真實、有效、合理的。因此,這里將定義生成pac

36、kage字符串的方法。對所有傳入?yún)?shù)按照字段名的ASCII碼從小到大排序(字典序)后,使用URL鍵值對的格式(即keyl二valuel&key2二value2)拼接成字符串string1,注意:值為空的參數(shù)不參與簽名;在string1最后拼接上key=paternerKey得到stringSignTemp字符串,并對stringSignTemp進(jìn)行md5運算,再將得到的字符串所有字符轉(zhuǎn)換為大寫,得到sign值signValue。對傳入?yún)?shù)中所有鍵值對的value進(jìn)行urlencode轉(zhuǎn)碼后重新拼接成字符串string2。對于JS前端程序,一定要使用函數(shù)encodeURIComponent進(jìn)行u

37、rlencode編碼(注意!進(jìn)行urlencode時要將空格轉(zhuǎn)化為%20而不是+)。將sign=signValue拼接到string2后面得到最終的package字符串。下面定義了一段生成package字符串的示范過程:假設(shè)以下為package傳入?yún)?shù):bank_type=WXbody=支付測試fee_type=1input_charset=UTF-8notifyurl= HYPERLINK out_trade_no=7240b65810859cbf2a8d9f76a638c0a3partner=1900000109spbill_create_ip=total_fee=1i:經(jīng)過a過程URL鍵

38、值對字典序排序后的字符串stringl為:bank_type=WX&body二支付測試&fee_type=l&input_charset二UTF-8¬ify_url二 HYPERLINK http:/we http:/we&out_trade_no=7240b65810859cbf2a8d9f76a638c0a3&partner=1900000109&spbill_create_ip=&total_fee=1ii:經(jīng)過b過程后得到sign為:sign=md5(string1&key=8934e7d15453e97507ef794cf7b0519d).toUpperCase=md5(ban

39、k_type二WX&body二支付測試&fee_type=1&input_charset二UTF-8¬ify_url二http:/&out_trade_no=7240b65810859cbf2a8d9f76a638c0a3&partner=1900000109&spbill_create_ip=&total_fee=1&key=8934e7d15453e97507ef794cf7b0519d).toUpperCase()二7f77b507b755b3262884291517e380f8.toUpperCaseO二7F77B507B755B3262884291517E380F8iii:再對

40、傳入?yún)?shù)中的每一個鍵值對中的value進(jìn)行urlencode編碼后得到:bank_type二WX&body=%E6%94%AF%E4%BB%98%E6%B5%8B%E8%AF%95&fee_type=1&input_charset二UTF-8¬ify_url二http%3A%2F%2F&out_trade_no=7240b65810859cbf2a8d9f76a638c0a3&partner=1900000109&spbill_create_ip=&total_fee=1iv:拼接上sign后得到最終package結(jié)果:bank_type二WX&body=%E6%94%AF%E4%BB%

41、98%E6%B5%8B%E8%AF%95&fee_type=1&input_charset二UTF-8¬ify_url二http%3A%2F%2F&out_trade_no=7240b65810859cbf2a8d9f76a638c0a3&partner=1900000109&spbill_create_ip=&total_fee=1&sign=7F77B507B755B3262884291517E380F8支付簽名(paySign)生成方法paySign字段是對本次發(fā)起JSAPI的行為進(jìn)行鑒權(quán),只有通過了paySign鑒權(quán),才能繼續(xù)對package鑒權(quán)并生成預(yù)支付單。paySign的生

42、成規(guī)則與JS-SDK權(quán)限驗證的簽名生成規(guī)則相同(參考附錄1)。參與paySign簽名的字段包括:appid、timestamp、noncestr、package以及appkey(即paySignkey)。附錄6-卡券擴展字段及簽名生成算法卡券擴展字段cardExt說明cardExt本身是一個JSON字符串,是商戶為該張卡券分配的唯一性信息,包含以下字段:字段是否必填code否openid否timestamp是signature是balanee否說明指定的卡券code碼,只能被領(lǐng)一次。use_custom_code字段為true的卡券必須填寫,非自定義code不必填寫。指定領(lǐng)取者的openid,只有該用戶能領(lǐng)取。bind_openid字段為true的卡券必須填寫,非自定義openid不必填寫。時間戳,商戶生成從1970年1月1日00:00:00至今的秒數(shù),即當(dāng)前的時間,且最終需要轉(zhuǎn)換為字符串形式;由商戶生成后傳入。簽名,商戶將接口

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論