那么让我们来详细讲解一下“Node.js微信开发之授权登录+获取用户信息”的完整攻略。
准备工作
在开始正式的开发之前,我们需要准备以下几项:
1. 注册开发者账号
首先我们需要注册一个微信开发者账号,这个账号可以在微信公众平台申请。注册完成之后,我们需要在后台创建一个新的公众号应用,在创建应用的过程中,我们需要在基本配置选项卡中设置好服务器的回调地址。
2. 安装Node.js
我们需要安装Node.js,因为本次开发是基于Node.js的。如果你还没有安装Node.js,可以在Node.js的官方网站上下载并安装最新版的Node.js。
3. 安装必要的模块
在本次开发过程中,我们需要用到以下几个模块:
express
:用于构建Web应用程序的框架;request
:用于向第三方服务器发送HTTP请求的模块;xml2js
:用于将XML数据解析为JavaScript对象的模块。
在安装这些模块之前,我们需要通过命令行进入到项目的目录下:
cd <project-directory>
然后我们可以通过以下命令来安装这些模块:
npm install express request xml2js --save
授权登录
微信公众号的授权登录流程主要分为以下几步:
1. 准备授权链接
在用户点击授权登录按钮之后,我们需要向微信服务器发送一个授权请求,并将授权链接返回到前端页面,供用户点击。
授权链接的格式如下:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
其中 APPID
表示公众号的唯一标识,在创建应用时可以看到;REDIRECT_URI
表示重定向地址,即回调地址,需要在公众号的后台设置好;SCOPE
表示授权类型,有 snsapi_base
和 snsapi_userinfo
两种类型,分别代表静默授权和弹出授权页面;state
表示自定义参数,我们可以将一些需要传递给回调页面的参数放在这里。
以下是一个例子:
const redirectUri = encodeURIComponent('http://yourdomain.com/callback');
const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;
// 将 authUrl 返回给前端页面
2. 获取授权码
当用户点击授权链接之后,微信服务器会返回一个授权码 code
,我们需要将这个授权码保存下来。
app.get('/callback', (req, res) => {
const code = req.query.code;
// 将 code 保存下来
});
3. 获取access_token
接下来我们需要向微信服务器发送一个请求,获取 access_token
。access_token
是访问令牌,用于后续的微信接口调用。
访问令牌获取的链接如下:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APP_SECRET
其中 APPID
和 APP_SECRET
分别表示公众号的唯一标识和密钥。
以下是一个例子:
const APPID = 'your-appid';
const APP_SECRET = 'your-app-secret';
const getTokenUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APP_SECRET}`;
request(getTokenUrl, (err, res, body) => {
if (!err && res.statusCode === 200) {
const data = JSON.parse(body);
const accessToken = data.access_token;
// 将 accessToken 保存下来
} else {
console.error(err);
}
});
4. 获取用户信息
最后一步是获取用户信息,包括用户的openid、昵称、性别等。我们需要向微信服务器发送一个请求,获取这些信息。
获取用户信息的链接如下:
https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN
其中 ACCESS_TOKEN
表示访问令牌,OPENID
表示用户的唯一标识。
以下是一个例子:
const getuserinfoUrl = `https://api.weixin.qq.com/cgi-bin/user/info?access_token=${accessToken}&openid=${openid}&lang=zh_CN`;
request(getuserinfoUrl, (err, res, body) => {
if (!err && res.statusCode === 200) {
const data = JSON.parse(body);
const userInfo = {
openid: data.openid,
nickname: data.nickname,
sex: data.sex
// ...
};
// 将用户信息保存下来
} else {
console.error(err);
}
});
示例
这里提供一个完整的示例,代码已经经过简化,供大家参考。
const express = require('express');
const request = require('request');
const xml2js = require('xml2js');
const app = express();
const APPID = 'your-appid';
const APP_SECRET = 'your-app-secret';
// step 1: 准备授权链接
app.get('/auth', (req, res) => {
const redirectUri = encodeURIComponent('http://yourdomain.com/callback');
const authUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${APPID}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;
res.send(`<a href=${authUrl}>点击这里授权登录</a>`);
});
// step 2: 获取授权码
app.get('/callback', (req, res) => {
const code = req.query.code;
// 将 code 保存下来
// step 3: 获取access_token
const getTokenUrl = `https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=${APPID}&secret=${APP_SECRET}`;
request(getTokenUrl, (err, res, body) => {
if (!err && res.statusCode === 200) {
const data = JSON.parse(body);
const accessToken = data.access_token;
// 将 accessToken 保存下来
// step 4: 获取用户信息
const openid = 'your-openid';
const getuserinfoUrl = `https://api.weixin.qq.com/cgi-bin/user/info?access_token=${accessToken}&openid=${openid}&lang=zh_CN`;
request(getuserinfoUrl, (err, res, body) => {
if (!err && res.statusCode === 200) {
const data = JSON.parse(body);
const userInfo = {
openid: data.openid,
nickname: data.nickname,
sex: data.sex
// ...
};
// 将用户信息保存下来
res.send(`<p>授权登录成功!你的微信昵称为:${userInfo.nickname}</p>`);
} else {
console.error(err);
}
});
} else {
console.error(err);
}
});
});
app.listen(3000, () => {
console.log('listening on port 3000');
});
总结
至此,我们已经完成了“Node.js微信开发之授权登录+获取用户信息”的完整攻略。这里简要总结一下整个流程:
- 准备授权链接,供用户点击;
- 获取用户授权码;
- 使用授权码获取访问令牌
access_token
; - 使用
access_token
获取用户信息。
希望以上的介绍能够帮助你在Node.js中进行微信开发。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs微信开发之授权登录+获取用户信息 - Python技术站