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回调地址请求不通过