美文网首页前端笔记
JS交互微信之获取收货地址

JS交互微信之获取收货地址

作者: 流眸Tel | 来源:发表于2020-02-27 17:12 被阅读0次

前言

本篇为JS交互微信系列篇的第二篇,上一篇《JS交互微信之基础配置》讲述了基础配置,本篇记录获取(共享)用户收货地址。

一、 场景

在需要用户实际收货地址时,可以直接拉取用户微信中存在的收货地址,或者在微信中新增、编辑及删除收货地址,而后传给商户

二、 介绍

1. 简介

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

2. 功能支持

地址共享是基于微信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。

3. 地址格式

微信地址共享使用的数据字段包括:

  • 收货人姓名
  • 地区,省市区三级
  • 详细地址
  • 邮编
  • 联系电话
  • 国际编码

三、 接口说明

openAddress

wx.openAddress({
    success: function () {
        // 用户成功拉出地址 
    },
    cancel: function () {
        // 用户取消拉出地址
    }
});

返回值说明

返回值 说明
errMsg 获取编辑收货地址成功返回“openAddress:ok”
userName 收货人姓名
postalCode 邮编
provinceName 国标收货地址第一级地址(省)
cityName 国标收货地址第二级地址(市)
countryName 国标收货地址第三级地址(国家)
detailInfo 详细收货地址信息
nationalCode 收货地址国家码
telNumber 收货人手机号码

四、 示例代码

1. 引入script

// 主文件 或 入口文件 引入
<script src="https://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>

2. wx.config配置

// 微信配置
// appId、timestamp、nonceStr、signature从公众号和后台获取
wx.config({
    debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: '', // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名
    jsApiList: [
        'checkJsApi',
        'openAddress'
    ] // 必填,需要使用的JS接口列表 这里填写需要用到的微信api openlocation为使用微信内置地图查看位置接口
});

3. 获取地址

wx.ready(function () {
    // 检测接口是否可用,开发环境中测试用,生产环境没问题可不写
    wx.checkJsApi({
        jsApiList: [
            'openAddress',
        ],
        success: function (res) {
            alert(res);
        }
    });
    // 请求接口
    wx.openAddress({
        // 请求成功要做的事
        success: (res) => {
            // 这里我把获取到的用户信息存储到了vuex中的state中保存,以防后续路由跳转带来的组件销毁带来的数据没法保存
            // 根据自己需求拿自己需要的参数即可,参数名可对照上面的返回值说明表
            _this.$store.state.address.userName = res.userName;
            _this.$store.state.address.telNumber = res.telNumber;
            _this.$store.state.address.nationalCode = res.nationalCode;
            _this.$store.state.address.provinceName = res.provinceName;
            _this.$store.state.address.cityName = res.cityName;
            _this.$store.state.address.countryName = res.countryName;
            _this.$store.state.address.detailInfo = res.detailInfo;
        },
        cancel: function () {
            // 用户取消要做的事儿
            // 这里我把请求时打开的一个loading动画给关闭了
            _this.$layer.close();
        },
    });
});

五、 常见问题

在开发中,我遇到的问题如下:

  1. 必须发布到线上测试,没找到好的解决办法;
  2. 公众号(服务号)中要设置IP白名单,不然通不过验证!
  3. 安卓可以调起而iOS无法调起:引入script链接时,应引入https而不是http,可能iOS对安全策略这块儿比较严格,在此处踩了个坑。
  4. 在PC端无法调起!

以上。

相关文章

网友评论

    本文标题:JS交互微信之获取收货地址

    本文链接:https://www.haomeiwen.com/subject/eqjxhhtx.html