wpayment
1.0.0
零費率零風險:基於wechaty + 讚賞碼的微信免簽支付方案?
眾所周知,接入微信支付接口需要商家資質,過程中有嚴格的審核,還需要繳納一定的審核費用;審核通過後,微信也會對每筆交易收取一定的手續費. 即使使用其他平台的免簽支付,也要繳納相關費用,且資金安全得不到保證. 而現有的開源免簽支付也都是用監控手機端微信通知來實現的,對設備要求高且容易引起風控.這些解決方案都不適用於個人開發者和較小規模的網站.
於是,WPayment 應運而生. 它基於知名的wechaty SDK 監聽微信訊息,而利用讚賞碼這一機制實現收款. 讚賞碼可以任選金額和自定義備註,這可以方便地用於任意指定小額(單筆讚賞的金額不能超過200 元)訂單的支付,且不需要利用金額來區分不同的用戶. 同時,讚賞碼設定上就是用於接收來自全國各地網友的讚賞的,所以不像收款碼那樣容易被風控.
使用npm 安裝:
npm install --save wpayment
基本的使用流程為:
WPayment
對象,呼叫login()
方法取得微信登入鏈接,請自行轉換為二維碼後用收款者的微信登入;createOrder()
方法建立訂單,並記下傳回的Order
物件的verifyCode
屬性(一個四位數字);verifyCode
,然後支付.createOrder()
方法參數中的onPaid()
回呼將會被呼叫.另外,考慮到用戶誤操作的情況(如忘記輸錯金額、輸錯verifyCode
、訂單超時才後才支付), WPayment
對象還提供了queryOrder
方法,確保可透過付款者微信暱稱、付款金額、微信轉帳單號等方式查詢訂單資訊. 更詳細的使用說明,請參閱/docs/document.md
.
一個簡單的Demo 如下:
const WPayment = require ( 'wpayment' ) . default ;
const qrcode = require ( 'qrcode' ) ;
let intervalID , timeLeft = 300 ;
const payment = new WPayment ( ) ;
payment . login ( ( linkGetter ) => {
// 登录请求回调
const link = linkGetter ( ) ;
qrcode . toString ( link , { type : 'terminal' } , ( error , result ) => {
if ( error ) {
console . log ( error ) ;
return ;
}
console . clear ( ) ;
console . log ( '请扫描二维码登录微信:' , 'n' ) ;
console . log ( result ) ;
} )
} , ( nickname ) => {
// 登录成功回调
console . clear ( ) ;
console . log ( nickname , '已登录' ) ;
const order = payment . createOrder ( '0.02' , ( orderID ) => {
// 订单支付成功回调
clearInterval ( intervalID ) ;
console . log ( 'n订单 ' + orderID + ' 已支付!' ) ;
console . log ( '支付人微信昵称:' , order . payer ) ;
console . log ( '支付时间:' , order . paidTime . toLocaleString ( ) ) ;
console . log ( '微信订单号:' , order . transID ) ;
} , ( error ) => {
// 订单支付失败(系统错误、主动取消或订单超时未支付)回调
console . log ( error ) ;
clearInterval ( intervalID ) ;
} , 300 ) ;
intervalID = setInterval ( ( ) => {
timeLeft -= 1 ;
if ( timeLeft <= 0 ) {
clearInterval ( intervalID ) ;
return ;
}
console . clear ( ) ;
console . log ( '创建了一笔新订单,金额 0.02 元,动态码为 ' + order . verifyCode ) ;
console . log ( '请在' , timeLeft , '秒内完成支付' ) ;
} , 1000 ) ;
} , ( error ) => {
// 登录失败回调
console . log ( error ) ;
} ) ;
本項目完全免費,僅供教育與學習,不得用於任何違法目的.