微信支付apiv3 for nodejs

先貼出github鏈接 完整代碼點(diǎn)此進(jìn)入 https://github.com/yangfuhe/node-wxpay

功能概述

  • 完成模塊 jsapi,native,h5,app統(tǒng)一下單,付款交易查詢,退款,退款交易查詢,解密通知參數(shù),公鑰獲取,驗(yàn)證簽名,交易賬單,資金賬單,下載賬單

  • 支付模式支持 付款碼/公眾號(hào)/小程序/APP/H5/掃碼支付

使用前必讀

版本要求

nodejs >= 8.3.0

安裝


npm i wxpay-v3 --save

# 如已安裝舊版, 重新安裝最新版

npm i wxpay-v3@latest

實(shí)例化


const Payment = require('wxpay-v3');

const paymnet = new Payment({

    appid: '公眾號(hào)ID',

    mchid: '微信商戶號(hào)',

    private_key: require('fs').readFileSync('*_key.pem證書文件路徑').toString(),//或者直接復(fù)制證書文件內(nèi)容

    serial_no:'證書序列號(hào)',

    apiv3_private_key:'api v3密鑰',

    notify_url: '支付退款結(jié)果通知的回調(diào)地址',

})

config說明:

  • appid - 公眾號(hào)ID(必填)

  • mchid - 微信商戶號(hào)(必填)

  • private_key - 商戶API證書*_key.pem中內(nèi)容 可在微信支付平臺(tái)獲取(必填, 在微信商戶管理界面獲取)

  • serial_no - 證書序列號(hào)(必填, 證書序列號(hào),可在微信支付平臺(tái)獲取 也可以通過此命令獲取(*_cert.pem為你的證書文件) openssl x509 -in *_cert.pem -noout -serial )

  • apiv3_private_key - apiv3密鑰 在創(chuàng)建實(shí)例時(shí)通過apiv3密鑰會(huì)自動(dòng)獲取平臺(tái)證書的公鑰,以便于驗(yàn)證簽名(必填)

  • notify_url - 支付退款結(jié)果通知的回調(diào)地址(選填)

    • 可以在初始化的時(shí)候傳入設(shè)為默認(rèn)值, 不傳則需在調(diào)用相關(guān)API時(shí)傳入

    • 調(diào)用相關(guān)API時(shí)傳入新值則使用新值

jsapi統(tǒng)一下單


let result = await payment.jsapi({

    description:'點(diǎn)存云-測(cè)試支付',

    out_trade_no:Date.now().toString(),

    amount:{

        total:1

    },

    payer:{

        openid:'ouEJk65CZr8_7eb95RIPDNWZKrvI'

    },

})

console.log(result)

app統(tǒng)一下單


let result = await payment.app({

    description:'點(diǎn)存云-測(cè)試支付',

    out_trade_no:Date.now().toString(),

    amount:{

        total:1

    }

})

console.log(result)

h5統(tǒng)一下單


let result = await payment.h5({

    description:'點(diǎn)存云-測(cè)試支付',

    out_trade_no:Date.now().toString(),

    amount:{

        total:1

    },

    scene_info:{

        payer_client_ip:'203.205.219.187'

    }

})

console.log(result)

native統(tǒng)一下單


let result = await payment.native({

    description:'點(diǎn)存云-測(cè)試支付',

    out_trade_no:Date.now().toString(),

    amount:{

        total:1

    }

})

console.log(result)

通過transaction_id查詢訂單


let result = await payment.getTransactionsById({

    transaction_id:'4200000928202103013162567337'

})

console.log(result)

通過out_trade_no查詢訂單


let result = await payment.getTransactionsByOutTradeNo({

    out_trade_no:'1614602083807'

})

console.log(result)

關(guān)閉訂單


let result = await payment.close({

    out_trade_no:'1614602083807'

})

console.log(result)

退款


let result = await payment.refund({

    transaction_id:'4200000902202103026804947229',

    //out_trade_no:'1614602083807',

    out_refund_no:Date.now().toString(),

    amount:{

        refund:1,

        total:1,

        currency:'CNY'

    }

})

console.log(result)

查詢單筆退款訂單


let result = await payment.getRefund({

    out_refund_no:'1614757507992',

})

console.log(result)

獲取平臺(tái)證書列表


let result = await payment.getCertificates()

console.log(result)

解密支付退款通知參數(shù)


