支付宝小程序-获取会员手机号

实现思路:

  •   目前该功能需要在开发者后台完成敏感信息申请才可以使用此功能,入口为 开发管理 > 功能列表 > 添加功能  > 获取会员手机号 > 用户信息申请
  •  需要将 <button> 组件:
  1. open-type    此处设置为 getAuthorize ,用于授权。
  2. scope    此处设置为 phoneNumber ,手机号码。
  3. onGetAuthorize    授权成功回调(在回调里可以调用获取信息的接口)。
  4. onError    授权失败回调(包括用户拒绝和系统异常)。
  • 当用户点击并同意之后,可以通过my.getPhoneNumber() 接口获取到支付宝服务器返回的加密数据
  •   然后在第三方服务端结合签名算法和AES密钥进行解密获取手机号
  • 请确保已在 小程序后台>设置>开发设置中,设置[支付宝公钥\aes 密钥\应用网关],(若缺失这三个设置,在调用 my.getPhoneNumber 时可能只返回 response 不会返回sign)。

注意:支付宝原生组件中onGetAuthorize、onError在uniapp中无法条件编译成功,改为 @getAuthorize、@error才可以,下面的代码是不起作用的。

<button open-type="getAuthorize"
   onGetAuthorize="onGetAuthorize" 
    onError="onAuthError" 
    scope='phoneNumber'>
    授权手机号
</button>

有效的代码示例如下:

<template>
  <view>
    <button
      type="ghost"
      open-type="getAuthorize" 
      scope='userInfo'
      @getAuthorize="onGetAuthorize" 
      @error="onAuthError"> 授权手机号
    </button>
    <view> 手机号:{{tel}}</view>
  </view>
</template>

<script>
  export default {
    data() {
      return {
        tel: '11111111111',
      }
    },
    methods: {
      /* 授权成功事件*/
      onGetAuthorize() {
        // 判断是否支持小程序授权
        // let flag=my.canIUse('button.open-type.getAuthorize') 
        my.getPhoneNumber({
          success: (res) => {
            let encryptedData = res.response;
            let params={
              encryptedData:res.response,
              sign:res.sign
            }
            this.getPhoneNumberAli(params);
          },
          fail: (res) => {
            this.$request.setErrorMessage("获取用户手机号失败")
          },
        });
      },
      /*** 授权失败事件*/
      onAuthError(err){
        this.$request.setErrorMessage(err.detail.errorMessage)
      },
      // 解密获取手机号
      getPhoneNumberAli(params) {
        this.$request.setRequest('/huoqushoujihao', params)
          .then(res => {
            if (res.data.status == 1) { //成功
              this.tel = res.data.data.mobile;
            } else if (res.data.status < 1) {
              this.$request.setErrorMessage(res.data.msg)
            } else {
              this.$request.setErrorMessage()
            }
          })
      },
    },
  }
</script>

<style lang="scss" scoped>

</style>

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

佛佛ง

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值