Skip to content

Latest commit

 

History

History
313 lines (279 loc) · 10.6 KB

wechat.md

File metadata and controls

313 lines (279 loc) · 10.6 KB

微信

初始化实例

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 等参数。 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。


二、手机网页(h5)支付

例子
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 等参数。 所有订单配置参数和官方无任何差别,兼容所有功能,所有参数请参考这里,查看「请求参数」一栏。


三、App支付

例子
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('验签失败'))
  }
})