纯云开发获取用户微信绑定的手机号码

今天开始在写带支付版的二手书了,涉及到用户注册信息需要获取手机号,这里有两个办法,第一是购买短信接口,第二是直接小程序开放数据获取手机号。

两者的区别:第一种对小程序没有类型要求,个人的都可以实现。第二种必须要企业认证小程序才行,但是这种办法一方面可以直接拉取用户绑定微信的手机号,方便操作体验好,还可以使用腾讯自带的短信接口,要省一笔钱。

由于支付也必须要认证,所以这里肯定选择第二种办法,直接用小程序自带api获取。

官方文档地址:

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/getPhoneNumber.html

通过button设置getPhoneNumber可以直接获取到encryptedData,iv这两个加密参数,但需要进行解密才能进一步获取手机号,解密说明文档:

https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/signature.html#%E5%8A%A0%E5%AF%86%E6%95%B0%E6%8D%AE%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95

我们还差一个参数session_key,这个获取需要通过另一条接口:

https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html

绕的有点晕,我们直接看代码:

login.js文件

     //获取用户手机号
      getPhoneNumber: function(e) {
            let that = this;
            //判断用户是否授权确认
            if (!e.detail.errMsg || e.detail.errMsg != "getPhoneNumber:ok") {
                  wx.showToast({
                        title: '获取手机号失败',
                        icon: 'none'
                  })
                  return;
            }
            wx.showLoading({
                  title: '获取手机号中...',
            })
            wx.login({
                  success(re) {
                        wx.cloud.callFunction({
                              name: 'regist', // 对应云函数名
                              data: {
                                    $url: "phone", //云函数路由参数
                                    encryptedData: e.detail.encryptedData,
                                    iv: e.detail.iv,
                                    code: re.code
                              },
                              success: res => {
                                    console.log(res);
                                    wx.hideLoading()
                                    //获取成功,设置手机号码
                                    that.setData({
                                          phone: res.result.data.phoneNumber
                                    })
                              },
                              fail: err => {
                                    console.error(err);
                                    wx.hideLoading()
                                    wx.showToast({
                                          title: '获取失败,请重新获取',
                                          icon: 'none'
                                    })
                              }
                        })
                  },
                  fail: err => {
                        console.error(err);
                        wx.hideLoading()
                        wx.showToast({
                              title: '获取失败,请重新获取',
                              icon: 'none'
                        })
                  }
            })
      },

云函数regist:

先把上面第一和第二行的文件传上,下载地址:

http://oss.98api.cn/zip/xcx_cryptojs.rar

然后再来看index.js

// 云函数入口文件
const cloud = require('wx-server-sdk');
const TcbRouter = require('tcb-router');//云函数路由
const rq = require('request');
const wxurl ='https://api.weixin.qq.com';
const appid ='xxxxx';//你的小程序appid
const secret = 'xxxxxxxxx';//你的小程序secret
var WXBizDataCrypt = require('./RdWXBizDataCrypt') // 用于手机号解密
cloud.init()

// 云函数入口函数
exports.main = async (event, context) => {
      const app = new TcbRouter({ event });
      //获取电话号码
      app.router('phone', async (ctx) => {
            ctx.body = new Promise(resolve => {
                  rq({
                        url: wxurl + '/sns/jscode2session?appid=' + appid + '&secret=' + secret + '&js_code=' + event.code+'&grant_type=authorization_code',
                        method: "GET",
                        json: true,
                  }, function (error, response, body) {
                        const decrypt1 = new WXBizDataCrypt(appid, body.session_key)  // -解密第一步
                        const decrypt2 = decrypt1.decryptData(event.encryptedData, event.iv)   // 解密第二步*/
                        resolve({ data: decrypt2 })
                  });
            });
      });
      return app.serve();
}

安装依赖,上传部署,获取完毕

参考文章:https://www.jianshu.com/p/9651cc121afe 记录此篇日志

①做了一个小程序php开发交流圈,感兴趣可以加入我们:

小程序开发讨论圈

②还在找抖音快手等小视频去水印工具吗?我开发了一款支持全网短视频去水印的小工具,能直接保存到相册的,来看看嘛:

原文发布于微信公众号 - 宅机吧(zhai-78)

原文发表时间:2019-09-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券