187 lines
5.6 KiB
JavaScript
187 lines
5.6 KiB
JavaScript
import appConfig from '@/config/appConfig.js'
|
||
import { toErrPageFunc } from '@/util/toErrorPageUtil.js'
|
||
import { $payCancelBoardCast, $payEventBoardCast } from '@/http/apiManager.js'
|
||
|
||
function wechatH5Func(orderRes, payOrderInfo){
|
||
|
||
|
||
let onBridgeReady = function () {
|
||
|
||
// eslint-disable-next-line no-undef
|
||
WeixinJSBridge.invoke( 'getBrandWCPayRequest', JSON.parse(orderRes.payInfo), function(res) {
|
||
|
||
payEventBoardCast(orderRes.payOrderId, res)
|
||
|
||
if (res.err_msg == "get_brand_wcpay_request:ok") {
|
||
// 使用以上方式判断前端返回,微信团队郑重提示:
|
||
//res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。
|
||
// //重定向
|
||
if(payOrderInfo.returnUrl){
|
||
location.href = payOrderInfo.returnUrl;
|
||
}else{
|
||
alert('支付成功!');
|
||
// if(payOrderInfo.fun) return payOrderInfo.fun()
|
||
window.WeixinJSBridge.call('closeWindow')
|
||
}
|
||
|
||
}
|
||
if (res.err_msg == "get_brand_wcpay_request:cancel") {
|
||
// payCancel(orderRes.payOrderId)
|
||
alert("支付取消");
|
||
// return false;
|
||
window.WeixinJSBridge.call('closeWindow')
|
||
}
|
||
if (res.err_msg == "get_brand_wcpay_request:fail") {
|
||
alert('支付失败:' + JSON.stringify(res))
|
||
// return false;
|
||
window.WeixinJSBridge.call('closeWindow')
|
||
}
|
||
if (res.err_msg == "total_fee") {
|
||
alert('缺少参数')
|
||
window.WeixinJSBridge.call('closeWindow')
|
||
}
|
||
}
|
||
);
|
||
}
|
||
|
||
|
||
if (typeof WeixinJSBridge == "undefined"){
|
||
if( document.addEventListener ){
|
||
document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);
|
||
}else if (document.attachEvent){
|
||
document.attachEvent('WeixinJSBridgeReady', onBridgeReady);
|
||
document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);
|
||
}
|
||
}else{
|
||
onBridgeReady();
|
||
}
|
||
}
|
||
|
||
// 支付宝内的浏览器调起支付:https://myjsapi.alipay.com/jsapi/native/trade-pay.html
|
||
function alipayH5Func(orderRes){
|
||
// 执行事件
|
||
let doAlipay = function () {
|
||
AlipayJSBridge.call("tradePay", { tradeNO: orderRes.alipayTradeNo }, function (data) {
|
||
payEventBoardCast(orderRes.payOrderId, data)
|
||
if ("9000" == data.resultCode) {
|
||
// //重定向
|
||
if(orderRes.returnUrl){
|
||
location.href = orderRes.returnUrl;
|
||
}else{
|
||
alert('支付成功!');
|
||
window.AlipayJSBridge.call('closeWebview')
|
||
}
|
||
//‘8000’:后台获取支付结果超时,暂时未拿到支付结果;
|
||
// ‘6004’:支付过程中网络出错, 暂时未拿到支付结果;
|
||
}else if("8000" == data.resultCode || "6004" == data.resultCode){ //其他
|
||
alert(JSON.stringify(data));
|
||
window.AlipayJSBridge.call('closeWebview')
|
||
}else{ ///其他异常信息, 需要取消订单
|
||
// payCancel(orderRes.payOrderId)
|
||
alert('用户已取消!');
|
||
window.AlipayJSBridge.call('closeWebview')
|
||
}
|
||
});
|
||
}
|
||
if (!window.AlipayJSBridge) {
|
||
document.addEventListener('AlipayJSBridgeReady', doAlipay, false);
|
||
}else{
|
||
doAlipay();
|
||
}
|
||
}
|
||
|
||
function wechatLiteFunc(orderRes, payOrderInfo){
|
||
const payInfo = JSON.parse(orderRes.payInfo)
|
||
wx.requestPayment({
|
||
"timeStamp": payInfo.timeStamp,
|
||
"nonceStr": payInfo.nonceStr,
|
||
"package": payInfo.package,
|
||
"signType": payInfo.signType,
|
||
"paySign": payInfo.paySign,
|
||
"success": function(res){
|
||
if(appConfig.redPacketIsOpen){
|
||
setTimeout(() => {
|
||
uni.navigateTo({
|
||
url: '/pages/paySuccess/redSuccess?payOrderId=' + orderRes.payOrderId
|
||
})
|
||
}, 1000)
|
||
return false;
|
||
}
|
||
if(payOrderInfo.fun) return payOrderInfo.fun()
|
||
uni.navigateTo({
|
||
url: '/pages/paySuccess/paySuccess?amount=' + payOrderInfo.amount + '&payOrderId=' + orderRes.payOrderId
|
||
})
|
||
},
|
||
"fail": function(res){
|
||
if(res.errMsg == 'requestPayment:fail cancel') {
|
||
// payCancel(orderRes.payOrderId)
|
||
// toErrPageFunc('取消支付')
|
||
return uni.showToast({title: '取消支付',icon:'none'})
|
||
}else {
|
||
toErrPageFunc(res.errMsg)
|
||
}
|
||
},
|
||
"complete": (res) => {
|
||
payEventBoardCast(orderRes.payOrderId, res)
|
||
}
|
||
})
|
||
}
|
||
|
||
function alipayLiteFunc(orderRes, payOrderInfo){
|
||
my.tradePay({
|
||
tradeNO: orderRes.alipayTradeNo,
|
||
success: (res) => {
|
||
if(res.resultCode == 9000) {
|
||
if(payOrderInfo.fun) return payOrderInfo.fun()
|
||
uni.navigateTo({
|
||
url: '/pages/paySuccess/paySuccess?amount=' + payOrderInfo.amount
|
||
})
|
||
}else if(res.resultCode == 6001) {
|
||
// payCancel(orderRes.payOrderId)
|
||
// toErrPageFunc('取消支付')
|
||
return uni.showToast({title: '取消支付',icon:'none'})
|
||
}else if(res.resultCode == 4000) {
|
||
// toErrPageFunc('订单处理失败')
|
||
return uni.showToast({title: '订单处理失败',icon:'none'})
|
||
}else if(res.resultCode == 4) {
|
||
toErrPageFunc('无权限调用')
|
||
}else {
|
||
toErrPageFunc(JSON.stringify(res))
|
||
}
|
||
},
|
||
fail: (res) => {
|
||
toErrPageFunc(JSON.stringify(res))
|
||
},
|
||
complete: (res) => {
|
||
payEventBoardCast(orderRes.payOrderId, res)
|
||
}
|
||
});
|
||
}
|
||
|
||
function ysfpayH5Func(orderRes){
|
||
window.location.href = orderRes.redirectUrl
|
||
}
|
||
|
||
|
||
function payCancel(payOrderId) {
|
||
$payCancelBoardCast(payOrderId).then(() => {
|
||
console.log("取消支付")
|
||
})
|
||
}
|
||
|
||
function payEventBoardCast(payOrderId, resData) {
|
||
$payEventBoardCast(payOrderId, resData)
|
||
}
|
||
|
||
|
||
export default () => {
|
||
|
||
let result = {}
|
||
result[appConfig.PAGE_TYPE_ENUM.WECHAT_H5] = wechatH5Func;
|
||
result[appConfig.PAGE_TYPE_ENUM.ALIPAY_H5] = alipayH5Func;
|
||
result[appConfig.PAGE_TYPE_ENUM.WECHAT_LITE] = wechatLiteFunc;
|
||
result[appConfig.PAGE_TYPE_ENUM.ALIPAY_LITE] = alipayLiteFunc;
|
||
result[appConfig.PAGE_TYPE_ENUM.YSFPAY_H5] = ysfpayH5Func;
|
||
|
||
return result;
|
||
} |