wechat.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import platform from '@/core/platform'
  2. import storage from '@/utils/storage'
  3. import ClientEnum from '@/common/enum/Client'
  4. import { PayMethodEnum } from '@/common/enum/payment'
  5. /**
  6. * 发起支付请求 (用于微信小程序)
  7. * @param {Object} option 参数
  8. */
  9. const paymentAsWxMp = option => {
  10. const options = {
  11. timeStamp: '',
  12. nonceStr: '',
  13. package: '',
  14. signType: '',
  15. paySign: '',
  16. ...option
  17. }
  18. return new Promise((resolve, reject) => {
  19. uni.requestPayment({
  20. provider: 'wxpay',
  21. timeStamp: options.timeStamp,
  22. nonceStr: options.nonceStr,
  23. package: options.package,
  24. signType: options.signType,
  25. paySign: options.paySign,
  26. success(res) {
  27. const option = {
  28. isRequireQuery: true, // 是否需要主动查单
  29. outTradeNo: options.out_trade_no, // 交易订单号
  30. method: 'wechat'
  31. }
  32. resolve({ res, option })
  33. },
  34. fail: res => reject(res)
  35. })
  36. })
  37. }
  38. /**
  39. * 发起支付请求 (用于H5)
  40. * @param {Object} option 参数
  41. */
  42. const paymentAsH5 = option => {
  43. const options = { orderKey: null, mweb_url: '', h5_url: '', ...option }
  44. // 记录下单的信息
  45. storage.set('tempUnifyData_' + options.orderKey, {
  46. method: PayMethodEnum.WECHAT.value,
  47. outTradeNo: options.out_trade_no
  48. }, 60 * 60)
  49. // 跳转到微信支付页
  50. return new Promise((resolve, reject) => {
  51. const url = options.mweb_url || options.h5_url
  52. if (url) {
  53. window.location.href = url
  54. }
  55. })
  56. }
  57. /**
  58. * 发起支付请求 (用于APP)
  59. * @param {Object} option 参数
  60. */
  61. const paymentAsApp = options => {
  62. return new Promise((resolve, reject) => {
  63. uni.requestPayment({
  64. provider: 'wxpay',
  65. orderInfo: {
  66. partnerid: options.partnerid,
  67. appid: options.appid,
  68. package: 'Sign=WXPay',
  69. noncestr: options.noncestr,
  70. sign: options.sign,
  71. prepayid: options.prepayid,
  72. timestamp: options.timestamp
  73. },
  74. success(res) {
  75. // isRequireQuery 是否需要主动查单
  76. // outTradeNo 交易订单号
  77. resolve({ res, option: { isRequireQuery: true, outTradeNo: options.out_trade_no, method: 'wechat' } })
  78. },
  79. fail: res => reject(res)
  80. })
  81. })
  82. }
  83. /**
  84. * 统一下单API
  85. */
  86. export const payment = (option) => {
  87. const events = {
  88. [ClientEnum.H5.value]: paymentAsH5,
  89. [ClientEnum.MP_WEIXIN.value]: paymentAsWxMp,
  90. [ClientEnum.APP.value]: paymentAsApp
  91. }
  92. return events[platform](option)
  93. }
  94. /**
  95. * 统一下单API需要的扩展数据
  96. */
  97. export const extraAsUnify = () => {
  98. return {}
  99. }
  100. // H5端微信支付下单时的数据
  101. // 用于从微信支付页返回到收银台页面后拿到下单数据
  102. // #ifdef H5
  103. export const performance = (orderKey) => {
  104. if (window.performance && window.performance.navigation.type == 2) {
  105. const tempUnifyData = storage.get('tempUnifyData_' + orderKey)
  106. if (tempUnifyData) {
  107. storage.remove('tempUnifyData_' + orderKey)
  108. return tempUnifyData
  109. }
  110. }
  111. return null
  112. }
  113. // #endif