Egg.js (四) httpclient模块的使用 微信小程序获取用户openid

以前的文章中写过微信小程序获取用户openid的。《微信小程序开发(四)获取用户openid》。当时的后端框架用的是Express,请求工具用的request。这次还是同样的主题,只是后端框架使用的Egg.js,请求工具用的自带的httpclient模块。
业务流程上没什么差异,这里也不做两个框架和模块的差异对比,只是以一个实际的场景使用来展示。
httpclient模块介绍
小程序开发文档
先仔细看看文档。

后端代码

'use strict';

const Controller = require('egg').Controller;

// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
const wxConfig = {
  appid: 'wx******************8',
  appSecret: '91*******************f'
}

class WxMinniController extends Controller {
  // 获取用户openid
  // 通过 wx.login 接口获得临时登录凭证 code 后传到开发者服务器调用此接口完成登录流程
  async openid() {
    const { ctx } = this;
    const urlStr = 'https://api.weixin.qq.com/sns/jscode2session'
    const data = {
      appid: wxConfig.appid,           // 小程序 appId
      secret: wxConfig.appSecret,      // 小程序 appSecret
      js_code: ctx.query.code,         // 登录时获取的 code
      grant_type: 'authorization_code' // 授权类型,此处只需填写 authorization_code
    }
    const result = await ctx.curl(urlStr, {
      data: data,
      dataType: 'json',
    });
    if(result.data.errmsg){
      ctx.body = {
        status: 101,
        msg: '操作失败',
        errcode: result.data.errcode,
        errmsg: result.data.errmsg
      };
      /*
        errcode: 40163
        errmsg: "code been used, hints: [ req_id: NfjCxzNre- ]"
        msg: "操作失败"
        status: 101
       */
    }else{
      ctx.body = {
        status: 100,
        msg: '操作成功',
        openid: result.data.openid,
        session_key: result.data.session_key
      };
      /*
        msg: "操作成功"
        openid: "oC4Dk5NfT-I-joYZGQSPHOpD2PYQ"
        session_key: "Qheu52JzXVhZuAK372micw=="
        status: 100
      */
    }
  }
}
module.exports = WxMinniController;

小程序端

wx.login({
    success (res) {
      wx.request({
        url: 'http://localhost:7001/wxmini/openid', 
        data: {
          // code: res.code
          code: '021J2usK0lrC0a2t5vrK0aMCsK0J2usw'
        },
        success (res) {
          console.log('openid = ', res.data.openid)
        }
      })
    },
    fail (err){

    }
  })

总结

这里只是httpclient模块的一个简单使用,没什么还说的,看文档什么都会了。
关于微信获取openid,做过微信JSSDK和APP的SDK的都知道,其实都是一个流程。
这里就是以一个实际的场景来简单使用下httpclient模块。

你可能感兴趣的:(Egg.js学习记录,openid,微信小程序,eggjs)