获取小程序 openid 返回 null 问题解决

简介: 获取小程序 openid 返回 null 问题解决

获取小程序 openid 返回 null

登录 wx.login() 获取到 code,为了安全 session_key 和 openid 不暴露在客户端,而且 https://api.weixin.qq.com 不能设置白名单,需要使用 code 在服务端换取 session_key 和 openid

之前小程序服务一直正常,无提交任何代码,突然获取openid失败,搜索各种文章解决,遇到各种问题 41004 ,40163,code 只能使用一次没问题,Peer certificate CN=miniapi.x.com' did not match expected CN=api.weixin.qq.com`
DNS服务器无法连接,ping 过发现没有问题,etc/host 配置也没问题,关联公众号白名单也设置了,后端换两种写法也不行。
设置关联小程序的公众号添加IP白名单

看以下步骤

先打印出来 app.js

    globalData: {
        appid: 'wx7db46aji5jf6',//小程序appid,需自己提供
        secret: '9cb98jjk57okp245sd',//小程序密钥,需自己提供
        hasLogin: false,
        openid: null,
        firstTime: true,
        accessToken: null
    },
    getUserOpenId: function() {
        var that = this;
        //登录
        wx.login({
            success: function(res) {
              console.log(res)//打印code
              var d = that.globalData;//这里存储了appid、secret、token串  
              var l = 'https://api.weixin.qq.com/sns/jscode2session?appid=' + d.appid + '&secret=' + d.secret + '&js_code=' + res.code + '&grant_type=authorization_code';
              console.log(l)打印 curl
              //以下代码会报错 https://api.weixin.qq.com 不在以下 request 合法域名列表中,也不能设置IP白名单,而且为了安全客户端不暴露 session_key 和 openid,只能服务端获取
              wx.request({
                url: l,
                data: {},
                method: 'GET',
                // header: {}, // 设置请求的 header  
                success: function (res) {
                  console.log(res)
                  var obj = {};
                  obj.openid = res.data.openid;
                  obj.expires_in = Date.now() + res.data.expires_in;
                  console.log(obj);
                  //wx.setStorageSync('user', obj);//存储openid  
                }
              });
        

        /*
        //code 获取 openid 的正确方式,code每次都是最新的而且只能使用一次
        wx.request({
                    url: that.apis.domain + that.apis.login,
                    header: {
                        "Content-Type": "application/x-www-form-urlencoded"
                    },
                    method: 'POST',
                    data: {
                        code: res.code
                    },
                    success: function(res) {
                        if(res.data.status == 1){
                            //console.log('拉取openid成功', res);
              console.log(res)
                            that.globalData.hasLogin = true;
                            that.globalData.openid = res.data.data.openid;
                            that.firstTime(res.data.data.openid);
                        } else {
                            that.globalData.hasLogin = false;
                            //console.log('拉取openID失败,将无法正常使用开放接口等服务',res);
                        }
                    },
                    fail: function(res) {
                        console.log('拉取用户openid失败,将无法正常使用开放接口等服务', res)
                        callback(res)
                    }
                })
        */
            },
            fail: function(err) {
                console.log('wx.login 接口调用失败,将无法正常使用开放接口等服务', err)
                callback(err)
            }
        })
    },

看打印结果 code 和 url
B4090E41_26F6_44A8_99EF_9F4BF42F0370

在 postman 测试,先使用 code 请求后端接口,返回 null
1564566554519

把 url 拿出来直接在 postman 请求每次都是成功的,确认是后端服务的问题
1564566948437

把 url 放在服务器直接 curl,各种报错来了 "errcode":41004,"errmsg":"appsecret missing 各种方法用过没有解决问题
B28E2F4A_1B59_4255_9EB6_4973E6953FC5

最后设置关联小程序的公众号添加IP白名单后重启服务器问题解决了,没有更改任何代码

目录
相关文章
|
4月前
|
小程序 前端开发 JavaScript
微信小程序(二十一)小程序登录获取openid和unionid
在微信小程序中,因为各种各样的原因我们会需要获取到用户的openid或者unionid下面就简单来讲一下在小程序中如何获取openid和unionid。 步骤一:微信登录获取登录凭证
182 0
|
11月前
|
小程序 PHP
10行PHP代码快速获取小程序openid
10行PHP代码快速获取小程序openid
193 0
|
7月前
|
小程序 前端开发
uniapp+node.js(express框架)获取微信小程序的openid
uniapp+node.js(express框架)获取微信小程序的openid
141 0
|
11月前
|
小程序 API
零基础学小程序007---小程序获取用户openid
零基础学小程序007---小程序获取用户openid
109 0
|
小程序 JavaScript PHP
基于PHP方法,微信公众号小程序获取code,access_token,openid,用户信息
基于PHP方法,微信公众号小程序获取code,access_token,openid,用户信息
239 0
|
Java API
MMJ-Spring Boot(Java)获取小程序Openid
背景 开发小程序,想使用微信账号唯一码,API是这么说的wx.login...code 换取 session_key接口地址:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code 问题 开放的api并且是get,直接浏览器地址正确传参就可以获取到openid。
2355 0
|
4天前
|
小程序 前端开发 API
小程序全栈开发中的多端适配与响应式布局
【4月更文挑战第12天】本文探讨了小程序全栈开发中的多端适配与响应式布局。多端适配涉及平台和设备适应,确保统一用户体验;响应式布局利用媒体查询和弹性布局维持不同设备的布局一致性。实践中,开发者可借助跨平台框架实现多平台开发,运用响应式布局技术适应不同设备。同时,注意兼容性、性能优化和用户体验,以提升小程序质量和用户体验。通过这些方法,开发者能更好地掌握小程序全栈开发。
|
4天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
4天前
|
小程序 安全 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的身份认证与授权机制。身份认证包括手机号验证、微信登录和第三方登录,而授权机制涉及角色权限控制、ACL和OAuth 2.0。实践中,开发者可利用微信登录获取用户信息,集成第三方登录,以及实施角色和ACL进行权限控制。注意点包括安全性、用户体验和合规性,以保障小程序的安全运行和良好体验。通过这些方法,开发者能有效掌握小程序全栈开发技术。
|
4天前
|
小程序 前端开发 安全
小程序全栈开发中的跨域问题及其解决方案
【4月更文挑战第12天】本文探讨了小程序全栈开发中的跨域问题及其解决方案。跨域问题源于浏览器安全策略,主要体现在前后端分离、第三方服务集成和数据共享上。为解决此问题,开发者可采用CORS、JSONP、代理服务器、数据交换格式和域名策略等方法。实践中需注意安全性、兼容性和性能。通过掌握这些解决方案,开发者能更好地处理小程序的跨域问题,提升用户体验。

热门文章

最新文章