let result = await payment.decodeParams({

    "original_type":"refund",

    "algorithm":"AEAD_AES_256_GCM",

    "ciphertext":"d2Zi2VToOGXqB3K6bgQaFKktgA3AHm+cJg0vGZPcD22OUZ+CBymtrFJsFtaKKEwebSDN8Habic7NJVpKJpAxZd8ejm32v4UePg139/gj+X7vJtqB39ZkjZXLH973LT5R5yZQ351R3onlpx9JILN2+FNEbrUNenjgEufuQn45b9jwGSBX/sU6n/+gsCdt8+sSkbMy37sSX1bjMicHzte27fR0QSuO1TDjZjjDqP2ou0j7Jb+x9RRtWlbZ1hOYe7AhSTFzOXvkdCq0M6P6ja1cc2olV9xG8UzKxZN0JLnoqIGWwPzTVOPqmt/N3/MrzCK3TT1mNagBnhqEvSXhL9KUjpAIY8J6tkjfoG+9QwnJA8kW48C3nGsgePvNYvikJooQii7rx78Y2paR7cS8Pn8+sxKg4q91DiovBSdW2/ePDruI6SH/FWFrPmLQCG11fCjz/C9o6bqjaSsHKMaSVSAW9e/et04MP6GcZIDweG5AN9FgOXMI",

    "associated_data":"refund",

    "nonce":"AqfRSFm7h9Sa"

})

console.log(result)

驗(yàn)證簽名


setTimeout(async ()=>{

    //timestamp,nonce,serial,signature均在HTTP頭中獲取,body為請(qǐng)求參數(shù)

    let result = await payment.verifySign({

        timestamp:'1614829763',

        nonce:'Eeumuhd3zA5TirWeJUCLCpkENYM8PSUA',

        serial:'3DEA336346E96C002B7B0D514D424C8DEDBF9145',

        signature:'ame3lX1y6FeXrlBN973M1Dhg5n77M1wVsD3VgeyZlb8c3dz/hpQ+9vNOMBBHGdv8kDIfZUxKDdfoeUaVJhfqAEn9ZV4x112ntEzCHpJtIXQ3rr8fScY7cO71EN/QyQHtY1Ovt8U2Yr891iYaLujUrBHtWrhiR6UKecRA+/RgsUBYh4D10rrqW5ywNrLVN+PSuG4QB85bz3jSslMvRrSG7HP/Xwo3e2sWMDuQ2Uadefu+8/FK1P3KDLDO2fq5teSaaqs7oof2WpV6zrVtyQ+P4p5t8NJ0ExlOSAs2xGJ0+xi+U996tq3VYZXf/4nVsfGW9rn0m/mOrYTmiST9PF+q1g==',

        body:'{"id":"3b66121d-c9b9-5d61-9d92-eeec248e993d","create_time":"2021-03-04T11:49:23+08:00","resource_type":"encrypt-resource","event_type":"TRANSACTION.SUCCESS","summary":"支付成功","resource":{"original_type":"transaction","algorithm":"AEAD_AES_256_GCM","ciphertext":"PB305U6jR6TN8mBzbzGts5TaKnDXQt/7C+uJpGnvOT1SyCvI18L4f42eTZtrZv+5XUdOkxwEHGWDVl2MwbvpgLjLdjyisaHc+uRQCDoYlusiaeDJzd515Rl36nqmdPD8xFKZahWZBBkAlCgXLuW3qcdxSISTk/pyqPziwUtFKfMeq3LEEm4z8DfBM9cVXJrN8EiY2WaQsm+lGnZAV4+pxCELj67xmccXs3JgJwHSKE4exqW919atQWTwJHzuP3WNd+Xvp0zwm9RtDPTvZ8egehqqBw+DARC5jg8MmDtlMR2sTgH2xq6b4+QqLXPPIooOyvEZKMOteSI4FmSfPNwDfZ26D4ga9yGRIxSQKkWDq3QRNhOzvmSkCax08t2hdq12NxBSE9y7aZkjKIr4/uMEtKDU/3wcSoVKlawfN1hlCKo2nWbdKH1avRvc6FAFxXHtXRw0Y0MRnSk8gPMF/T+QqEMRJniXbrylt21xR0AEKbIVk0xK9jvhXex0AvST4x3eKM0r4DXkmL/pCjo1XmZLZIMc2uJ1jJEyqWcURXirrxADCATIAEWOu1hNL6PE","associated_data":"transaction","nonce":"KcsMoPx5UW1i"}}'

    })

    console.log(result)

},2000)

申請(qǐng)交易賬單


let result = await payment.tradebill({

    bill_date:'2021-03-03'

})

console.log(result)

申請(qǐng)資金賬單


let result = await payment.fundflowbill({

    bill_date:'2021-03-03'

})

console.log(result)

下載賬單


let result = await payment.downloadbill('https://api.mch.weixin.qq.com/v3/billdownload/file?token=ktWgOuBvGNvmCk0NaOTMF41tG3yWsZrdM4zdgl10r1GRRNo4tG5V9mPi04ku-PY8&tartype=gzip')

console.log(result)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容