wechatpay
1.0.0
O SDK de pagamento WeChat oferece suporte para pagamento com cartão, pagamento por conta oficial, pagamento por código de digitalização, pagamento por APP, pagamento H5, bem como cupons, envelopes vermelhos, pagamento corporativo e dedução WeChat
const path = require ( "path" ) ;
const fs = require ( "fs" ) ;
const {
PubPay ,
RequestError ,
CommunicationError ,
utils : { getXMLBody }
} = require ( "@sigodenjs/wechatpay" ) ;
const pay = new PubPay ( {
appId : "wxb80e5bddb2d804f3" ,
key : "6Q9VX4N3WTBM9G9XBL7H1L9PB9ANHLY7" ,
mchId : "1434712502" ,
pfx : fs . readFileSync ( path . resolve ( __dirname , "cert.p12" ) )
} ) ;
// 调用统一下单接口
pay
. unifiedOrder ( {
body : "腾讯充值中心-QQ会员充值" ,
out_trade_no : "1217752501201407033233368018" ,
total_fee : 888 ,
spbill_create_ip : "8.8.8.8" ,
notify_url : "https://example.com/wechatpay/notify" ,
trade_type : "JSAPI" ,
openid : "oUpF8uMuAJO_M2pxb1Q9zNjWeS6o"
} )
. then ( res => {
if ( ! pay . verifySign ( res ) ) {
// 签名校验失败
throw new Error ( "签名校验失败" ) ;
}
if ( res . result_code === "FAIL" ) {
console . log ( res . err_code , res . err_code_des ) ;
} else {
console . log ( res . prepay_id ) ;
}
} )
. catch ( err => {
if ( err instanceof RequestError ) {
// 请求错误
} else if ( err instanceof CommunicationError ) {
// return_code = FAIL
}
} ) ;
// 支付结果通知
router . post ( "/wechatpay/notify" , ( req , res ) => {
const options = {
length : req . headers [ "content-length" ] ,
limit : "1mb" ,
encoding : "utf8"
} ;
getXMLBody ( req , options ) . then ( data => {
pay
. payNotify ( data , async parsedData => {
if ( ! pay . verifySign ( parsedData ) ) {
// 签名校验失败
}
if ( parsedData . result_code === "FAIL" ) {
// 业务逻辑失败
}
// ...
return {
return_code : "SUCCESS" ,
return_msg : "OK"
} ;
} )
. then ( returnData => {
res . set ( "Content-Type" , "application/xml; charset=utf-8" ) ;
res . end ( returnData ) ;
} ) ;
} ) ;
} ) ;
Se você utiliza apenas um determinado tipo de pagamento, utilize a classe executiva. Mas se estiverem envolvidos vários pagamentos, é mais conveniente usar a categoria abrangente.
Copyright (c) 2018 sigoden
Licenciado sob a licença MIT.