开发者社区> 佀无极> 正文

获取小程序 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白名单后重启服务器问题解决了,没有更改任何代码

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
The APR based Apache Tomcat Native library which allows optimal performance in production 问题的解决
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path:XXXX 出现原因分析: Tomcat建议使用apache的apr,来更好的运
1290 0
Linux问题情报分享(2):grub-install工具不能处理/dev/xvda*路径
grub-install不能处理/dev/xvda这样的路径,需要重装grub时怎么处理呢?
2390 0
数据库突然宕机无法open的问题及解决
测试的数据库有一天突然宕机,然后无法正常open了,这个问题虽然过去了一段时间,也在这儿总结一把。 从alert日志中的信息如下。 Fri Jan 10 16:09:42 2014 Archived Log entry 6837 added for thr...
754 0
[20121028]not in与NULL问题.txt
[20121028]not in与NULL问题.txt 在sql语句中使用not in,在遇到子表含有NULL的情况下,会出现没有行返回的情况,自己遇到过几次,好几次没有转过弯来。
766 0
解决Jquery与Shopex调用的mootools冲突问题
在%thems%/block/header.html 里面的""标签前加入以下代码 jQuery.noConflict(); 这步是关键,在前面,加入以上代码。然后把使用jquery里面的所有$都替换为jQuery就行了(替换选择器)。
672 0
Ubuntu中使用SSHSecure Shell测试Windows与Linux系统间操作及传输问题解决大全
安装SSH服务器 Linux终端下输入sudo apt-get install openssh-server 桥接模式IP设置 inux 与Windows 都是设置为自动获取 IP 地址,然后调到第一次测试一栏开始。
1180 0
使用ladp null文章连接的安全问题
http://support.microsoft.com/kb/837964
577 0
解决Setting property 'source' to 'org.eclipse.jst.jee.server的问题
对于这个问题,我相信我的方法已经能帮90%的人解决了! 当你用Eclipse运行web项目的时候,你就会看到控制台出现:WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:firstProject'
1022 0
+关注
佀无极
脚踏实地,心存高远!
69
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载