小程序+云服务器|微信小程序获取openid【非云开发版】【第零期】

说在前面 此方法需要自己有一台云服务器 用云开发应该能更快更高效的获取openid,但是我也想熟练下云服务器的使用,因为后续数据库等(若不使用云开发)也需要php+nginx部署到云服务器上
【小程序+云服务器|微信小程序获取openid【非云开发版】【第零期】】梳理下顺序,大概流程如下:

  1. 调用 wx.login(),获取临时 code
相关文档 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
  1. 通过request方式,调用一个api,将获取到的 code 发送给后台换取 openid
相关文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html
(api:https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code)
四个变量:
  • APPID:开发者的appid
  • SECRET: 开发者的appsecret(一串不可修改的随机码)
  • js_code: wx.login(res)中的res.code
  • grant_type: ‘authorization_code’(就是这个)
本来有了这些东西就能获得openid,unionid了,但是微信鬼精得很,使用浏览器可以直接访问那个api,但是在微信开发者工具里面不行。
因为——
微信api开头是“api.weixin.qq.com”,微信官方不允许直接request这个链接
因此有了第三步
  1. 在自己的服务器上通过nginx+php部署,将request发到自己php,并由此php发送请求
    港真,很麻烦吼,只是获取一个openid,还要自己租个服务器,部署这么多东西,没办法嗷,谁让我们不使用人家自己给的云服务器(云开发)喏
指路文章:
CentOS 7配置php+nginx 环境
修改了:
A. nginx.conf修改部分配置A:
location ~ \.php$ { root/var/www/html; # 项目的根目录 fastcgi_pass127.0.0.1:9000; # 应该是随便选,如果用socket通信就不行不知为何 #fastcgi_indexDIR/test.php; # 注释本行和注释下面的index效果是一样的 indexDIR/test.php; # 这里的路径是在root下的相对路径 fastcgi_paramSCRIPT_FILENAME/scripts$fastcgi_script_name; # 照抄 include/usr/local/nginx/conf/fastcgi.conf; # 若不在(通常都不在)nginx安装文件内, 需要通过绝对路径include到安装的nginx里 }

B. conf修改部分配置B:ssl部分(需要先把域名解析到服务器公网ip上,教程参考服务器平台官方解析教程)
server{ listen 6002 ssl; server_name 182.61.200.6 www.baidu.com baidu.com; # 公网ip 域名# ssl on; ssl_certificate /usr/local/nginx/cert/server.crt; # ssl证书 .crt格式ssl_certificate_key /usr/local/nginx/cert/server.key; # ssl证书 .key格式ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; }

test.php文件填写

参数也可以通过在url后面加 “?js_code=【res.code】” 查看效果
不过每个code只能request一次,所以需要先将下文中.wx.request部分注释
微信小程序端.js文件填写
wx.login({ success: function (res) { console.log('code为————' + res.code) if (res.code) { console.log('通过login接口的code换取openid'); //通过code 换取openid--开始 wx.request({//通常获取openid需要从后端获取,因为appid 和 secret最好不要在前端展示 url: 'https://xcx2022.cn:6002/hitsz/test_openid.php',//如果未勾选 不校验合法域名会报错请在小程序开发工具,右上角点击详情,的本地设置 data: { js_code: res.code }, method: 'GET', header: { 'content-type': 'application/json' }, success: function (openIdRes) { console.log("登录成功返回的值:" + openIdRes.data); }, fail: function (error) { console.info("获取用户openId失败"); console.info(error); } }) //通过code 换取openid--结束 } } })

结果展示 小程序+云服务器|微信小程序获取openid【非云开发版】【第零期】
文章图片

    推荐阅读