以前的文章中写过微信小程序获取用户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模块。