本次采用的是uniapp的云开发,使用这个的原因有:
1.免费,不需要服务器(香)
2.开发相对来说比较简单
怎么搭建环境就不多说了
这里使用的是云函数和云对象相结合进行开发,
因为这样比较简单方便切逻辑清晰
正式开始: 创建一个mess云函数内容如下
'use strict';
exports.main = async (event, context) => {
const config = {
token: 'nanmu'
}
// 定义云对象
const yun= uniCloud.importObject('wx_fun')
// 判断是否微信用户
let iswx= await yun.verify(config.token,event.queryStringParameters)
if(iswx){
// 验证是绑定还是回消息
if(event.body){
// 获取并且回复用户消息
let replyMessage= yun.message(event.body)
console.log(replyMessage);
return replyMessage
}else{
// 是微信用户返回echostr
return event.queryStringParameters.echostr
}
}
};
接下来是云对象wx_fun
//安装xml2js,用来把用户发过来的消息转成xml 安装命令:npm i xml2js
//提示用腾讯云的服务空间是不需要安装,直接使用,上传后,腾讯云会自动安装相关依赖,阿里云需要安装
const {parseString} = require("xml2js");
//微信官方文档要求,判断是否微信用户需要对响应字段进行sha1加密
//把sha1文件里面的代码粘贴进来,或者自己想其他办法加密,只要是sha1加密就行
//文件地址:https://vkceyugu.cdn.bspapp.com/VKCEYUGU-917b34d1-30f8-42a8-95e6-7b299abf7731/82989cc2-3641-4c85-af6e-d46e7a8dfdc8.js
// 用户信息转成xml
function parseXMLAsync(xmlData) {
return new Promise((resolve, reject) => {
parseString(xmlData, {
trim: true
}, (err, data) => {
if (!err) {
resolve(data);
} else {
reject("parseXMLAsync执行失败:" + err);
}
});
});
}
// 用户消息转成json,方便调用
function formatMessage(jsData) {
let message = {};
let xml = jsData.xml;
if (typeof xml === "object") {
for (let key in xml) {
let value = xml[key];
if (Array.isArray(value) && value.length > 0) {
message[key] = value[0];
}
}
}
return message;
}
//云对象主体部分
module.exports = {
// 验证是否微信用户
verify(token,par){
// 将token、timestamp、nonce三个参数进行字典序排序,
let arr = [par.timestamp, par.nonce, token]
let arrsort = arr.sort()
// 将三个参数字符串拼接成一个字符串进行sha1加密比较
if (par.signature == hex_sha1(arrsort.join(''))){
return true
}
},
async message(body){
// base64转字符串,获取用户消息,腾讯云需要转,阿里云不需要
let deCodeString = Buffer.from(body, 'base64').toString('utf-8');
let jsdata = await parseXMLAsync(deCodeString)
let userMessage = formatMessage(jsdata)
// 如果是文本消息就回复,这里用的是青客云的api(免费)
//青客云官网https://api.qingyunke.com/
if(userMessage.MsgType=="text"){
let jqr=await uniCloud.httpclient.request('http://api.qingyunke.com/api.php',{
method:'GET',
data:{
key:"free",
appid:0,
msg:userMessage.Content
},
dataType:'json'
})
return `<xml>
<ToUserName><![CDATA[${userMessage.FromUserName}]]></ToUserName>
<FromUserName><![CDATA[${userMessage.ToUserName}]]></FromUserName>
<CreateTime>${Date.now()}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[${jqr.data.content.replace(/{br}/g,'\n')}!]]></Content>
</xml>`
}
}
}
接着是把云函数url化,具体看uniapp文档:uniapp.dcloud.io/uniCloud/ht…
最后在公众后台配置这些就大功告成
效果图,支持查天气、歌词、成语,更多功能可以查看青客云官网介绍