如题,想要开发被动回复用户消息的功能,也响应了xml的格式,但是公众号依旧是显示服务故障,想问一下大家有没有这方面的例子可以参考指教一番。
- 发布:2022-12-20 17:30
- 更新:2022-12-23 14:17
- 阅读:378
呆狗的一生 - 呆狗的一生
以前做过。在开发自己的后台之前的准备工作是设置好公众号里的设置,比如开发者接口(例如:www.abcd.com/reply),和用于信息加密的我的token
,详细信息,查看官方文档,点击查看接入指南。
根据微信开放平台的说明文档
得知:
在自己的服务器,/reply
接口,要有一个get和一个post接口,get接口用于信息验证(目的是验证咱们的服务器收到的信息是否是来自微信官方服务器),如果咱们验证成功,就返回微信给我们传的来的echostr
字符串。而post接口用于接收信息(就是你图中发的这个1),微信给咱们传过来的是xml数据,服务器收到你发的这个1之后,处理数据后,返回xml数据,就行了。
CHENAF (作者) - 世人慌慌张张,不过是图碎银几两,偏偏这碎银几两,能解世间万种慌张。
'use strict';
const sha1 = require('sha1');
const xml2js= require('xml2js');
const wxToken = '';//公众号配置的token
exports.main = async (event, context) => {
const {
httpMethod,
queryStringParameters,
body
} = event;
const {
signature,
timestamp,
nonce,
echostr
} = queryStringParameters;
// const mySignature = sha1([wxToken, timestamp, nonce].sort().join(''));
// if (mySignature === signature) {
// return echostr
// } else {
// return false
// }
const requestBody = await xml2js.parseStringPromise(body, {
explicitArray: false
});
const {
ToUserName,
FromUserName,
MsgType,
Content
} = requestBody.xml;
if (MsgType === 'text') {
// 文本消息
return {
mpserverlessComposedResponse: true, // 使用阿里云返回集成响应是需要此字段为true
statusCode: 200,
headers: {
'content-type': 'text/html'
},
body: '<xml>' +
'<ToUserName><![CDATA[' + FromUserName + ']]></ToUserName>' +
'<FromUserName><![CDATA[' + ToUserName + ']]></FromUserName>' +
'<CreateTime>' + parseInt(new Date().valueOf() / 1000) + '</CreateTime>' +
'<MsgType><![CDATA[text]]></MsgType>' +
'<Content><![CDATA[回复文本消息]]></Content>' +
'</xml>'
}
}
};
CHENAF (作者)
您好,大佬,您的意思是不是微信服务器会请求/reply接口两次,一次是get请求一次是post请求,然后我们通过云函数event对象中的请求方式,如果是get请求则返回echostr字符串,如果是post请求则返回xml数据对吧
2022-12-21 18:50
呆狗的一生
回复 CHENAF: 对的,你是怎么做的?
2022-12-23 00:47
CHENAF (作者)
回复 呆狗的一生: 弄出来了,代码放评论里面,害,官方文档写的不清楚
2022-12-23 14:19