说在前面
此方法需要自己有一台云服务器
用云开发应该能更快更高效的获取openid,但是我也想熟练下云服务器的使用,因为后续数据库等(若不使用云开发)也需要php+nginx部署到云服务器上
【小程序+云服务器|微信小程序获取openid【非云开发版】【第零期】】梳理下顺序,大概流程如下:
- 调用 wx.login(),获取临时 code
相关文档 https://developers.weixin.qq.com/miniprogram/dev/api/open-api/login/wx.login.html
- 通过request方式,调用一个api,将获取到的 code 发送给后台换取 openid
相关文档 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html本来有了这些东西就能获得openid,unionid了,但是微信鬼精得很,使用浏览器可以直接访问那个api,但是在微信开发者工具里面不行。
(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’(就是这个)
因为——
微信api开头是“api.weixin.qq.com”,微信官方不允许直接request这个链接
因此有了第三步
- 在自己的服务器上通过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--结束
}
}
})
结果展示
文章图片
推荐阅读
- 小程序|小程序重构第一期丨不小心删库了。。。
- 微信小程序|小程序 获取小程序链接
- 网络研究院|如何一键关闭win安全中心(Windows Defender )
- 网络研究院|无法访问mysql官网,如何查找下载mysql所有版本?
- 公司内网开发服务器不可访问事故处理
- 安利一款免费开源实时的服务器监控工具(Netdata)
- WebRTC 服务器常见架构
- 学习篇|阿里云部署RocketMQ产生的问题
- 如何监控服务器主机的流量——WGCLOUD