小程序的四次元口袋:获取小程序用户openid(nodejs后端)

获取小程序用户openid(node.js后端)

 

需求分析:

openID和sessionKey作为小程序用户的唯一凭证,在微信支付和其他接口等都需要使用,还是很重要的。调用wx.login()获取登录凭证,利用code在后台换取openID和sessionKey,通过node.js的Express框架进行解决。

 

wx.login(Object object)

调用接口获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户的唯一标识(openid)及本次登录的会话密钥(session_key)等。用户数据的加解密通讯需要依赖会话密钥完成。

 

需求解决:

小程序前端代码:

// 获取用户的openid信息
  getOpenId(){
    wx.login({
      success: res => {
        console.log("login success res", res)
        // 发送 res.code 到后台换取 openId, sessionKey, unionId

        wx.request({
          url: app.data.requestHost + "/wxlogin",
          data: { code: res.code },
          method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
          header: {
            'content-type': 'application/x-www-form-urlencoded'
          },// 设置请求的 header
          success: function (res) {
            console.log('获取用户unionId', res);
          },
          fail: function () {
            console.log("index.js wx.request CheckCallUser fail");
          },
          complete: function () {

            // complete
          }
        })

      }
    })
   }

node后端代码:


var request = require("request");
const APP_ID = "wxxxxxxxxxxxxxxxxxxxx"  //开发者的appid
const APP_SECRET = "essssssssssssssssssssss"   //开发者的appsecret 登入小程序公共平台内查看


app.post("/wxlogin", async (req, res,next) => {
    console.log("从前台获取来的req.body", req.fields);
    // console.log(req);
    const code = req.fields.code;
    if (code) {
        // 根据code进行获取openid
        let options = {
            method: "POST",
            url: "https://api.weixin.qq.com/sns/jscode2session?",
            formData: {
            appid: APP_ID, //appid
            secret: APP_SECRET, //密钥,在小程序后台获取
            js_code: code, //用户code
            grant_type: "authorization_code",
            },
        };
        request(options, (error, response, body) => {
            if (error) {
            //请求异常时,返回错误信息
            res.json({
                status: "error",
            });
            } else {
            let _data = JSON.parse(body);
            res.json(_data);
            console.log("返回的用户id:", _data);
            }
        });
    }
    
}
)

问题解决,如果你觉得还可以,请一定记得 关注+点赞+收藏。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值