服务器回调
服务器配置认证
在公众号控制台开启服务器配置功能时,微信服务器会以 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