微信收货地址共享(openAddress)的坑

editAddress editAddress:fail editAddress:fail_auth_error openAddress 微信收货地址 微信收货地址共享 没有此SDK或暂不支持此SDK模拟

就因为这个坑,折腾了将近半天,查了很多资料,看到很多骂的,在这里,我也想骂了,微信开发文档太TMD坑爹了,不用的接口要么去掉,要么跳转到新的啊,干嘛新的旧的都放那,而且大部分链过去都是旧的,一行一行的看代码,按照文档的要求写的,结果死活不行,一直报错:editAddress:fail_auth_error,最后偶然发现是接口名称换过了,获取的方式也换过了,真是醉了。。。。。。

废话不说了,下边是最新的代码:

 

PHP和分享一样,去取一下签名的内容:

$addr = new WechatSign("wx69397d6a64792c6c", "946d8098faf7bad2c0b005de7aa82d2d");
$addrSign = $addr->GetSignPackage();
$this->assign('addrSign', $addrSign);

我这边是把签名那些方法放到一个类里面了,官方那有,这里就不放了。

 

HTML要先引入最新的js:

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

<script type="text/javascript">
wx.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
appId: "{$addrSign['appId']}", // 必填,公众号的唯一标识
timestamp: "{$addrSign['timestamp']}", // 必填,生成签名的时间戳
nonceStr: "{$addrSign['nonceStr']}", // 必填,生成签名的随机串
signature: "{$addrSign['signature']}",// 必填,签名,见附录1
jsApiList: ['checkJsApi','openAddress'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
});
wx.ready(function () {
});

function getaddr() {
wx.openAddress({
success: function (res) {
// 用户成功拉出地址
alert(JSON.stringify(res));
},
cancel: function (errMsg) {
// 用户取消拉出地址
//alert(errMsg);
}});
}
</script>

 

我这里是把调取地址放在一个方法里了,如果不需要,直接放在wx.ready(function () {
});里即可。

然后就没有然后了,到此就好了。点击的时候会跳转到地址的界面。

注意:此功能仅限在微信浏览器里使用,别的浏览器不能用的哦!还有就是这个功能只能在手机上测,web开发者工具里会提示:没有此SDK或暂不支持此SDK模拟

 

以前的写法是这样的:

WeixinJSBridge.invoke('editAddress', {
"appId": "{$addrSign['appId']}",
"scope": "jsapi_address",
"signType": "sha1",
"addrSign": "{$addrSign['addrSign']}",
"timeStamp": "{$addrSign['timeStamp']}",
"nonceStr": "{$addrSign['nonceStr']}",
}, function (res) {
if (res.err_msg == 'edit_address:ok') {
$.cookie('addr', JSON.stringify(res));
} else {
alert(res.err_msg);
}
});

但是已经不支持了。