captain-ui
Version:
有赞vue wap业务组件库
248 lines (192 loc) • 6.93 kB
JavaScript
;
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;