注意:需要企业账号,以及认证过的号码才可以
客户端获取电话号码 服务端依赖

第一步

  1. const getCode = function() {
  2. return new Promise(function(resolve, reject) {
  3. wx.login({
  4. withCredentials: true,
  5. success(res) {
  6. resolve(res);
  7. },
  8. fail(err) {
  9. reject(err)
  10. }
  11. })
  12. })
  13. }
  14. const code2Session = function(code) {
  15. return request({
  16. url: 'https://api.weixin.qq.com/sns/jscode2session',
  17. method: 'get',
  18. data: {
  19. appid: "xxxx",
  20. secret: "xxxx",
  21. js_code: code,
  22. grant_type: 'authorization_code'
  23. },
  24. headers: {
  25. "content-ype": "application/json"
  26. }
  27. })
  28. }
  29. request.login.getCode().then(function(res) {
  30. if (res.code) {
  31. request.login.code2Session(res.code).then(function(result) {
  32. // result 返回 openid与sessionKey
  33. // 成功,记住 sessionKey
  34. })
  35. }
  36. })

第二步

获取iv,encryptedData,下载解密包,利用解密包,利用解密包,获取到真实的电话号码
image.png
image.png

  1. 需要将 button 组件 open-type 的值设置为 getPhoneNumber,当用户点击并同意之后,可以通过 bindgetphonenumber 事件回调获取到微信服务器返回的加密数据, 然后在第三方服务端结合 session_key 以及 app_id 进行解密获取手机号。
  2. <button open-type="getPhoneNumber" bindgetphonenumber="bindgetphonenumber">登录</button>
  3. uni-app 中使用want
  4. <view class="c-box flex">
  5. <van-button open-type="getPhoneNumber" @getphonenumber="getPhoneNumber" size="mini" type="primary">微信登录</van-button>
  6. </view>
  7. <script>
  8. export default {
  9. data() {
  10. return {
  11. }
  12. },
  13. onLoad() {
  14. },
  15. methods: {
  16. getPhoneNumber: function (e) {
  17. if (e.detail.iv) {
  18. console.log("iv", e.detail.iv);
  19. console.log("encryptedData", e.detail.encryptedData)
  20. return
  21. }
  22. if (e.detail.errMsg) {
  23. return
  24. }
  25. },
  26. }
  27. }
  28. </script>

image.png