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