支付宝小程序:模板模式接入获取会员手机号

小编:啊南 1596阅读 2020.12.28

产品介绍简介

获取会员手机号旨在帮助商家便捷获取用户联系方式,在获得用户充分授权和认可,且充分保护用户隐私的前提下快速创建会员体系或开展其他业务。有关获取会员手机号能力的详细介绍,请参见 获取会员手机号。

准入条件
  • 开发者需充分尊重用户个人隐私,妥善使用手机号码的使用范围,不得随意打扰用户。若发现信息存在超出约定范围使用或者不合理使用等情况,平台有权永久收回接口权限。

  • 为进一步规约和确认安全资质,开发者需加入 蚂蚁数据安全与隐私保障联盟,并严格遵守《支付宝开放平台用户信息处理规范》、《开放平台第三方应用安全开发指南》。

收费模式

免费。

接入流程

接入准备第一步:创建应用及模板

系统服务商(ISV)需 创建第三方应用 并 创建小程序模板 后才可接入获取会员手机号能力。

第二步:添加能力

登录 开放平台控制台 >选择相应的第三方应用并点击进入管理后台 > 在 能力列表 中点击 添加能力 > 选择添加 获取会员手机号 应用AES密钥管理 能力。

image

第三步:配置应用

接入获取会员手机号能力前,ISV 需为模板所属第三方应用配置 应用网关接口内容加密方式

配置应用网关
  1. 登录 开放平台控制台 >选择相应的第三方应用并点击进入管理后台 > 开发管理,在 开发信息 > 应用网关 中,点击 设置

    image

  2. 输入 ISV 服务器的网关,选择加签方式,点击 确定。应用网关应符合以下要求:

  • 支持所设置的加签方式;

  • 外网可访问;

  • 可接收 post 数据 。

image

配置接口内容加密方式
  1. 登录 开放平台控制台 >选择相应的第三方应用并点击进入管理后台 > 设置 > 开发信息 > 在 接口内容加密方式 中,点击 设置image

  2. 确认提示内容,点击 生成新密钥,即完成配置。

image

