const Pay = require('cn-pay')
const config = {
app_id: 'app_id', // 公众号appid
appid: 'appid', // app的appid
miniapp_id: 'miniapp_id', // 小程序的appid
mch_id: 'mch_id', // 商户Id
key: 'key', // 商户密钥
notify_url: 'notify_url', // 通知地址
return_url: 'return_url', // 跳转地址
pfx: fs.readFileSync('<location-of-your-apiclient-cert.p12>') // 可选, 退款等情况时需要用到
}
const wechat = Pay.wechat(config)
const order = {
out_trade_no: '0000001',
body: 'subject-测试',
total_fee: 1, // 直接以元为单位
openid: 'onkVf1FjWS5SBxxxxxxxx', // openid
spbill_create_ip: 'spbill_create_ip' // 客户端ip
}
const result = await wechat.mp(order) // 此方法返回Promise
成功后result
的值为类似以下结果:
{
appId: 'wx1c198f2cad228bee',
package: 'prepay_id=wx20180115094744ab552e649c0025010603',
timeStamp: '1515980861',
nonceStr: 'sqax2vmws3',
signType: 'MD5',
paySign: 'D79BD1F0E4B12D1DFBA010E5DAE77DFE'
}
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,trade_type
, appid
, sign
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
const order = {
out_trade_no: '0000001',
body: 'subject-测试',
total_fee: 1, // 直接以元为单位
spbill_create_ip: 'spbill_create_ip' // 客户端ip
}
const result = await wechat.wap(order) // 此方法返回Promise
成功后result
的值为类似以下结果:
{
return_code: 'SUCCESS',
return_msg: 'OK',
appid: 'wx2421b1c4370ec43b',
mch_id: '10000100',
nonce_str: 'IITRi8Iabbblz1Jc',
sign: '7921E432F65EB8ED0CE9755F0E86D72F',
result_code: 'SUCCESS',
prepay_id: 'wx201411101639507cbf6ffd8b0779950874',
trade_type: 'MWEB',
mweb_url: 'https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx2016121516420242444321ca0631331346&package=1405458241&redirect_url=return_url'
}
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,trade_type
, appid
, sign
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
const order = {
out_trade_no: '0000001',
body: 'subject-测试',
total_fee: 1, // 直接以元为单位
spbill_create_ip: 'spbill_create_ip' // 客户端ip
}
const result = await wechat.app(order) // 此方法返回Promise
成功后result
的值为类似以下结果:
{
appid: 'wx1c198g4ad228bee',
partnerid: '1460444802',
prepayid: 'wx20180115100912c407d7dbf70493145721',
package: 'Sign=WXPay',
noncestr: 'kuo1z1qmy3m',
timestamp: '1515982149',
sign: '5C6BE57C28EE8B3BA950BF6E799A443F'
}
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,trade_type
, appid
, sign
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
const order = {
out_trade_no: '0000001',
body: 'subject-测试',
total_fee: 1, // 直接以元为单位
openid: 'onkVf1FjWS5SBxxxxxxxx', // openid
spbill_create_ip: 'spbill_create_ip' // 客户端ip
}
const result = await wechat.miniapp(order) // 此方法返回Promise
成功后result
的值为类似以下结果:
// 未实现
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,trade_type
, appid
, sign
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
const order = {
out_trade_no: '0000001',
body: 'subject-测试',
total_fee: 1, // 直接以元为单位
auth_code: '1354804793001231564897',
spbill_create_ip: 'spbill_create_ip' // 客户端ip
}
const result = await wechat.pos(order) // 此方法返回Promise
成功后result
的值为类似以下结果:
请根据err_code
= USERPAYING
,做定时查询,以确保真正支付成功
{
return_code: 'SUCCESS',
return_msg: 'OK',
appid: 'wx1c298f2cfg928bee',
mch_id: '1483272902',
nonce_str: 'F05AC0JnYL9QYX50',
sign: 'F0B7082E9E57BFB590D58CE7C0B3E25A',
result_code: 'FAIL',
err_code: 'USERPAYING',
err_code_des: '需要用户输入支付密码'
}
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,trade_type
, appid
, sign
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
const order = {
out_trade_no: '0000001',
body: 'subject-测试',
total_fee: 1, // 直接以元为单位
spbill_create_ip: 'spbill_create_ip' // 客户端ip
}
const result = await wechat.scan(order) // 此方法返回Promise
成功后result
的值为类似以下结果:
{
return_code: 'SUCCESS',
return_msg: 'OK',
appid: 'wx1c298f2cfg928bee',
mch_id: '1483272902',
nonce_str: 'zqdbp8QhMA7lSpfP',
result_code: 'SUCCESS',
prepay_id: 'wx20180116101212517d3471fa0624769084',
trade_type: 'NATIVE',
code_url: 'weixin://wxpay/bizpayurl?pr=JxsXSLO'
}
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,trade_type
, appid
, sign
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
const order = {
partner_trade_no: '0000001', // 商户订单号
openid: 'openid', // 收款人openid
check_name: 'NO_CHECK', // NO_CHECK:不校验真实姓名\FORCE_CHECK:强校验真实姓名
amount: 1, // 直接以元为单位
desc: '账户提现', // 付款说明
spbill_create_ip: 'spbill_create_ip' // 客户端ip
}
const result = await wechat.transfer(order) // 此方法返回Promise
成功后result
的值为类似以下结果:
// 未实现
所有订单配置中,客观参数均不用配置,扩展包已经为大家自动处理了,比如,trade_type
, appid
, sign
等参数。
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
const order = {
out_trade_no: '1514027114',
out_refund_no: '1516000270202',
total_fee: 1, // 单位元
refund_fee: 1, // 单位元
refund_desc: '退款测试'
}
const result = await wechat.refund(order) // 此方法返回Promise
// APP/小程序退款
// 如果您需要退款 APP/小程序 的订单,请传入第二个字符串参数APP 或 MINIAPP
const result = await wechat.refund(order, 'APP') // APP订单 此方法返回Promise
const result = await wechat.refund(order, 'MINIAPP') // 小程序订单 此方法返回Promise
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
const order = {
out_trade_no: '1514027114'
}
// 或者直接传递字符串
// const order = '1514027114'
const result = await wechat.find(order) // 此方法返回Promise
// APP/小程序查询
// 如果您需要查询 APP/小程序 的订单,请传入第二个字符串参数APP 或 MINIAPP
const result = await wechat.find(order, 'APP') // APP订单 此方法返回Promise
const result = await wechat.find(order, 'MINIAPP') // 小程序订单 此方法返回Promise
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
微信官方无此 API
,请调用 close
关闭订单。
const order = {
out_trade_no: '1514027114'
}
// 或者直接传递字符串
// const order = '1514027114'
const result = await wechat.close(order) // 此方法返回Promise
// APP/小程序关闭
// 如果您需要关闭 APP/小程序 的订单,请传入第二个字符串参数APP 或 MINIAPP
const result = await wechat.close(order, 'APP') // APP订单 此方法返回Promise
const result = await wechat.close(order, 'MINIAPP') // 小程序订单 此方法返回Promise
所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。
app.post('/notify', (req, res) => {
if (wechat.verify(req.body)) { // 一句话验签,就这么简单
console.log('微信支付异步验签成功:')
// 业务逻辑
res.send(wechat.success()) // 可以调用success或fail方法 返回结果
} else {
console.log('微信支付异步验签失败:')
res.send(wechat.fail('验签失败'))
}
})