微信支付封裝成npm 包

w-klover發表於2020-12-21

node-wxpay3

node-wxpay3

(支付文件v2)
普通商戶接入文件

前言

本模組整合了大部分微信支付、提現等模組的介面,採用async、await的方式呼叫,使用者不用在考慮引數加密傳送,祕鑰傳送方式、xml怎麼解析、json怎麼轉成xml等一系列麻煩事。

安裝

npm i node-wxpay3 --save

版本介紹

本版本是2.*.*相對於舊版本1.*.*做了大的變更,本外掛改用typescript重寫,合併了舊的介面方法。支援requireimport兩種方法匯入。

使用

const WxPay = require('node-wxpay3'); 或者 import WxPay from 'node-wxpay3'

// https://api.mch.weixin.qq.com/pay/unifiedorder
const wxpay = new Wxpay({
  appid: '',
  mch_id: '',
  key: '',
  pfx: fs.readFileSync('./apiclient_cert.p12'),
});
const options = {
    body: '測試',
    out_trade_no: '23214234, 
    total_fee: 1,
    spbill_create_ip: 'ip',
    notify_url: 'https://域名/gateway/boboteacher/student/order/_payReturnss', //自己的介面
    trade_type: 'MWEB',
    scene_info: JSON.stringify({
      h5_info: {
        type: 'Wap',
        wap_url: 'https://域名',
        wap_name: 'bobo',
      },
    }),
    redirect_url: 'https://域名/webpage/api/index.html#/', // 支付成功 返回頁面 h5支付需要
  };
  const result = await wxpay.unifiedorder(options);

其他介面和微信文件路徑同名 同上一樣使用

額外增加的介面:

  1. md5 引數object
wxpay.md5({
 body: '測試',
 out_trade_no: '23214234, 
 })
  1. hmac 引數object 使用同上
  2. xmltojson 引數string xml 轉json 暴露給外部呼叫 使用同上
  3. callback_check 支付回撥驗證 引數object 返回boolean koa

  // 微信返回的資料是text/xml的資料流格式 
  // 接收資料流並且處理
  ctx.req.setEncoding('utf8');
  ctx.req.on('data', function(chunk) {
      data += chunk;
  });
  // getxml 就是xml形式的資料
  const getxml = await new Promise(function(resolve) {
        ctx.req.on('end', function() {
                resolve(data);
        });
  });

  // 呼叫wxpay.xmltojson(getxml) 獲得的引數就是data
  let data = wxpay.xmltojson(getxml)
  let result = wxpay.callback_check(data)
====》 result = true 則校驗成功
ctx.type = 'application/xml';
ctx.body =
            `<xml>
                <return_code><![CDATA[SUCCESS]]></return_code>
                <return_msg><![CDATA[OK]]></return_msg>
            </xml>`;
            return; d
  1. publicEncrypt 公鑰加密
wxpay.publicEncrypt(publicKey, data)

其他

如果使用的是1.*.* 請看文件

相關文章