pay.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. import Request from '@/common/request.js';
  2. let request = new Request().http
  3. const api = {
  4. // 支付
  5. zfbPayment: '/app/live/liveOrder/aliPayment', // 支付宝付款
  6. weChatPayment: '/app/live/liveOrder/weChatPayment', // 微信付款
  7. // updateConfirm: (orderId, type) => `/app/live/liveOrder/updateConfirm/${orderId}/${type} `, // 取消/支付订单确认
  8. }
  9. // 支付
  10. // 支付宝付款
  11. export function zfbPayment(data) {
  12. return request(api.zfbPayment, data, 'POST', 'application/json;charset=UTF-8')
  13. }
  14. // 微信付款
  15. // export function weChatPayment(data) {
  16. // return request(api.weChatPayment, data, 'POST', 'application/json;charset=UTF-8')
  17. // }
  18. /**
  19. * 微信支付(全平台适配简化版)
  20. * @param {String} orderId 订单ID
  21. * @param {Number} amount 金额(单位:分)
  22. * @returns {Promise}
  23. */
  24. // export function weChatPayment(orderId, amount) {
  25. export function weChatPayment(data) {
  26. return new Promise((resolve, reject) => {
  27. let res = {
  28. "code": 200,
  29. "msg": "success",
  30. "payType": 1,
  31. "result": {"timeStamp":"1757906581","package":"prepay_id=wx151123017811185ff21654a23ca0660000","paySign":"XZOdWmeUE4vtrsTiBcgc830dI5cTxDMOld4nEodSImjtnxNP7g4ehBCYBT9lSXQviX2CAqYfYS3Nazt81jCz3U8rjcxvf0IP1rKzesYHozTwkTh9PfOMu5kwBIf48pF1pG8P4w02cBMvfmEvN8c9ISc1Lx528IqV/pC12cxGTNBktH8UFFU5hdEmbpu9sI+4VfDpgroHs5y8xx2DK072LulF8g9xQvP2Hif/PFuEphBRmdxAN7Cp+gX6kHYmIijPe10eI0dTG/L0nR/r3UPUt9vubUnLW0cnYnimQ0FW5A1ANXN4LdCO+R3jFONsu99qpw/7uqrpJ1vUVpEvLu8fTg==","appId":"wx503cf8ab31f83dd4","signType":"RSA","nonceStr":"RKjdY0O5yroLPnEjXmTMtAEFIq2AhD63"}
  32. }
  33. invokePayment(res.data)
  34. .then(resolve)
  35. .catch(err => {
  36. handlePaymentError(err);
  37. reject(err);
  38. });
  39. // 1. 获取支付参数
  40. // totalFee: amount, // platform: getPlatform() // 自动识别平台
  41. // request(api.weChatPayment, data, 'POST', 'application/json;charset=UTF-8')
  42. // .then(res => {
  43. // // 2. 调用平台支付
  44. // invokePayment(res.data)
  45. // .then(resolve)
  46. // .catch(err => {
  47. // handlePaymentError(err);
  48. // reject(err);
  49. // });
  50. // })
  51. // .catch(err => {
  52. // handlePaymentError(err);
  53. // reject(err);
  54. // });
  55. });
  56. }
  57. // ==================== 内部方法 ====================
  58. function getPlatform() {
  59. // #ifdef MP-WEIXIN
  60. return 'miniprogram';
  61. // #endif
  62. // #ifdef APP-PLUS
  63. return 'app';
  64. // #endif
  65. // #ifdef H5
  66. return 'h5';
  67. // #endif
  68. }
  69. function invokePayment(payData) {
  70. return new Promise((resolve, reject) => {
  71. // #ifdef MP-WEIXIN
  72. uni.requestPayment({
  73. provider: 'wxpay',
  74. ...payData, // 直接展开小程序所需参数
  75. success: (res) => {
  76. uni.showToast({
  77. title: '支付成功'
  78. });
  79. resolve(res);
  80. },
  81. fail: (err) => {
  82. reject(new Error(formatError(err)));
  83. }
  84. });
  85. // #endif
  86. // #ifdef APP-PLUS
  87. uni.requestPayment({
  88. provider: 'wxpay',
  89. orderInfo: payData.orderInfo,
  90. success: resolve,
  91. fail: (err) => {
  92. reject(new Error(formatError(err)));
  93. }
  94. });
  95. // #endif
  96. // #ifdef H5
  97. if (typeof WeixinJSBridge === 'undefined') {
  98. return reject(new Error('请在微信浏览器中打开'));
  99. }
  100. WeixinJSBridge.invoke(
  101. 'getBrandWCPayRequest',
  102. payData,
  103. (res) => {
  104. if (res.err_msg === 'get_brand_wcpay_request:ok') {
  105. resolve(res);
  106. } else {
  107. reject(new Error(res.err_msg || '支付失败'));
  108. }
  109. }
  110. );
  111. // #endif
  112. });
  113. }
  114. function formatError(err) {
  115. if (err.errMsg) {
  116. if (err.errMsg.includes('cancel')) return '支付已取消';
  117. if (err.errMsg.includes('fail')) return '支付失败';
  118. }
  119. return err.message || '支付异常';
  120. }
  121. function handlePaymentError(err) {
  122. console.error('[支付错误]', err);
  123. uni.showToast({
  124. title: err.message,
  125. icon: 'none',
  126. duration: 3000
  127. });
  128. }
  129. // 微信
  130. // export function userAddr(userId, data={}) {
  131. // return request(api.userAddr(userId), data, 'GET', 'application/json;charset=UTF-8')
  132. // }