UNPKG

captain-ui

Version:

有赞vue wap业务组件库

236 lines (187 loc) 6.52 kB
import "vant/es/toast/style"; import _Toast from "vant/es/toast"; import _extends from "@babel/runtime/helpers/esm/extends"; import args from '@youzan/utils/url/args'; import { action as ZanJSBridgeAction } from '@youzan/zan-jsbridge'; import ajax from '../../../common/ajax'; import { WxPayError, WxPayBridgeError, WxAppPayError } from '../../../common/zan_error'; import weixinReady from './weixin-ready'; var ThirdPartyManager = /*#__PURE__*/ function () { function ThirdPartyManager(options) { this.fail = options.fail || function () {}; this.paying = false; } /* * Public methods */ var _proto = ThirdPartyManager.prototype; _proto.doWeixinPay = function doWeixinPay(payData) { return this._handleWxPay(payData); }; _proto.doWeixinH5Pay = function doWeixinH5Pay(payData) { return this._handleWxH5Pay(payData); }; _proto.doWeixinAppPay = function doWeixinAppPay(payData) { return this._handleWxAppPay(payData); }; _proto.doAliPay = function doAliPay(payData) { return this._startDefaultPay(payData); }; _proto.doCODPay = function doCODPay(payData) { return this._sendSuccessMessage(payData); }; _proto.doPeerPay = function doPeerPay(payData) { return this._startDefaultPay(payData); }; _proto.doECardPay = function doECardPay(payData) { return this._sendSuccessMessage(payData); }; _proto.doGiftCardPay = function doGiftCardPay(payData) { return this._sendSuccessMessage(payData); }; _proto.doPrepaidPay = function doPrepaidPay(payData) { return this._sendSuccessMessage(payData); }; _proto.doQrcodePay = function doQrcodePay(payData) { return this._sendSuccessMessage(payData); }; _proto.doDefaultPay = function doDefaultPay(payData) { return this._startDefaultPay(payData); }; /* * private functions. */ _proto._startDefaultPay = function _startDefaultPay(payData) { // 阻止表单重复提交,safari下history.back会缓存所有变量,所以不能限制为只提交一次 if (this.paying) return console.warn('Pay processing...'); this.paying = true; var formData = _extends({}, payData.pay_data); var submitMethod = (formData.submit_method || 'POST').toUpperCase(); var submitUrl = formData.submit_url || ''; var submitData = formData.submit_data || {}; // 对于get方式的,直接发送,不再使用form if (submitMethod === 'GET') { location.href = args.add(submitUrl, submitData); this.paying = false; return; } // 其他方式,都使用form提交 var form = document.createElement('form'); form.method = submitMethod; form.action = submitUrl; form.style.display = 'none'; var formHtml = ''; delete formData.submit_method; delete formData.submit_url; Object.keys(submitData).forEach(function (key) { formHtml += '<input type="hidden" name="' + key + '" value="' + submitData[key] + '" />'; }); form.innerHTML = formHtml; document.body.appendChild(form); form.submit(); this.paying = false; }; _proto._handleWxPay = function _handleWxPay(payData) { var _this = this; if (this.paying) return console.warn('Pay processing'); this.paying = true; // 如果传入的参数为字符串类型,则尝试转换为JSON if (typeof payData.pay_data === 'string') { payData.pay_data = JSON.parse(payData.pay_data); } weixinReady(function () { window.WeixinJSBridge.invoke('getBrandWCPayRequest', payData.pay_data, function (resp) { _this.paying = false; switch (resp.err_msg) { case 'get_brand_wcpay_request:ok': _Toast({ type: 'text', message: '支付成功,处理中...', duration: 0 }); _this._sendSuccessMessage(payData); break; case 'get_brand_wcpay_request:cancel': // if (!UA.isIOS()) throw new WxPayError(resp, payData); break; default: _this.fail(new WxPayError(resp, payData)); } }); }, function () { _Toast('微信支付初始化失败,请稍后再试'); _this.paying = false; _this.fail(new WxPayBridgeError({ msg: '微信支付初始化失败' })); }, 15000); }; _proto._sendSuccessMessage = function _sendSuccessMessage(payData) { if (!payData.pay_return_url) { window.location.replace(payData.redirect_url); return; } ajax({ method: 'GET', url: payData.pay_return_url, data: payData.pay_return_data }).then(function () { window.location.replace(payData.redirect_url); }).catch(function () { window.location.replace(payData.redirect_url); }); }; _proto._handleWxH5Pay = function _handleWxH5Pay(payData) { window.location.href = payData.pay_data.awake_pay_url; }; _proto._handleWxAppPay = function _handleWxAppPay(payData) { var _this2 = this; var _payData$pay_data = payData.pay_data, pay_data = _payData$pay_data === void 0 ? {} : _payData$pay_data; var data = { action: 'wx_app_pay', partnerId: pay_data.partner_id, prepayId: pay_data.prepay_id, nonceStr: pay_data.nonce_str, timeStamp: pay_data.time_stamp, sign: pay_data.pay_sign }; try { ZanJSBridgeAction.doCall('doAction', data, function (res) { if (res) { switch (res.code) { case 0: // 成功 _this2._sendSuccessMessage(payData); break; case 1: // 业务失败,走正常失败流程 _this2.fail(new WxAppPayError({ msg: res.retCode === -2 ? '取消支付' : '系统异常,支付失败' })); break; case 2: // 客户端报错,降级至 WX_H5 支付 _this2.fail(new WxAppPayError({ msg: res.msg || '调用客户端支付失败', retry: true })); break; case 3: // 客户端未收到微信回调刷新页面 window.location.reload(); break; default: break; } } }); } catch (err) { this.fail(new WxAppPayError({ msg: '调用客户端支付失败', retry: true })); } }; return ThirdPartyManager; }(); export default ThirdPartyManager;