微信支付開發收貨地址共享接口

高洛峰
發布: 2017-03-06 10:10:00
原創
4281 人瀏覽過

本文介紹微信支付下的收貨地址共享介面的開發流程。

一. 簡介

微信收貨地址共享,是指用戶在微信瀏覽器內打開網頁,填寫過地址後,後續可以免填寫支持快速選擇,也可增加和編輯。此位址為使用者屬性,可在各商家的網頁中共用使用。支援原生控制填寫位址,地址資料會傳遞到商家。

位址共享是基於微信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.為使用者安裝的微信版本號,商家可以判定版本號碼是否高於或等於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=//m.sbmmt.com/
登入後複製

以此來獲得code參數,並根據code來獲得授權access_token及openid,這個access token將用於收貨地址共享介面。

微信支付开发收货地址共享接口 其實現的詳細流程可參考 微信公眾平台開發OAuth2.0網頁授權

 

二、取得隨機字串

產生隨機字串的方法如下

微信支付开发收货地址共享接口  

#三、產生簽章

參與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接口,在網頁前端呼叫。

參數清單:


參數#appIdscopesignTypeaddrSigntimeStampnonceStr
#必填說明
公眾號碼appID
填入“jsapi_address”,取得編輯位址權限
簽名方式,目前僅支援SHA1
簽名,由各參數一起參與簽名產生
時間戳
隨機字串

调用方法如下

微信支付开发收货地址共享接口

参数返回:

返回值说明
err_msgedit_address:ok获取编辑收货地址成功
edit_address:fail获取编辑收货地址失败
username收货人姓名
telNumber收货人电话
addressPostalCode邮编
proviceFirstStageName国标收货地址第一级地址
addressCitySecondStageName国标收货地址第二级地址
addressCountiesThirdStageName国标收货地址第三级地址
addressDetailInfo详细收货地址信息
nationalCode收货地址国家码

五、示例

微信支付开发收货地址共享接口 微信支付开发收货地址共享接口 微信支付开发收货地址共享接口 微信支付开发收货地址共享接口 微信支付开发收货地址共享接口

六、完整代码

appid = $appid;
            $this->appsecret = $appsecret;
        }
    }

    //生成OAuth2的URL
    public function oauth2_authorize($redirect_url, $scope, $state = NULL)
    {
        $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appid."&redirect_uri=".$redirect_url."&response_type=code&scope=".$scope."&state=".$state."#wechat_redirect";
        return $url;
    }

    //生成OAuth2的Access Token
    public function oauth2_access_token($code)
    {
        $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appid."&secret=".$this->appsecret."&code=".$code."&grant_type=authorization_code";
        $res = $this->http_request($url);
        return json_decode($res, true);
    }

    //生成随机字符串
    function create_noncestr($length = 16) 
    {
        $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        $str = "";
        for ($i = 0; $i < $length; $i++ ){
            $str.= substr($chars, mt_rand(0, strlen($chars)-1), 1);
        }
        return $str;
    }

    //生成签名
    function get_biz_sign($bizObj)
    {
        //参数小写
        foreach ($bizObj as $k => $v){
            $bizParameters[strtolower($k)] = $v;
        }
        //字典序排序
        ksort($bizParameters);
        //URL键值对拼成字符串
        $buff = "";
        foreach ($bizParameters as $k => $v){
            $buff .= $k."=".$v."&";
        }
        //去掉最后一个多余的&
        $buff2 = substr($buff, 0, strlen($buff) - 1);
        //sha1签名
        return sha1($buff2);
    }

    //HTTP请求(支持HTTP/HTTPS,支持GET/POST)
    protected function http_request($url, $data = null)
    {
        $curl = curl_init();
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        if (!empty($data)){
            curl_setopt($curl, CURLOPT_POST, 1);
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
        $output = curl_exec($curl);
        curl_close($curl);
        return $output;
    }

}
登入後複製

oauth2_authorize($url, "snsapi_base", "fangbei");
    Header("Location: $jumpurl");
}else{
    $oauth2_access_token = $weixin->oauth2_access_token($_GET["code"]);
    $access_token = $oauth2_access_token['access_token'];
}


$timestamp = strval(time());
$noncestr = $weixin->create_noncestr();

$obj['appId']               = $weixin->appid;
$obj['url']                 = $url;
$obj['timeStamp']           = $timestamp;
$obj['noncestr']            = $noncestr;
$obj['accesstoken']         = $access_token;

$signature  = $weixin->get_biz_sign($obj);

?>


    
        
        获取共享收货地址
        
        
    
结果
国家码
国家
详细
收货人
电话
邮编
登入後複製

 更多微信支付开发收货地址共享接口 相关文章请关注PHP中文网!

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