微信收货地址共享开发接口讲解

写在前面的话:微信开发者文档写的比较清楚,也不容易出错,可是偏偏收货地址共享那儿写的比较绕,同时也会有很多坑,这里总结一下。

======正文开始======

微信收货地址共享开发接口基本使用场景是:

  用户点击按钮----->弹出微信收货地址选择页面---->用户选择收货地址,点击确定后,用户能够获取用户收货地址信息。

1.增加页面按钮标签:

<div id="select-address">选择收货地址</div>

2.引用相关javascript文件

<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

3.通过jssdk的config接口注入权限验证配置

wx.config({
    debug: true,
    appId: configData["appId"],
    timestamp: configData["timestamp"],
    nonceStr: configData["nonceStr"],
    signature: configData["signature"],
    jsApiList: [
    ‘checkJsApi‘,
    ‘editAddress‘,
    ‘chooseWXPay‘,
    ‘getLatestAddress‘,
    ‘openCard‘,
    ‘getLocation‘
    ]
});

其中configData通过如下方法获取:

var currentURL = location.href.split(‘#‘)[0];
var configData;
var ajaxData={
    url:‘getJsConfig.php‘,
    type:‘post‘,
    data:{
        currentURL:currentURL
    },
    datatype:‘json‘,
    async:false,
    success:function(data)
    {
        if(data==null)
            alert(‘null‘);
        else
        {
            configData = data;
        }
    },
    error:function()
    {
      alert(‘error‘);
    }
}
$.ajax(ajaxData);//获取configData

这里ajax获取configData的方法为getJsConfig,具体的签名算法可参看微信开发者文档,这里不再赘述。

注意:请确保微信公众号设置里面已经绑定了JS接口安全域名,最终应该在debug为true的模式下提示success。

4.编写按钮点击事件

//获取用户收货地址接口
$(‘#select-address‘).click(function(){
    var currentURL = location.href.split(‘#‘)[0];
    var ajaxData={
        url:‘addressProcess.php‘,
        type:‘post‘,
        data:{
            currentURL:currentURL
        },
        datatype:‘json‘,
        async:false,
        success:function(data){
            WeixinJSBridge.invoke(
                ‘editAddress‘,
                {
                    appId:data[‘appId‘],
                    scope:‘jsapi_address‘,
                    signType:‘sha1‘,
                    addrSign:data[‘addrSign‘],
                    timeStamp:data[‘timeStamp‘],
                    nonceStr:data[‘nonceStr‘]
                },
                function (res) {
                    // res存有地址信息
                    for(var key in res){
                        alert(key+":"+res[key]);
                    }
                }
            );
        }
    };
    $.ajax(ajaxData);
});

通过addressProcess获取configData,以供WeixinJSBridge.invoke使用,最终res参数中含有地址信息,可以应用于页面逻辑;另外,addressProcess方法如下:

      $appId = getAppID(‘APPID‘);
      $nonceStr=createNoncestr(12);
      $timeStamp = time();
      $timeStamp="$timeStamp";//时间戳必须是字符串
      // 计算addrSign:包括appid,url,timestamp,noncestr,网页accesstoken
      $url = $_POST[‘currentURL‘];
      $accessToken = getAccessToken(‘accessToken‘);
      $string = "accesstoken=$accessToken&appid=$appId&noncestr=$nonceStr&timestamp=$timeStamp&url=$url";
      $addrSign = sha1($string);
      $signPackage = array(
        "appId"     => getAppID(‘APPID‘),
        "nonceStr"  => $nonceStr,
        "timeStamp" => $timeStamp,
        "addrSign" => $addrSign
      );
      $this->ajaxReturn($signPackage,$type=‘json‘);

几点注意的:

(1)addressProcess中$timeStamp注意是字符串,所以应该进行转换。

$timeStamp="$timeStamp";//时间戳必须是字符串

(2)进行sha1的字符串中,注意参数timestamp中s为小写

(3)官方文档提供的实例中sha1最后的结果是错误的,不要受到影响

(4)这里的accessToken是用网页授权接口获取的,获取accessToken的scope是snsapi_base(和前端网页JavaScript API传入的scope不同)。

(5)官方文档说:“因为使用了网页授权接口,url是经过微信回调后打开的,所以参与签名使用的url必须带上微信服务器返回的code和state参数。),实际测试过程中,code和state参数并不是必须的。  

最后,实际开发中,建议参考下面收货地址文档,并结合这篇博客代码进行查找错误即可。

备注:微信官方的有关收货地址的文档地址:

https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_8

http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#JSSDK.E4.BD.BF.E7.94.A8.E6.AD.A5.E9.AA.A4

(完)

文档信息

时间: 09-04

微信收货地址共享开发接口讲解的相关文章

微信支付开发(7) 收货地址共享接口V2

