微信支付 V2 版本

微信支付官方开发文档微信支付 V2 版本 - 图1

初始化配置

  1. let wxPayConfig = new WxPayApiConfig('appId','apiKey','apiKey 3', '域名','mchId', 'certPath', 'certP12Path','keyPath','providerAppId','provideMchId')
  2. // 添加配置,支持多商户平台
  3. WxPayApiConifgKit.putConfig(wxPayConfig)
  4. // 设置当前应用
  5. WxPayApiConifgKit.setCurrentAppId(appId)
  6. WxPayApiConifgKit.devMode = true

TIP

Api v2 版本接口只需要参数

  • 公众号、小程序或者App的 appId
  • 商户平台API 密钥 apiKey
  • 商户号 mchId
  • 证书绝对路径 certP12Path`

获取配置

  1. // 获取当前应用的支付配置
  2. let config: WxPayApiConfig = WxPayApiConifgKit.getConfig
  3. // 通过应用ID来获取支付配置
  4. let config: WxPayApiConfig = WxPayApiConifgKit.getConfigByAppId('appId')

WARNING

初始化配置、获取配置都是非必须的,这样做的目的只是统一管理支付时需要的常量

构建请求参数

  1. try {
  2. let reqObj = {
  3. appid: config.appId,
  4. mch_id: config.mchId,
  5. nonce_str: Kits.generateStr(), //生成随机字符串
  6. body: 'IJPay 让支付触手可及',
  7. attach: 'TNWX 微信系开发脚手架',
  8. out_trade_no: Kits.generateStr(),
  9. total_fee: 666,
  10. spbill_create_ip: ip,
  11. notify_url: 'https://gitee.com/Javen205/TNWX',
  12. trade_type: WX_TRADE_TYPE.JSAPI,
  13. sign_type: SIGN_TYPE.SIGN_TYPE_HMACSHA256
  14. }
  15. let xml = await Kits.generateSignedXml(reqObj, config.apiKey, SIGN_TYPE.SIGN_TYPE_HMACSHA256)
  16. let data = await HttpKit.getHttpDelegate.httpPost(WX_DOMAIN.CHINA.concat(WX_API_TYPE.UNIFIED_ORDER), xml)
  17. ctx.body = await Kits.xml2obj(data)
  18. } catch (error) {
  19. console.log(error)
  20. }

执行请求

统一下单为例:

  1. await HttpKit.getHttpDelegate.httpPost(WX_DOMAIN.CHINA.concat(WX_API_TYPE.UNIFIED_ORDER), xml)

双向证书请求

退款为例:

  1. try {
  2. let refundObj = {
  3. appid: config.appId,
  4. mch_id: config.mchId,
  5. nonce_str: Kits.generateStr(), //生成随机字符串
  6. out_trade_no: Kits.generateStr(),
  7. out_refund_no: Kits.generateStr(),
  8. total_fee: 666,
  9. refund_fee: 100
  10. }
  11. let xml = await Kits.generateSignedXml(refundObj, config.apiKey, SIGN_TYPE.SIGN_TYPE_MD5)
  12. let pfx: Buffer = fs.readFileSync(config.certP12Path)
  13. let data = await HttpKit.getHttpDelegate.httpPostWithCert(WX_DOMAIN.CHINA.concat(WX_API_TYPE.REFUND), xml, pfx, config.mchId)
  14. ctx.body = await Kits.xml2obj(data)
  15. } catch (error) {
  16. console.log(error)
  17. }