payment.js 1.0 KB

1234567891011121314151617181920212223242526272829303132333435
  1. /**
  2. * 支付网关要求以 POST 表单提交签名参数,不能用普通的路由跳转替代。
  3. */
  4. function resolveTarget(target, targetWindow) {
  5. if (!targetWindow) return target
  6. if (!targetWindow.name) {
  7. targetWindow.name = `runforge_pay_${Date.now()}_${Math.random().toString(36).slice(2)}`
  8. }
  9. return targetWindow.name
  10. }
  11. export function submitPayment(pay, { target = '_blank', targetWindow = null } = {}) {
  12. const payUrl = pay?.payUrl
  13. const payData = pay?.payData
  14. if (!payUrl || !payData || typeof payData !== 'object') return false
  15. const form = document.createElement('form')
  16. form.method = 'POST'
  17. form.action = payUrl
  18. form.target = resolveTarget(target, targetWindow)
  19. form.style.display = 'none'
  20. Object.entries(payData).forEach(([key, value]) => {
  21. const input = document.createElement('input')
  22. input.type = 'hidden'
  23. input.name = key
  24. input.value = String(value)
  25. form.appendChild(input)
  26. })
  27. document.body.appendChild(form)
  28. form.submit()
  29. document.body.removeChild(form)
  30. return true
  31. }