在这篇微信公众平台开发教程中,我们将介绍如何在网页中实现获取收货地址的功能. 收货地址共享接口 在2016年4月13日 进行过升级,2016年5月20日之后只能使用新接口,本教程为新版接口的教程! 本文分为以下二个部分: 生成JS-SDK权限验证签名 实现获取共享收货地址 一.微信JS-SDK 1. 获得Access Token access token的获得方法在前面有介绍,详情见 微信公众平台开发(26) ACCESS TOKEN 2. 获取jsapi_ticket 生成签名之前必须先了解一

微信支付v3开发(6) 收货地址共享接口

请看新版教程  微信支付开发(7) 收货地址共享接口V2 本文介绍微信支付下的收货地址共享接口的开发过程. 一. 简单介绍 微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,兴许能够免填写支持高速选择.也可添加和编辑. 此地址为用户属性.可在各商户的网页中共享使用.支持原生控件填写地址.地址数据会传递到商户. 地址共享是基于微信JavaScript API 实现.仅仅能在微信内置浏览器中使用,其它浏览器调用无效. 同一时候,须要微信5.0 版本号才干支持,建议通过user agen

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

关键字:微信支付 收货地址共享作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/weixin-editAddress.html 本文介绍微信支付下的收货地址共享接口的开发过程. 一. 简介 微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,后续可以免填写支持快速选择,也可增加和编辑.此地址为用户属性,可在各商户的网页中共享使用.支持原生控件填写地址,地址数据会传递到商户. 地址共享是基于微信JavaScript API 实现,只能在微信内置浏

微信支付开发(6) 收货地址共享接口 【转发收藏】

作者:方倍工作室原文: http://www.cnblogs.com/txw1958/p/weixin-editAddress.html 本文介绍微信支付下的收货地址共享接口的开发过程. 一. 简介 微信收货地址共享,是指用户在微信浏览器内打开网页,填写过地址后,后续可以免填写支持快速选择,也可增加和编辑.此地址为用户属性,可在各商户的网页中共享使用.支持原生控件填写地址,地址数据会传递到商户. 地址共享是基于微信JavaScript API 实现,只能在微信内置浏览器中使用,其他浏览器调用无效

微信收货地址开发分享

微信支付做了有一定时间了,现在就来做一些知识的总结,总体来说微信支付的文档不是非常的完美,其中存在一些问题.虽然坑很多,但是还是把问题解决了. 微信支付的收货地址共享功能,主要是统一的管理微信用户个人的收货地址,其收货地址可以被应用于所有可以调用的开发者.用户的收货地址包含了很多个人信息,因此该接口必须要通过申请,申请的方式可以在mp平台上查看到. 申请开通 包含微信支付功能时,则需要配置微信的支付目录(支付目录为绝对路径,例如支付接口为wxpay.php,而该文件在wxpay目录下,那么支付目

(转)微信收货地址开发分享

微信支付做了有一定时间了,现在就来做一些知识的总结,总体来说微信支付的文档不是非常的完美,其中存在一些问题.虽然坑很多,但是还是把问题解决了. 微信支付的收货地址共享功能,主要是统一的管理微信用户个人的收货地址,其收货地址可以被应用于所有可以调用的开发者.用户的收货地址包含了很多个人信息,因此该接口必须要通过申请,申请的方式可以在mp平台上查看到. 申请开通 包含微信支付功能时,则需要配置微信的支付目录(支付目录为绝对路径,例如支付接口为wxpay.php,而该文件在wxpay目录下,那么支付目

阶段一-03.地址,订单,支付,定时任务开发-第1章 收货地址功能开发-1-1 收货地址 - 需求分析与表设计

结算页面让用户确认信息,选择收货地址 还需要开发的是整理的收货地址 生产环境上的效果 默认选中的地址 新增一个测试的地址 这就是新增的地址 用户初次进入到订单结算页面,默认选中的是默认地址 和地址相关的数据库 省市区,都是在js里面进行维护的 其实就是一个json的数组,包含了很多的内容. 创建conroller AddressController 结束 原文地址:https://www.cnblogs.com/wangjunwei/p/12359446.html

微信收货地址

http://www.oschina.net/code/snippet_1399261_37142    //js事件 http://blog.csdn.net/dan_blog/article/details/31397681  //编辑收货地址

微信共享收货地址 edit_address:fail 吐白沫级解决方案

又被微信坑了一整天,看完官方文档怎么测试都不通过,我一直怀疑是新版本微信支付我没有设置“共享收货地址”开关造成的. 后来经过验证,新版本不需要做这件事了. 那么,我没错,是微信的文档没及时更新... 查了几个技术博客得知,这个接口在2016年的年中已经升级了,旧版的那个接口不能使了. 于是那个什么Addrsign就去见鬼了. 真的无力吐槽微信团队的文档水平和工作态度,这一家独大的优越感.. 好了好了,说正事儿: 首先,你得开通微信支付,其次,要在微信公众后台配置个安全域名的URL,设置下微信支付