關鍵字:微信支付 收貨位址共享
作者:方倍工作室
<a href="http://www.cnblogs.com/txw1958/p/wxpayv3_native_dynamic_qrcode.html" target="_blank"></a>
本文介紹微信支付下的收貨位址共享接口的開發過程。
微信收貨位址共享,是指使用者在微信浏覽器内打開網頁,填寫過位址後,後續可以免填寫支援快速選擇,也可增加和編輯。此位址為使用者屬性,可在各商戶的網頁中共享使用。支援原生控件填寫位址,位址資料會傳遞到商戶。
位址共享是基于微信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的Access Token 。是以需要做一次授權,這次授權是不彈出确認框的。
其實質就是在使用者通路
時跳轉到
以此來獲得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 的具體示例如下:
i:經過a過程鍵值對排序後得到string1 為:
ii:經過b過程簽名後可得到:
實作代碼如下
編輯并擷取使用者收貨位址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
收貨位址國家碼