pay.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  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. // 1. 获取支付参数
  28. // totalFee: amount, // platform: getPlatform() // 自动识别平台
  29. request(api.weChatPayment, data, 'POST', 'application/json;charset=UTF-8')
  30. .then(res => {
  31. // 2. 调用平台支付
  32. invokePayment(res.data)
  33. .then(resolve)
  34. .catch(err => {
  35. handlePaymentError(err);
  36. reject(err);
  37. });
  38. })
  39. .catch(err => {
  40. handlePaymentError(err);
  41. reject(err);
  42. });
  43. });
  44. }
  45. // ==================== 内部方法 ====================
  46. function getPlatform() {
  47. // #ifdef MP-WEIXIN
  48. return 'miniprogram';
  49. // #endif
  50. // #ifdef APP-PLUS
  51. return 'app';
  52. // #endif
  53. // #ifdef H5
  54. return 'h5';
  55. // #endif
  56. }
  57. function invokePayment(payData) {
  58. return new Promise((resolve, reject) => {
  59. // #ifdef MP-WEIXIN
  60. uni.requestPayment({
  61. provider: 'wxpay',
  62. ...payData, // 直接展开小程序所需参数
  63. success: (res) => {
  64. uni.showToast({
  65. title: '支付成功'
  66. });
  67. resolve(res);
  68. },
  69. fail: (err) => {
  70. reject(new Error(formatError(err)));
  71. }
  72. });
  73. // #endif
  74. // #ifdef APP-PLUS
  75. uni.requestPayment({
  76. provider: 'wxpay',
  77. orderInfo: payData.orderInfo,
  78. success: resolve,
  79. fail: (err) => {
  80. reject(new Error(formatError(err)));
  81. }
  82. });
  83. // #endif
  84. // #ifdef H5
  85. if (typeof WeixinJSBridge === 'undefined') {
  86. return reject(new Error('请在微信浏览器中打开'));
  87. }
  88. WeixinJSBridge.invoke(
  89. 'getBrandWCPayRequest',
  90. payData,
  91. (res) => {
  92. if (res.err_msg === 'get_brand_wcpay_request:ok') {
  93. resolve(res);
  94. } else {
  95. reject(new Error(res.err_msg || '支付失败'));
  96. }
  97. }
  98. );
  99. // #endif
  100. });
  101. }
  102. function formatError(err) {
  103. if (err.errMsg) {
  104. if (err.errMsg.includes('cancel')) return '支付已取消';
  105. if (err.errMsg.includes('fail')) return '支付失败';
  106. }
  107. return err.message || '支付异常';
  108. }
  109. function handlePaymentError(err) {
  110. console.error('[支付错误]', err);
  111. uni.showToast({
  112. title: err.message,
  113. icon: 'none',
  114. duration: 3000
  115. });
  116. }
  117. // 微信
  118. // export function userAddr(userId, data={}) {
  119. // return request(api.userAddr(userId), data, 'GET', 'application/json;charset=UTF-8')
  120. // }