微信支付v3開發(6) 收貨地址共享介面
請看新版教程 微信支付開發(7) 收貨地址共享介面V2
本文介紹微信支付下的收貨地址共享介面的開發過程。
一. 簡介
微信收貨地址共享,是指使用者在微信瀏覽器內開啟網頁,填寫過地址後,後續可以免填寫支援快速選擇,也可增加和編輯。此地址為使用者屬性,可在各商戶的網頁中共享使用。支援原生控制元件填寫地址,地址資料會傳遞到商戶。
地址共享是基於微信JavaScript API 實現,只能在微信內建瀏覽器中使用,其他瀏覽器呼叫無效。同時,需要微信5.0 版本才能支援,建議通過user agent 來確定使用者當前的版本號後再呼叫地址介面。以iPhone 版本為例,可以通過useragent可獲取如下微信版本示例資訊:"Mozilla/5.0(iphone;CPU iphone OS 5_1_1 like Mac OS X)AppleWebKit/534.46(KHTML,like Geocko) Mobile/9B206MicroMessenger/5.0"其中5.0 為使用者安裝的微信版本號,商戶可以判定版本號是否高於或者等於5.0。
地址格式
微信地址共享使用的資料欄位包括:
- 收貨人姓名
- 地區,省市區三級
- 詳細地址
- 郵編
- 聯絡電話
其中,地區對應是國標三級地區碼,如“廣東省-廣州市-天河區”,對應的郵編是是510630。詳情參考連結:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html
二. OAuth2.0授權
獲取收貨地址之前前需要呼叫 登入授權介面獲取到一次OAuth2.0的Access Token 。所以需要做一次授權,這次授權是不彈出確認框的。
其實質就是在使用者訪問
http://www.fangbei.org/wxpay/js_api_call.php
時跳轉到
https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx8888888888888888&redirect_uri=http://www.fangbei.org/wxpay/js_api_call.php&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
以此來獲得code引數,並根據code來獲得授權access_token及openid,這個access token將用於收貨地址共享介面。
其實現的詳細流程可參考
二、獲取隨機字串
生成隨機字串的方法如下
三、生成簽名
參與addrSign 簽名的欄位包括:appId、url(呼叫JavaScript API的網頁url)、timestamp、noncestr、accessToken
對所有待簽名引數按照欄位名的ASCII 碼從小到大排序(字典序)後,使用URL 鍵值對的格式(即key1=value1&key2=value2…)拼接成字串string1。
這裡需要注意的是簽名過程中所有引數名均為小寫字元,例如appId 在排序後字串則為appid;
對string1作簽名演算法,欄位名和欄位值都採用原始值,不進行URL 轉義。具體簽名演算法為addrSign = SHA1(string1)。這裡給出生成addrSign 的具體示例如下:
appId=wx17ef1eaef46752cb url=http://open.weixin.qq.com/ timeStamp=1384841012 nonceStr=123456 accessToken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmgh5FRA
i:經過a過程鍵值對排序後得到string1 為:
accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmgh5FRA&appid=wx17ef1eaef46752cb&noncestr=123456×tamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE
ii:經過b過程簽名後可得到:
addrSign=SHA1(accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmg h5FRA&appid=wx17ef1eaef46752cb&noncestr=123456×tamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE)=ca604c740945587544a9cc25e58dd090f200e6fb
實現程式碼如下
四、獲得收貨地址
編輯並獲取使用者收貨地址editAddress介面,在網頁前端呼叫。
引數列表:
引數 | 必填 | 說明 |
---|---|---|
appId | 是 | 公眾號appID |
scope | 是 | 填寫“jsapi_address”,獲得編輯地址許可權 |
signType | 是 | 簽名方式,目前僅支援SHA1 |
addrSign | 是 | 簽名,由各引數一起參與簽名生成 |
timeStamp | 是 | 時間戳 |
nonceStr | 是 | 隨機字串 |
呼叫方法如下
引數返回:
返回值 | 說明 |
---|---|
err_msg | edit_address:ok獲取編輯收貨地址成功 |
edit_address:fail獲取編輯收貨地址失敗 | |
username | 收貨人姓名 |
telNumber | 收貨人電話 |
addressPostalCode | 郵編 |
proviceFirstStageName | 國標收貨地址第一級地址 |
addressCitySecondStageName | 國標收貨地址第二級地址 |
addressCountiesThirdStageName | 國標收貨地址第三級地址 |
addressDetailInfo | 詳細收貨地址資訊 |
nationalCode | 收貨地址國家碼 |
五、示例