关于小程序手机号授权的问题,后端接口错误码-41003

前言

昨天做了小程序一键授权登录的功能,点击登录按钮需要用户授权小程序获取用户绑定的手机号,后端接口使用了微信提供的demo,链接在这里[微信解密demo](https://res.wx.qq.com/wxdoc/dist/assets/media/aes-sample.eae1f364.zip),按照微信官方文档的小程序拉取授权手机号的操作步骤,发现总是报错误码-41003

解决方案

小程序的button按钮的一个开放功能小程序button按钮开放能力

上代码

代码如下(示例):

<!--wxml-->
<button class='bottom' open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">
    授权登录
</button>

//js代码
getPhoneNumber: function(e) {
    console.log(e.detail.errMsg)
      if (e.detail.errMsg == 'getPhoneNumber:fail user deny') {
        wx.showModal({
          title: '提示',
          showCancel: false,
          content: '未授权',
          success: function (res) { }
        })
      } else {
        //调用接口获取登录凭证
        wx.login({
          success: function (res) {
            //获取到的code
            var code = res.code;
            if (res.code) {
              //发起网络请求 
              console.log(res.code)
            } else {
              console.log('获取用户登录态失败!' + res.errMsg)
            }
            var that = this;
            console.log("同意授权")
            
            //获取openid、session_key
            wx.request({
              url: 'xxxxxxxxxx/good/getOpid',
              data: {
                code: code,
              },
              header: {
                'content-type': 'application/json'
              },
              success: function (res) {
                var se_key = res.data.session_key  // wx_login()接口返回成功的值有openid、session_key、unionid      
                var encryptedData = encodeURI(e.detail.encryptedData)  // 完整的加密数据
                var iv = e.detail.iv  //加密算法的初始向量
                
                //换取手机号
                wx.request({
                  url: 'xxxxxxx/demo.php',
                  data:{
                    encryptedData:encryptedData,
                    iv:iv,
                    se_key:se_key
                  },
                  header: {
                    'Content-Type': 'application/x-www-form-urlencoded'
                   },
                  method:'POST',
                  success:function(res){
                    console.log(res.data,"获取到的用户手机号")
                  }
                })
              },
            });
          }
        });       
      }
  },

需要注意的地方


用红框圈住的地方是错误的原因,有些博客这个地方没有写这个函数,有的写得是encodeURLComponent(),反正我的这么写是对的,朋友们可以自己去尝试一下

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
您好!要开发微信小程序手机号登录接口,您可以使用Java后端来处理请求和验证手机号登录。下面是一个简单的示例代码,供您参考: ```java @RestController @RequestMapping("/api") public class LoginController { @PostMapping("/login") public ResponseEntity<?> login(@RequestBody LoginRequest request) { // 在这里进行手机号验证逻辑,例如检查数据库中的用户信息 // 如果手机号有效,可以生成并返回访问令牌(access token) // 如果手机号无效,可以返回相应的错误信息 // 这里只是一个示例,您需要根据自己的业务需求进行实现 if (isValidPhoneNumber(request.getPhoneNumber())) { String accessToken = generateAccessToken(request.getPhoneNumber()); return ResponseEntity.ok(new LoginResponse(accessToken)); } else { return ResponseEntity.badRequest().body("Invalid phone number"); } } private boolean isValidPhoneNumber(String phoneNumber) { // 在这里实现您的手机号验证逻辑,可以检查数据库、调用第三方API等 // 返回 true 表示手机号有效,返回 false 表示手机号无效 // 这里只是一个示例,您需要根据自己的业务需求进行实现 return phoneNumber.matches("^\\d{11}$"); } private String generateAccessToken(String phoneNumber) { // 在这里生成访问令牌(access token),可以使用 JWT、UUID等方式 // 返回生成的访问令牌 // 这里只是一个示例,您需要根据自己的业务需求进行实现 return UUID.randomUUID().toString(); } } ``` 上述示例代码中,`LoginController` 是一个处理登录请求的控制器。`/api/login` 路径对应着手机号登录接口。在 `login` 方法中,您可以实现手机号验证的逻辑,并根据验证结果返回相应的响应。 请根据您的具体业务需求进行修改和补充。这只是一个简单示例,您可能还需要添加数据库查询、加密解密等功能来完善您的登录接口。 希望对您有所帮助!如有更多问题,请随时提问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值