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 了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章