nestjs 使用微信扫码支付 notify_url 回调处理 xml

xml 是作为一种比较老的 数据传输手段,大部分都是传递 jsonformbuffer的,现代框架也都是支持这三种数据格式的,都不会自带 xml 格式。

在做微信扫码支付的时候,当支付成功了微信会给你发送 post 请求,这个时候处理请求就会发现 body = {} + query = {} + params = {},这个时候我的内心是崩溃的,啥参数也没有。

查找了很多资料,都说参数就在 body 体内,可是我的 body 是一个空对象,最后参考了express 框架和一些其他的资料,终于决定通过两个依赖来解决这个问题。

最终操作:

yarn add body-parser body-parser-xml

安装完成依赖后修改入口文件 main.ts

import {
    
     NestFactory } from '@nestjs/core';
import {
    
     AppModule } from './app.module';
const bodyParser = require('body-parser');
require('body-parser-xml')(bodyParser);
(async () => {
    
    
  const app = await NestFactory.create(AppModule);
  app.use(bodyParser.xml());
  await app.listen(9999);
})();

然后这个时候在进行一次支付,支付完成后微信请求过来的数据 body 体内就有一个 xml 对象,剩下的只需要把这个对象进行处理就好了,如:

@Post('bondPay/wechat')
async bondPayWechat(@Req() req): Promise<any> {
    
    
    const {
    
     xml } = req.body;
    const data: any = {
    
    };
    for(const item in xml) {
    
    
        data[item] = xml[item][0];
    }
    console.log(data)
}

最终终端打印结果为:
在这里插入图片描述
最终大功告成!很多人写这种东西都需要 线上地址 进行测试,但是我来悄悄咪咪的告诉大家有一种工具叫做 内网穿透工具 可以直接进行本地开发测试,指定端口就 ok 了!

猜你喜欢

转载自blog.csdn.net/weixin_43704471/article/details/103593479