tradePay.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import { tradeNoForOrder, tradeResult, tradeNoQuery } from '../service/common';
  2. const tradePay = function (params, option = {}) {
  3. // eslint-disable-next-line no-param-reassign
  4. option = Object.assign({
  5. useBalance: false,
  6. useMedicare: false,
  7. tradeType: 'Appointment' // Outpatient: 门诊缴费; Appointment: 挂号、充值
  8. }, option);
  9. console.log(params, option);
  10. if (option.tradeType === 'Appointment') {
  11. /**
  12. * params 挂号 : { type: 1, idNum: '', depName: '' }
  13. * params 充值 : { type: 2, idNum: '', amount: 0 }
  14. */
  15. return appointment(params);
  16. } else {
  17. /**
  18. * params : { outTradeNo }
  19. */
  20. return outpatient(params);
  21. }
  22. }; // 挂号,充值类订单
  23. function appointment(params) {
  24. return tradeNoQuery(params).then(_tradePay);
  25. } // 门诊类订单
  26. function outpatient(params) {
  27. return tradeNoForOrder({
  28. useBalance: params.useBalance,
  29. // 是否使用就诊卡余额
  30. useMedicare: params.useMedicare,
  31. // 是否使用医保卡余额
  32. outTradeNo: params.outTradeNo // 商家订单号
  33. }).then(tradeData => {
  34. if (tradeData.tradeNo) {
  35. // 发起支付
  36. return _tradePay(tradeData);
  37. } else {
  38. return Promise.resolve(compareResult({
  39. success: true
  40. }));
  41. }
  42. });
  43. } // 处理支付结果
  44. function compareResult(param) {
  45. console.log(param);
  46. if (!param.success) {
  47. my.showToast({
  48. type: 'fail',
  49. content: param.payRes.memo || '订单支付失败'
  50. });
  51. }
  52. return param.success;
  53. }
  54. function _tradePay(tradeData = {
  55. tradeNo: '',
  56. outTradeNo: ''
  57. }) {
  58. return new Promise((resolve, reject) => {
  59. my.tradePay({
  60. tradeNO: tradeData.tradeNo,
  61. success(payRes) {
  62. // 4000 订单处理失败
  63. // 6001 用途中途取消支付
  64. // 6002 网络链接出错
  65. if (payRes.resultCode === '4000' || payRes.resultCode === '6002' || payRes.resultCode === '6001') {
  66. // 支付失败
  67. reject(compareResult({
  68. success: false,
  69. payRes
  70. }));
  71. } else {
  72. // 其他情况调用接口确认
  73. triggerPay({
  74. tradeNo: tradeData.tradeNo,
  75. outTradeNo: tradeData.outTradeNo,
  76. resultCode: payRes.resultCode
  77. }).then(r => {
  78. if (r.status === 'TRADE_SUCCESS') {
  79. resolve(compareResult({
  80. success: true,
  81. payRes
  82. }));
  83. } else {
  84. reject(compareResult({
  85. success: false,
  86. payRes
  87. }));
  88. }
  89. });
  90. }
  91. },
  92. fail: payRes => {
  93. // 订单支付异常
  94. reject(compareResult({
  95. success: false,
  96. payRes
  97. }));
  98. }
  99. });
  100. });
  101. } // 验证支付结果
  102. function triggerPay(param) {
  103. return tradeResult(param);
  104. }
  105. export default {
  106. tradePay
  107. };