wechat.js 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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. }