新建一个代码片段,设置 appid, 开发模式选择 插件,勾选”不校验合法域名“
在 /miniprogram/pages/index/index.js onLoad 中增加如下代码,HOST_IP 为服务端 IP
wx.login({
success: res => wx.request({ url: HOST_IP + ":3001?loginCode=" + res.code })
});
服务端仅做 loginCode 换取 session 一个操作,代码如下:
APP_ID, APP_SECRET 分别为小程序的 appid 和 secret
let http = require("http");
let https = require("https");
http.createServer((req, res) => {
res.writeHead(200);
res.end();
const loginCode = new URL(req.url, "http://localhost:3001").searchParams.get("loginCode");
if(!loginCode) { return; }
console.log("===============================================");
console.log("login code:", loginCode);
console.log("user agent:", req.headers["user-agent"]);
const wxApiUrl = "https://api.weixin.qq.com/sns/jscode2session" +
"?appid=" + APP_ID +
"&secret=" + APP_SECRET +
"&js_code=" + loginCode +
"&grant_type=authorization_code";
https.get(wxApiUrl, async (wxRes) => {
let data = "";
for await(let chunk of wxRes) data += chunk;
console.log("wx response:", JSON.parse(data));
}).end();
}).listen(3001);
- 在开发者工具中点击编译,刷新页面
- 在开发者工具中点击预览,用手机扫码
服务端收到两次请求,打印出的日志如下:
经测试,手机预览时一直会失败,而开发者工具预览时可以成功