收藏
回答

手机预览时插件小程序中 wx.login 获取的 loginCode 无效

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug login 微信安卓客户端 7.0.16 2.12.1

新建一个代码片段,设置 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);


  1. 在开发者工具中点击编译,刷新页面
  2. 在开发者工具中点击预览,用手机扫码

服务端收到两次请求,打印出的日志如下:

经测试,手机预览时一直会失败,而开发者工具预览时可以成功

回答关注问题邀请回答
收藏

1 个回答

  • 青寒
    青寒
    发表于小程序端
    2020-08-18
    code被重复使用,所以失效了?
    2020-08-18
    有用
    回复 1
    • 新しい世界
      新しい世界
      2020-08-20
      不是的,两次请求是不同的 code
      2020-08-20
      回复
登录 后发表内容
问题标签