alipay.js 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. import platform from '@/core/platform'
  2. import ClientEnum from '@/common/enum/Client'
  3. import { PayMethodEnum } from '@/common/enum/payment'
  4. /**
  5. * 发起支付请求 (用于H5)
  6. * @param {Object} option 参数
  7. */
  8. const paymentAsH5 = option => {
  9. const options = { formHtml: '', ...option }
  10. // 跳转到支付宝支付页
  11. return new Promise((resolve, reject) => {
  12. // console.log(options.formHtml)
  13. if (options.formHtml) {
  14. const div = document.createElement('div')
  15. div.innerHTML = options.formHtml
  16. document.body.appendChild(div)
  17. document.forms[0].submit()
  18. }
  19. })
  20. }
  21. /**
  22. * 发起支付请求 (用于APP)
  23. * @param {Object} option 参数
  24. */
  25. const paymentAsApp = options => {
  26. return new Promise((resolve, reject) => {
  27. uni.requestPayment({
  28. provider: 'alipay',
  29. orderInfo: options.orderInfo,
  30. success(res) {
  31. // isRequireQuery 是否需要主动查单
  32. // outTradeNo 交易订单号
  33. const option = {
  34. isRequireQuery: true,
  35. outTradeNo: options.out_trade_no,
  36. method: 'alipay'
  37. }
  38. resolve({ res, option })
  39. },
  40. fail: res => reject(res)
  41. })
  42. })
  43. }
  44. // 获取支付完成后跳转的url
  45. // #ifdef H5
  46. const returnUrl = () => {
  47. return window.location.href
  48. }
  49. // #endif
  50. /**
  51. * 统一下单API
  52. */
  53. export const payment = (option) => {
  54. const events = {
  55. [ClientEnum.H5.value]: paymentAsH5,
  56. [ClientEnum.APP.value]: paymentAsApp
  57. }
  58. return events[platform](option)
  59. }
  60. /**
  61. * 统一下单API需要的扩展数据
  62. */
  63. export const extraAsUnify = () => {
  64. const extra = {}
  65. // #ifdef H5
  66. extra.returnUrl = returnUrl()
  67. // #endif
  68. return extra
  69. }
  70. // H5端支付宝支付下单时的数据
  71. // 用于从支付宝支付页返回到收银台页面后拿到下单数据
  72. // #ifdef H5
  73. export const performance = () => {
  74. const query = getCurrentQuery()
  75. if (query.method && query.method === 'alipay.trade.wap.pay.return') {
  76. return { method: PayMethodEnum.ALIPAY.value, outTradeNo: query.out_trade_no }
  77. }
  78. return null
  79. }
  80. const getCurrentQuery = () => {
  81. const pages = getCurrentPages()
  82. return pages[pages.length - 1].$route.query
  83. }
  84. // #endif