模板开发第一步:接口调用
  1. ISV 在小程序端调用 my.getPhoneNumber 接口,再将接口返回的结果通过 my.request 接口传入第三方应用的网关地址。

    注意:

    • ISV 代商家获取用户手机号信息时需传入 isvAppID(第三方应用 AppID)。

    • 使用 protocols 要求 基础库 版本为 1.22.0 及以上;支付宝客户端版本为 10.1.72 及以上。请使用my.canIUse('getPhoneNumber.object.protocols')进行 兼容处理。

    示例代码:

    my.canIUse('getPhoneNumber.object.protocols')//兼容性处理my.getPhoneNumber({    protocols:{       // 小程序模板所属的第三方应用APPID            isvAppId: '第三方应用APPID'    },    success: (res) => {        let encryptedData = res.response; // 手机号及签名加密信息        my.request({            url: 'ISV服务端地址',            data: encryptedData,        });    },    fail: (res) => {        console.log(res);        console.log('getPhoneNumber_fail');   },});
  1. ISV 需在服务端解密小程序端返回的手机号信息,更多语言验签及解密示例详情参见 内容加密指引。

    注意:

    • 服务端解密时,需使用商家小程序 AES 密钥。

    • 调试小程序模板时,使用模板 AES 密钥。

    示例代码:

    public void decryptPhoneNum(){        String response ="";// 前端接口返回的加密信息        //1. 获取解密所需要的参数        Map openapiResult = JSON.parseObject(response,      new TypeReference>() {        }, Feature.OrderedField);        String charset = "UTF-8";        String encryptType = "AES";        String content = openapiResult.get("response");        // 判断是否为加密内容        boolean isDataEncrypted = !content.startsWith("{");        String decryptKey = "B_AES_KEY"; // 商家小程序 AES 密钥        //AES密钥,这里参数不能写成固定的,开发阶段需传入模板的AES密钥,实例化后应传入商家小程序的AES密钥        // 解密        String plainData = null;        if (isDataEncrypted) {            try {                System.out.println("AlipayEncrypt");                plainData = AlipayEncrypt.decryptContent(content, encryptType, decryptKey,charset);                System.out.println("AlipayEncrypt Trance done");            } catch (AlipayApiException e) {                //解密异常, 记录日志                                try {                    throw new Exception("解密异常");                } catch (Exception e1) {                    // TODO Auto-generated catch block                    e1.printStackTrace();                }            }        } else {            plainData = content;        }        System.out.println(plainData);}
第二步:模板调试

ISV 完成模板开发后,在提审模板前需在本地进行功能调试,完成调试后即可提审发布为服务,供商家订购使用。

模板授权

ISV 将小程序模板授权给第三方应用,详情参见 将模板授权给所属第三方应用。

image

配置 AES 密钥

ISV 需调用 alipay.open.auth.app.aes.set(授权应用aes密钥设置) 接口,以第三方应用自调用(即不传 app_auth_token)方式为小程序模板设置 接口内容加密方式(即 AES 密钥)

示例代码:

//encryptKey填入当前第三方应用的AES密钥,encryptType为"AES" AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","第三方应用APPID","your private_key","json","GBK","alipay_public_key","RSA2","encryptKey","encryptType");AlipayOpenAuthAppAesSetRequest request = new AlipayOpenAuthAppAesSetRequest();request.setBizContent ("{"   +          //为模板设置就填写小程序模板APPID,为商家设置就填写商家小程序APPID        ""merchant_app_id":"20191223601234500""   +    "}");AlipayOpenAuthAppAesSetResponse response = alipayClient.execute(request);if (response.isSuccess ()){      System.out.println ( response.getAesKey());      System.out.println ("调用成功");}  else  {      System.out.println ("调用失败");}

注意:

  • 配置 AES 密钥场景构造 alipayClient 时,构造方法中需传入 encryptKey 和 encryptType,encryptKey 为当前第三方应用的 AES 密钥,encryptType 为固定值 ?AES。

  • merchant_app_id:应用的 APPID,代模板设置时传入小程序模板 APPID,代商家小程序设置时传入商家小程序 APPID。

ISV 还可调用 alipay.open.auth.app.aes.get(授权应用aes密钥查询)接口(不传 app_auth_token),查询已授权给第三方应用的小程序模板或小程序应用的 AES 密钥。

//encryptKey填入当前第三方应用的AES密钥,encryptType为"AES" AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","第三方应用APPID","your private_key","json","GBK","alipay_public_key","RSA2","encryptKey","encryptType");AlipayOpenAuthAppAesGetRequest request = new AlipayOpenAuthAppAesGetRequest();request.setBizContent ("{"   +    ""merchant_app_id":"20191223601234500""   + //填写需查询密钥的应用APPID  "}" );AlipayOpenAuthAppAesGetResponse response = alipayClient.execute(request);if (response.isSuccess ()){  System.out.println(response.getAesKey());  System.out.println( "调用成功" );}  else  {  System.out.println( "调用失败" );}
代模板申请用户信息

代模板申请用户信息后,模板才有权限获取会员手机号。

  1. 登录 开放平台控制台 >选择相应的第三方应用并点击进入管理后台 > 功能管理 > 获取会员手机号,点击 代申请用户信息

?image

  1. 选择需要申请用户信息的小程序模板,点击 下一步

image

  1. 选择类目和用户信息,点击 下一步

image

  1. 阅读了解相关规范,并如实详细填写申请信息。确认无误后,点击 提交申请

image

  1. 审核时长约为 2~3 个工作日,审核通过后可获得该信息字段的权限。可登录 支付宝开放平台,进入 控制台 > 第三方应用详情 > 功能管理 > 获取会员手机号,点击 代申请用户信息 ,点击 已提交的申请,进入页面后,查看 状态 列,即可获取当前审核状态。image

代商家接入

ISV 需代商家申请用户信息、设置商家小程序 AES 密钥后,再 构建商家小程序版本,否则商家小程序将无法正常运行获取会员手机号能力。

设置商家小程序 AES 密钥的操作,请参见 模板代码实现。

第一步:商家订购

商家完成 订购服务 或者 线下授权 后,商家小程序会授权给 ISV 的第三方应用。

第二步:构建商家小程序版本

开发者需为商家小程序设置 内容加密方式(即 AES 密钥)再 构建商家小程序版本,否则商家小程序将无法正常运行获取会员手机号能力。

  1. AES 密钥配置详情参见上文 模板开发 > 第二步:模板调试 > 配置 AES 密钥

  2. 构建商家小程序版本详情参见 构建商家小程序版本。

第三步:配置小程序类目

ISV 代商家小程序申请用户信息前,需调用 alipay.open.mini.category.query(小程序类目树查询)接口查询商家小程序可用类目,再调用 alipay.open.mini.baseinfo.modify(小程序修改基础信息)接口,代商家小程序设置 mini_category_ids(前台类目即小程序主营行业类目)。详情参见上文 模板开发 > 第二步:模板调试 > 配置模板前台类目

商家小程序后台效果:

image.png

第四步:代商家小程序申请用户信息
  1. 登录 开放平台控制台 >选择相应的第三方应用并点击进入管理后台 > 功能管理 > 获取会员手机号,点击 代申请用户信息

image

  1. 选择需要申请用户信息的商家小程序,后续步骤与上文 ?模板开发 > 第二步:模板调试 > 代模板申请用户信息?一致。

image

第五步:进行测试

实例化商家小程序 后,在体验版中测试商家小程序是否能成功获取会员手机号,如不能,可参见下方 FAQ。若体验版正常无误,可进行 提审商家小程序。

FAQQ1:一个第三方应用最多只能代多少个授权的商家应用获取手机号?

A:ISV 在界面申请时单次最多可代 50 个已授权的应用申请用户信息,其余无数量限制。

Q2:提示 isv.missing-encrypt-key 缺少加密配置的报错?

A:需要调用 ?接口给模板小程序设置 AES 密钥。

Q3:代商户获取手机号,获取手机号时,没有传回 sign,什么原因?

A:检查小程序后台是否配置接口加签方式、AES 密钥、应用网关。

Q4:模板代申请用户手机号屡次被拒,驳回原因应用名称被释放,如何解决?

A:建议提交审核时做修改。或登录 商家中心,点击首页右侧“蚂蚁哥”头像在线咨询。

Q5:代商户申请手机号,有的商户不可以申请,什么原因?

A:并不是所有小程序都可以获取用户手机号的,和小程序行业、商家风险等相关。

关联标签: