微信支付apiv3 for nodejs

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

功能概述

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

  • 支付模式支持 付款碼/公眾號/小程序/APP/H5/掃碼支付

使用前必讀

版本要求

nodejs >= 8.3.0

安裝


npm i wxpay-v3 --save

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

npm i wxpay-v3@latest

實例化


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

const paymnet = new Payment({

    appid: '公眾號ID',

    mchid: '微信商戶號',

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

    serial_no:'證書序列號',

    apiv3_private_key:'api v3密鑰',

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

})

config說明:

  • appid - 公眾號ID(必填)

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

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

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

  • apiv3_private_key - apiv3密鑰 在創(chuàng)建實例時通過apiv3密鑰會自動獲取平臺證書的公鑰,以便于驗證簽名(必填)

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

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

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

jsapi統(tǒng)一下單


let result = await payment.jsapi({

    description:'點存云-測試支付',

    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:'點存云-測試支付',

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

    amount:{

        total:1

    }

})

console.log(result)

h5統(tǒng)一下單


let result = await payment.h5({

    description:'點存云-測試支付',

    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:'點存云-測試支付',

    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)

獲取平臺證書列表


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)

驗證簽名


setTimeout(async ()=>{

    //timestamp,nonce,serial,signature均在HTTP頭中獲取抢野,body為請求參數(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)

申請交易賬單


let result = await payment.tradebill({

    bill_date:'2021-03-03'

})

console.log(result)

申請資金賬單


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)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡钱反,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門殿遂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來诈铛,“玉大人,你說我怎么就攤上這事墨礁〈敝瘢” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵恩静,是天一觀的道長焕毫。 經(jīng)常有香客問我,道長驶乾,這世上最難降的妖魔是什么邑飒? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮级乐,結(jié)果婚禮上疙咸,老公的妹妹穿的比我還像新娘。我一直安慰自己风科,他們只是感情好撒轮,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布乞旦。 她就那樣靜靜地躺著,像睡著了一般题山。 火紅的嫁衣襯著肌膚如雪兰粉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天顶瞳,我揣著相機(jī)與錄音玖姑,去河邊找鬼。 笑死慨菱,一個胖子當(dāng)著我的面吹牛焰络,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抡柿,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼舔琅,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了洲劣?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤课蔬,失蹤者是張志新(化名)和其女友劉穎囱稽,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體二跋,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡战惊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了扎即。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吞获。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谚鄙,靈堂內(nèi)的尸體忽然破棺而出各拷,到底是詐尸還是另有隱情,我是刑警寧澤闷营,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布烤黍,位于F島的核電站,受9級特大地震影響傻盟,放射性物質(zhì)發(fā)生泄漏速蕊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一娘赴、第九天 我趴在偏房一處隱蔽的房頂上張望规哲。 院中可真熱鬧,春花似錦诽表、人聲如沸唉锌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽糊秆。三九已至武福,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痘番,已是汗流浹背捉片。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留汞舱,地道東北人伍纫。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像昂芜,于是被迫代替她去往敵國和親莹规。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容