CHENAF
CHENAF
  • 发布:2022-12-20 17:30
  • 更新:2022-12-23 14:17
  • 阅读:378

unicloud开发微信公众号如何放回XML格式?

分类:uniCloud

如题,想要开发被动回复用户消息的功能,也响应了xml的格式,但是公众号依旧是显示服务故障,想问一下大家有没有这方面的例子可以参考指教一番。

2022-12-20 17:30 负责人:无 分享
已邀请:
呆狗的一生

呆狗的一生 - 呆狗的一生

以前做过。在开发自己的后台之前的准备工作是设置好公众号里的设置,比如开发者接口(例如:www.abcd.com/reply),和用于信息加密的我的token,详细信息,查看官方文档,点击查看接入指南

根据微信开放平台的说明文档得知:
在自己的服务器,/reply接口,要有一个get和一个post接口,get接口用于信息验证(目的是验证咱们的服务器收到的信息是否是来自微信官方服务器),如果咱们验证成功,就返回微信给我们传的来的echostr字符串。而post接口用于接收信息(就是你图中发的这个1),微信给咱们传过来的是xml数据,服务器收到你发的这个1之后,处理数据后,返回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

CHENAF

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>'  
        }  
    }  
};
  • 呆狗的一生

    你注释掉的那一段就是get方法的。要写出来

    2022-12-23 19:47

  • CHENAF (作者)

    回复 呆狗的一生: 对头,好像只有添加URL的时候有用到,后面好像都没用到了,所以我就给注释掉了

    2022-12-26 14:01

要回复问题请先登录注册