首页  >  文章  >  微信小程序  >  微信支付开发收货地址共享接口

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

高洛峰
高洛峰原创
2017-03-06 10:10:004438浏览

本文介绍微信支付下的收货地址共享接口的开发过程。

一. 简介

微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,后续可以免填写支持快速选择,也可增加和编辑。此地址为用户属性,可在各商户的网页中共享使用。支持原生控件填写地址,地址数据会传递到商户。

地址共享是基于微信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.php.cn/

以此来获得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&timestamp=1384841012&url=http://open.weixin.qq.com/?code=CODE&state=STATE

ii:经过b过程签名后可得到:

addrSign=SHA1(accesstoken=OezXcEiiBSKSxW0eoylIeBFk1b8VbNtfWALJ5g6aMgZHaqZwK4euEskSn78Qd5pLsfQtuMdgmhajVM5QDm24W8X3tJ18kz5mhmkUcI3RoLm7qGgh1cEnCHejWQo8s5L3VvsFAdawhFxUuLmg
h5FRA&appid=wx17ef1eaef46752cb&noncestr=123456&timestamp=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 收货地址国家码

 

 

五、示例

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

 

六、完整代码

0ab009c1c6d980c0253937acfceafa69appid = $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 91031963a914a1b7ad87b66e6af1c857 $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;
    }

}

76249c644544e2723b673f512ec3ca64oauth2_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);

?>
76c82f278ac045591c9159d381de2c57
100db36a723c770d327fc0aef2ce13b1
    93f0f5c25f18dab9d176bd4f6de5d30e
        a71ddd814d1e6bfc91cd420de31796d5
        b2386ffb911b14667cb8f0f91ea547a7获取共享收货地址6e916e0f7d1e588d4f442bf645aedb2f
        5a9b9ad0f88600bf5b6691a4ccfdc587
        5e18004130b03fd4aaa01fe61a84ebb1
            function callpay()
            {
                WeixinJSBridge.invoke('editAddress',{
                    "appId" : "cc07cc36e588017f83a75f3858bb8b40",
                    "scope" : "jsapi_address",
                    "signType" : "sha1",
                    "addrSign" : "1d3d1c7e9759d351642d39a10497f992",
                    "timeStamp" : "03882a4ce45308c35874272e3b57511d",
                    "nonceStr" : "7b41e26f1ec98d9091c9d3f4ffb4253e",
                },function(res){ 
                    alert(JSON.stringify(res));  
                    document.form1.address1.value         = res.proviceFirstStageName;
                    document.form1.address2.value         = res.addressCitySecondStageName;
                    document.form1.address3.value         = res.addressCountiesThirdStageName;
                    document.form1.detail.value           = res.addressDetailInfo;
                    document.form1.national.value         = res.nationalCode;
                    document.form1.user.value            = res.userName;
                    document.form1.phone.value            = res.telNumber;
                    document.form1.postcode.value         = res.addressPostalCode;
                    document.form1.errmsg.value         = res.err_msg;
                });
            }
        2cacc6d41bbb37262a98f745aa00fbf0
    9c3bca370b5104690d9ef395f2c5f8d1
    6c04bd5ca3fcae76e30b72ad730ca86d
        6d9483dab1de84c6f6bdd44f695e3158
            c684e25378608a0aa02c2e4b83206e6f
                879b49175114808d868f5fe5e24c4e0b5de06d44a19d3566e996d5b6826f61ad256dedeae30dbd1452c2575fb192a8234b4a09fdb935961d48b7bd6517f5757f
                f70d0ebff76a19226909a4a79919b5e8b4d429308760b6c2d20d6300079ed38e结果01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38e0e0f2ed3d0c19f42385c923e27fc6c9701c3ce868d2b3d9bce8da5c1b7e41e5b
                f70d0ebff76a19226909a4a79919b5e8b4d429308760b6c2d20d6300079ed38e国家码01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38e8792275d6589524c351b58a284fab79301c3ce868d2b3d9bce8da5c1b7e41e5b
                f70d0ebff76a19226909a4a79919b5e8b4d429308760b6c2d20d6300079ed38e国家01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38ecbb728e5bdd4f595980245b17dd3775e01c3ce868d2b3d9bce8da5c1b7e41e5b
                f70d0ebff76a19226909a4a79919b5e8b4d429308760b6c2d20d6300079ed38e省01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38e33910a441ee46ebda4a7c3f5cbe59f6301c3ce868d2b3d9bce8da5c1b7e41e5b
                a34de1251f0d9fe1e645927f19a896e8b4d429308760b6c2d20d6300079ed38e市01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38e4c751d017c1077dfbc998d326a6cc75801c3ce868d2b3d9bce8da5c1b7e41e5b
                f70d0ebff76a19226909a4a79919b5e8b4d429308760b6c2d20d6300079ed38e详细01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38e43f17b3bca69dd70c6c6331a09dad3ab01c3ce868d2b3d9bce8da5c1b7e41e5b
                f70d0ebff76a19226909a4a79919b5e8b4d429308760b6c2d20d6300079ed38e收货人01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38e3a8fb09ff3825288ec29e7aa04c405b901c3ce868d2b3d9bce8da5c1b7e41e5b
                f70d0ebff76a19226909a4a79919b5e8b4d429308760b6c2d20d6300079ed38e电话01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38ea07580e7f67acefbd8d7a09498dbedee01c3ce868d2b3d9bce8da5c1b7e41e5b
                f70d0ebff76a19226909a4a79919b5e8b4d429308760b6c2d20d6300079ed38e邮编01c3ce868d2b3d9bce8da5c1b7e41e5bb4d429308760b6c2d20d6300079ed38eb5ec44fb979e70a3b1ecf0b7c9d4d23501c3ce868d2b3d9bce8da5c1b7e41e5b
            f16b1740fad44fb09bfe928bcc527e08
        f5a47148e367a6035fd7a2faa965022e
        dc6dce4a544fdca2df29d5ac0ea9906b
            44e8bc14140e4029c4c8663c9eed246f获取收货地址65281c5ac262bf6d81768915a4a77ac0
        16b28748ea4df4d9c2150843fecfba68

    36cc49f0c466276486e50c850b7e4956
73a6ac4ed44ffec12cee46588e518a5e

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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn