unicloud开发企业微信时配置审批应用或自建应用的回调时报错“openapi回调地址请求不通过”

1.第一步,先配置下云函数的url化,原因是回调url必须和企业主体域名有关联关系

 

 2.第二步写云函数,我这里使用uni-cloud-router,进行云函数开发,签名工具使用官方的@wecom/crypto,自行安装即可地址https://www.npmjs.com/package/@wecom/crypto?activeTab=dependencies

// 监听企业微信审批应用的消息
const {Service} = require('uni-cloud-router')
let uniID = require('uni-id-common');
let lizhao = require('lz-unicloud');
const db = uniCloud.database();
const dbCommand = db.command;
const {callback} = require('../config.js');
module.exports = class ReceiveMsgService extends Service {
    //开启消息监听
    async open() {
        let {context,params}={...this.ctx,...this.ctx.event}
        //获取到企业审批应用传递的验证消息
        let wxData=this.ctx.event.queryStringParameters
        // 第一步进行签名验证
        //获取消息体签名
        const signature =lizhao.wxCrypto.getSignature(callback.Token,wxData.timestamp, wxData.nonce, wxData.echostr);
        // 对比从URL得到的签名,发现两者一致,签名通过,说明没被篡改,是安全的
        if(signature!=wxData.msg_signature){
            console.log('签名不通过');
            return '签名不通过'
        }
        console.log('签名通过');
        //第二步解密消息体
        const { message, id } = lizhao.wxCrypto.decrypt(callback.EncodingAESKey, wxData.echostr);
        
        //这是最关键的一步,否则出现 “openapi回调地址请求不通过” 的错误
        this.ctx.headers = {
            'content-type': 'text/html; charset=utf-8'
        }
        return message
        
    }
    
    
}

3.这里注意的是需要设置this.ctx.headers,否则会报错 openapi回调地址请求不通过

 

posted @ 2022-08-22 17:17  奔跑吧前端(李钊)  阅读(2002)  评论(0编辑  收藏  举报