Skip to main content

服务器回调

服务器配置认证

在公众号控制台开启服务器配置功能时,微信服务器会以 GET 请求的方式调用填写的 URL 地址,里面会有一些参数,将这些参数进行一定的签名运算,并与签名值进行比较,成功后需返回给微信服务器 echostr 内容。

微信服务器签名校验功能封装于 OfficialAuthService 类中,可通过如下方式引入:

import { OfficialAuthService } from '@iot9x.com/nestjs-official'

签名校验方式为:

/**
* 微信调用第三方服务器签名认证
* @param appid 公众号appID
* @param timestamp 时间戳
* @param nonce 随机字符串
* @param signature 签名信息
* @returns 签名校验结果
*/
async serverValidate(appid: string, timestamp: string, nonce: string, signature: string): Promise<ServerValidateResponse> {}

完整示例:

import { OfficialAuthService, OfficialServerAuthReqDto } from '@iot9x.com/nestjs-official';

@ApiTags('official')
@Controller('official')
export class OfficialController {
constructor(private readonly officialAuthService: OfficialAuthService){}

/**
* 服务器认证
* @description 微信公众号服务器调用,验证第三方服务器合法
* @returns 返回消息体中的echostr字段
*/
@Get('callback/:appid')
async officialAuth(@Param() { appid }: OfficialAppIdReqDto, @Query() query: OfficialServerAuthReqDto): Promise<string> {
const { success, data } = await this.officialAuthService.serverValidate(appid, query.timestamp, query.nonce, query.signature);

return success && data ? query.echostr : 'mismatch';
}
}

服务器回调信息处理

如果进行了服务器配置,那么用户所有对于公众号的操作,微信服务器均会以 POST 的方式往配置的 URL 上推送消息,当然,推送的是 XML 格式的消息,这里需要配置我们的应用,让它支持 XML 传参,具体配置方法转至Megrez wiki