前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >纯云开发获取用户微信绑定的手机号码

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

作者头像
许坏
发布2019-09-05 16:57:52
3.5K2
发布2019-09-05 16:57:52
举报
文章被收录于专栏:宅机吧宅机吧

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

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

由于支付也必须要认证,所以这里肯定选择第二种办法,直接用小程序自带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文件

代码语言:javascript
复制
     //获取用户手机号
      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

代码语言:javascript
复制
// 云函数入口文件
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开发交流圈,感兴趣可以加入我们:

小程序开发讨论圈

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-09-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 宅机吧 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档