微信公众号常用代码
在微信公众号开发中,常用的代码主要是基于微信公众平台提供的开发接口,使用的编程语言通常是基于微信官方支持的语言,如JavaScript、Java、Python等。
接入微信公众平台:
在公众号后台配置服务器地址,接收微信服务器的验证请求。
Node.js示例:
javascriptconst express = require('express');
const crypto = require('crypto');
const app = express();
const token = 'your_token'; // 与微信后台配置的Token一致
app.get('/wechat', (req, res) => {
const { signature, timestamp, nonce, echostr } = req.query;
const sha1 = crypto.createHash('sha1').update([token, timestamp, nonce].sort().join('')).digest('hex');
if (sha1 === signature) {
res.send(echostr);
} else {
res.status(401).send('Invalid signature');
}
});
const port = 3000;
app.listen(port, () => {
console.log(`Server is running on port ${port}`);
});
接收用户消息:
处理用户发送过来的文本、图片、语音等消息。
Node.js 示例:
javascriptapp.post('/wechat', (req, res) => {
const { xml } = req.body;
const messageType = xml.MsgType[0];
if (messageType === 'text') {
// 处理文本消息
const content = xml.Content[0];
// 进行相应的业务逻辑处理
} else if (messageType === 'image') {
// 处理图片消息
// ...
}
// 返回空字符串,微信服务器不会报错
res.send('');
});
发送客服消息:
主动向用户发送文本、图文等消息。
Node.js 示例:
javascriptconst axios = require('axios');
const accessToken = 'your_access_token'; // 通过接口获取
const sendTextMessage = (openId, content) => {
const url = `https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=${accessToken}`;
const data = {
touser: openId,
msgtype: 'text',
text: {
content: content,
},
};
axios.post(url, data)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
};
// 调用发送文本消息的函数
sendTextMessage('user_open_id', 'Hello, this is a text message.');
获取用户信息:
获取用户的基本信息,如昵称、头像等。
Node.js 示例:
javascriptconst getUserInfo = (openId) => {
const url = `https://api.weixin.qq.com/cgi-bin/user/info?access_token=${accessToken}&openid=${openId}&lang=zh_CN`;
axios.get(url)
.then(response => {
const userInfo = response.data;
console.log(userInfo);
})
.catch(error => {
console.error(error);
});
};
// 调用获取用户信息的函数
getUserInfo('user_open_id');
接入验证:
在接入微信公众号开发时,需要进行服务器配置,验证服务器有效性。
javascriptconst express = require('express');
const app = express();
app.use(express.urlencoded({ extended: true }));
app.get('/wechat', (req, res) => {
const { signature, timestamp, nonce, echostr } = req.query;
const token = 'your_token'; // 替换为在公众号平台设置的Token
const sha1 = require('sha1');
const signatureCheck = sha1([token, timestamp, nonce].sort().join(''));
if (signatureCheck === signature) {
res.send(echostr);
} else {
res.send('Invalid signature');
}
});
app.listen(80, () => {
console.log('Server is running on port 80');
});
获取用户信息:
使用微信网页授权获取用户基本信息。
javascriptconst request = require('request');
const appId = 'your_app_id'; // 替换为公众号的AppID
const appSecret = 'your_app_secret'; // 替换为公众号的AppSecret
const getCodeUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect`;
// 用户同意授权后,会跳转到redirect_uri/?code=CODE&state=STATE
const code = 'user_code'; // 从上述跳转后的URL中获取code参数
const getUserInfoUrl = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appId}&secret=${appSecret}&code=${code}&grant_type=authorization_code`;
request.get(getUserInfoUrl, (error, response, body) => {
const accessTokenInfo = JSON.parse(body);
// 获取用户信息
const getUserInfoUrl = `https://api.weixin.qq.com/sns/userinfo?access_token=${accessTokenInfo.access_token}&openid=${accessTokenInfo.openid}&lang=zh_CN`;
request.get(getUserInfoUrl, (error, response, body) => {
const userInfo = JSON.parse(body);
console.log(userInfo);
});
});
发送文本消息:
通过公众号发送文本消息给用户:
javascriptconst axios = require('axios');
const accessToken = 'your_access_token'; // 替换为获取到的AccessToken
const sendTextMessage = (openid, content) => {
const apiUrl = `https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=${accessToken}`;
const postData = {
touser: openid,
msgtype: 'text',
text: {
content: content
}
};
axios.post(apiUrl, postData)
.then(response => {
console.log(response.data);
})
.catch(error => {
console.error(error);
});
};
// 调用发送文本消息函数
const userOpenid = 'user_openid'; // 替换为实际用户的OpenID
const messageContent = 'Hello, this is a text message!';
sendTextMessage(userOpenid, messageContent);