UNPKG

captain-ui

Version:

有赞vue wap业务组件库

248 lines (192 loc) 6.93 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.default = void 0; require("vant/es/toast/style"); var _toast = _interopRequireDefault(require("vant/es/toast")); var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _args = _interopRequireDefault(require("@youzan/utils/url/args")); var _zanJsbridge = require("@youzan/zan-jsbridge"); var _ajax = _interopRequireDefault(require("../../../common/ajax")); var _zan_error = require("../../../common/zan_error"); var _weixinReady = _interopRequireDefault(require("./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 = (0, _extends2.default)({}, 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.default.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); } (0, _weixinReady.default)(function () { window.WeixinJSBridge.invoke('getBrandWCPayRequest', payData.pay_data, function (resp) { _this.paying = false; switch (resp.err_msg) { case 'get_brand_wcpay_request:ok': (0, _toast.default)({ 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 _zan_error.WxPayError(resp, payData)); } }); }, function () { (0, _toast.default)('微信支付初始化失败,请稍后再试'); _this.paying = false; _this.fail(new _zan_error.WxPayBridgeError({ msg: '微信支付初始化失败' })); }, 15000); }; _proto._sendSuccessMessage = function _sendSuccessMessage(payData) { if (!payData.pay_return_url) { window.location.replace(payData.redirect_url); return; } (0, _ajax.default)({ 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 { _zanJsbridge.action.doCall('doAction', data, function (res) { if (res) { switch (res.code) { case 0: // 成功 _this2._sendSuccessMessage(payData); break; case 1: // 业务失败,走正常失败流程 _this2.fail(new _zan_error.WxAppPayError({ msg: res.retCode === -2 ? '取消支付' : '系统异常,支付失败' })); break; case 2: // 客户端报错,降级至 WX_H5 支付 _this2.fail(new _zan_error.WxAppPayError({ msg: res.msg || '调用客户端支付失败', retry: true })); break; case 3: // 客户端未收到微信回调刷新页面 window.location.reload(); break; default: break; } } }); } catch (err) { this.fail(new _zan_error.WxAppPayError({ msg: '调用客户端支付失败', retry: true })); } }; return ThirdPartyManager; }(); var _default = ThirdPartyManager; exports.default = _default;