Pago WeChat para node.js
npm install weixin-pay
Crear una orden de pago unificada
var WXPay = require ( 'weixin-pay' ) ;
var wxpay = WXPay ( {
appid : 'xxxxxxxx' ,
mch_id : '1234567890' ,
partner_key : 'xxxxxxxxxxxxxxxxx' , //微信商户平台API密钥
pfx : fs . readFileSync ( './wxpay_cert.p12' ) , //微信商户平台证书
} ) ;
wxpay . createUnifiedOrder ( {
body : '扫码支付测试' ,
out_trade_no : '20140703' + Math . random ( ) . toString ( ) . substr ( 2 , 10 ) ,
total_fee : 1 ,
spbill_create_ip : '192.168.2.210' ,
notify_url : 'http://wxpay_notify_url' ,
trade_type : 'NATIVE' ,
product_id : '1234567890'
} , function ( err , result ) {
console . log ( result ) ;
} ) ;
orden de consulta
// 通过微信订单号查
wxpay . queryOrder ( { transaction_id : "xxxxxx" } , function ( err , order ) {
console . log ( order ) ;
} ) ;
// 通过商户订单号查
wxpay . queryOrder ( { out_trade_no : "xxxxxx" } , function ( err , order ) {
console . log ( order ) ;
} ) ;
Cerrar orden
wxpay . closeOrder ( { out_trade_no : "xxxxxx" } , function ( err , result ) {
console . log ( result ) ;
} ) ;
Interfaz de reembolso
var params = {
appid : 'xxxxxxxx' ,
mch_id : '1234567890' ,
op_user_id : '商户号即可' ,
out_refund_no : '20140703' + Math . random ( ) . toString ( ) . substr ( 2 , 10 ) ,
total_fee : '1' , //原支付金额
refund_fee : '1' , //退款金额
transaction_id : '微信订单号'
} ;
wxpay . refund ( params , function ( err , result ) {
console . log ( 'refund' , arguments ) ;
} ) ;
Proporcione una función para generar un enlace de código QR de pago y genere un código QR a partir de la URL para que el usuario lo escanee.
var url = wxpay . createMerchantPrepayUrl ( { product_id : '123456' } ) ;
Después de recibir la devolución de llamada de WeChat, el backend del comerciante llama a createUnifiedOrder() para generar una orden de transacción de prepago y devuelve los datos XML resultantes a WeChat.
¿Qué es el modo uno?
Llame directamente a la función createUnifiedOrder() para generar una orden de transacción de prepago y genere un código QR a partir de code_url en el resultado para que el usuario lo escanee.
¿Qué es el Modo 2?
Genere parámetros de pago JS API y envíelos a la página
wxpay . getBrandWCPayRequestParams ( {
openid : '微信用户 openid' ,
body : '公众号支付测试' ,
detail : '公众号支付测试' ,
out_trade_no : '20150331' + Math . random ( ) . toString ( ) . substr ( 2 , 10 ) ,
total_fee : 1 ,
spbill_create_ip : '192.168.2.210' ,
notify_url : 'http://wxpay_notify_url'
} , function ( err , result ) {
// in express
res . render ( 'wxpay/jsapi' , { payargs : result } )
} ) ;
Parámetros de llamada de la página web (tome ejs como ejemplo)
WeixinJSBridge . invoke (
"getBrandWCPayRequest" , < % - JSON . stringify ( payargs ) % > , function ( res ) {
if ( res . err_msg == "get_brand_wcpay_request:ok" ) {
// success
}
} ) ;
El servidor comercial maneja las devoluciones de llamadas de WeChat (express es un ejemplo)
// 原生支付回调
router . use ( '/wxpay/native/callback' , wxpay . useWXCallback ( function ( msg , req , res , next ) {
// msg: 微信回调发送的数据
} ) ) ;
// 支付结果异步通知
router . use ( '/wxpay/notify' , wxpay . useWXCallback ( function ( msg , req , res , next ) {
// 处理商户业务逻辑
// res.success() 向微信返回处理成功信息,res.fail()返回失败信息。
res . success ( ) ;
} ) ) ;