php開發微信支付取得使用者地址方法代碼

高洛峰
發布: 2017-03-21 15:39:26
原創
1396 人瀏覽過

微信支付的收貨地址共享功能,主要是統一的管理微信用戶個人的收貨地址,其收貨地址可以被應用於所有可以呼叫的開發者。用戶的收貨地址包含了很多個人信息,因此該接口必須要通過申請,申請的方式可以在mp平台上查看到。

使用微信取得地址資訊是和微信支付一道申請的,微信支付申請通過,就可以使用該功能。

微信商城中,使用微信支付取得使用者的收貨地址,可以省略使用者輸入地址資訊的繁複流程,提升使用者體驗。

但是可能是因為牽扯到用戶隱私,所以在使用過程中,需要用戶自己主動選擇使用該功能,並且是透過點擊的操作,我們才可以獲得到用戶的收貨地址,這一點是要注意的。

操作流程如下:

1.使用者開啟購物車頁面,點選結算,跳到一個微信的oauth2的頁面,網址為:https://open.weixin.qq. com/connect/oauth2/authorize

2.oauth2頁面將連結redirect到結算頁面,使用PHP取得到連結中的code參數,經過處理取得到accessToken值。產生簽名,組裝成陣列參數傳遞到頁面。

3.結算頁面使用使用者點選事件,結合2中產生的陣列參數完成取得位址的功能。這裡可以有一個將獲取到的地址使用ajax記錄到資料庫的功能,那麼客戶下次購物的時候,就不用麻煩了。

詳細的講下需要注意的幾點:

1.跳到微信oauth2的這個步驟,在用戶看來是沒有多少差別的,但是在程式這裡就有很多的事情要做。首先是oauth2頁面的參數,其中appid為微信appid,redirect_uri為urlencode後的訂單結算頁面的地址,response_type為固定的code,scope為固定的snsapi_base,state在這個地方可隨意填寫,還有一個#wechat_redirect,那麼該連結的最終樣子為:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=訂單結算地址&response_type=code&scope =snsapi_base&state=隨意填寫#wechat_redirect

2.用戶訪問到該地址,重新定位到追加了code參數訂單結算地址,在此頁面需要由程式獲取到accessToken,注意該accessToken為獲取用戶資訊的accessToken跟另外一個和微信互動的access token不是同一個。

使用GET請求就可以取得該accessToken,可以使用curl或是file_get_contents。請求位址為:

https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=APP_SECRET&code=CODE&grant_type=authorization_code;

#這裡有一點要注意,有時候微信會抽風,會連續多次要求訂單結算頁面,造成accessToken失效,需特殊處理。

這裡的簽章產生和微信支付裡面的簽章不一樣,這裡的要簡單很多,只是加密一個字串,格式為:accesstoken=ACCESSTOKEN&appid=APPID&noncestr=32位元隨機字符字串×tamp=時間戳記&url=目前頁面的URL,然後對該字串進行sha1加密。

在前端頁面中需要使用一連串的參數來實現獲取地址的功能,分別是appID,scope(預設為jsapi_address),signType(預設為sha1),addrSign(上面sha1加密後的字串) ,timeStamp(同上文的時間戳記),nonceStr(同上文的隨機字串)​​。

3.在前端頁面,使用下面的js函數來完成獲取用戶地址的操作:

function get_addr()
{
  WeixinJSBridge.invoke('editAddress',{
  "appId" : "<?php echo $sign[&#39;appId&#39;]?>",
  "scope" : "jsapi_address",
  "signType" : "sha1",
  "addrSign" : "<?php echo $sign[&#39;addrSign&#39;]?>",
  "timeStamp" : "<?php echo $sign[&#39;timeStamp&#39;]?>",
  "nonceStr" : "<?php echo $sign[&#39;nonceStr&#39;]?>",
  },function(res){
  if(res.err_msg == &#39;edit_address:ok&#39;)
  {
       
       
      //将地址信息存入数据库
      //将地址信息显示在当前页面
      
      document.getElementById("address_info").innerHTML="<b>收件人:"+res.userName+"</b>   <b>"+res.telNumber+"</b><br /> 收货地址:"+res.proviceFirstStageName+res.addressCitySecondStageName+res.addressCountiesThirdStageName+res.addressDetailInfo;
       
 } else{ alert("获取地址失败,请重新点击"); } }); }
登入後複製

#至此,使用微信獲取用戶共享地址的開發就完畢了。

以上是php開發微信支付取得使用者地址方法代碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!