You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
389 lines
12 KiB
389 lines
12 KiB
/**
|
|
* @FileDescription:
|
|
* @Author: kahu
|
|
* @Date: 2022/11/2
|
|
* @LastEditors: kahu
|
|
* @LastEditTime: 2022/11/2
|
|
*/
|
|
const NET = require('./request')
|
|
const API = require('../config/api')
|
|
// #ifdef H5
|
|
const jweixin = require('jweixin-module')
|
|
|
|
/**
|
|
* 普通H5处理
|
|
* @param payInfo 结算返回的支付信息
|
|
*/
|
|
async function payH5InEquipment(payInfo) {
|
|
try {
|
|
const res = await NET.request(API.gotoH5Pay, payInfo, 'POST')
|
|
location.replace(res.data.mwebUrl)
|
|
} catch (e) {
|
|
this.submitActive = true
|
|
uni.showToast({
|
|
title: '支付失败',
|
|
icon: 'none'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
} finally {
|
|
uni.hideLoading()
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 微信内H5处理
|
|
* @param payInfo 结算返回的支付信息
|
|
* @param orderId 订单ID
|
|
*/
|
|
async function payH5InWechat(payInfo) {
|
|
payInfo.paymentMode = 1
|
|
const res = await NET.request(API.gotoPay, payInfo, 'POST')
|
|
jweixin.config({
|
|
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
|
|
appId: res.data.appId, // 必填,公众号的唯一标识
|
|
timestamp: res.data.timeStamp, // 必填,生成签名的时间戳
|
|
nonceStr: res.data.nonceStr, // 必填,生成签名的随机串
|
|
signature: res.data.paySign, // 必填,签名,见附录1
|
|
jsApiList: ['chooseWXPay'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
|
|
});
|
|
jweixin.ready(function () {
|
|
jweixin.checkJsApi({
|
|
jsApiList: ['chooseWXPay'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
|
|
success: function (res) {
|
|
},
|
|
fail: function (res) {
|
|
}
|
|
});
|
|
jweixin.chooseWXPay({
|
|
timestamp: res.data
|
|
.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
|
|
nonceStr: res.data.nonceStr, // 支付签名随机串,不长于 32 位
|
|
package: res.data
|
|
.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)
|
|
signType: res.data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
|
|
paySign: res.data.paySign, // 支付签名
|
|
success: function (res) {
|
|
// 支付成功后的回调函数
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '支付成功'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/paySuccessful?orderId=' + payInfo.orderId
|
|
})
|
|
},
|
|
cancel: function (r) {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '用户取消支付'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
},
|
|
fail: function (res) {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '微信内支付错误'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
}
|
|
});
|
|
});
|
|
jweixin.error(function (res) {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '微信内支付加载失败',
|
|
duration: 3000
|
|
});
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
});
|
|
}
|
|
|
|
/**
|
|
* H5拉起支付
|
|
* @param payInfo 结算返回的支付信息
|
|
*/
|
|
async function h5Pay(payInfo) {
|
|
let ua = navigator.userAgent.toLowerCase();
|
|
if (ua.match(/MicroMessenger/i) == "micromessenger") {
|
|
await payH5InWechat(payInfo)
|
|
} else {
|
|
await payH5InEquipment(payInfo)
|
|
}
|
|
}
|
|
|
|
// #endif
|
|
|
|
// #ifdef MP-ALIPAY
|
|
/**
|
|
* 支付宝小程序拉起支付
|
|
* @param payInfo 结算返回的支付信息
|
|
* @return {Promise<void>}
|
|
*/
|
|
async function aliPay(payInfo) {
|
|
try {
|
|
const res = await NET.request(API.gotoPay, payInfo, 'POST')
|
|
uni.requestPayment({
|
|
provider: 'alipay',
|
|
orderInfo: res.data.tradeNo,
|
|
success: function (payRes) {
|
|
if (payRes.resultCode == '6001') {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '取消支付'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
}
|
|
if (payRes.resultCode == '9000') {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '支付成功'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/paySuccessful?orderId=' + orderId
|
|
})
|
|
}
|
|
},
|
|
fail: function (err) {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '支付取消'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
}
|
|
});
|
|
} catch (e) {
|
|
uni.showToast({
|
|
title: '支付宝支付异常',
|
|
icon: 'none'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
} finally {
|
|
uni.hideLoading()
|
|
}
|
|
}
|
|
|
|
// #endif
|
|
|
|
// #ifdef MP-WEIXIN
|
|
/**
|
|
* 微信小程序拉起支付
|
|
* @param payInfo
|
|
* @return {Promise<void>}
|
|
*/
|
|
async function wechatPay(payInfo) {
|
|
try {
|
|
const res = await NET.request(API.gotoPay, payInfo, 'POST')
|
|
|
|
console.log(res)
|
|
// WeixinJSBridge.invoke(
|
|
// 'getBrandWCPayRequest', {
|
|
// "appId":res.data.appId,
|
|
// "timeStamp":res.data.timeStamp,
|
|
// "nonceStr":res.data.nonceStr,
|
|
// "package":res.data.package,
|
|
// "signType":res.data.signType,
|
|
// "paySign":res.data.paySign
|
|
// },
|
|
// async function(res){
|
|
// if(res.err_msg == "get_brand_wcpay_request:ok" ){
|
|
// // 拼团微信支付成功回调
|
|
// if (payInfo.collageId) {
|
|
// await NET.request(API.paySuccess, {
|
|
// orderId: payInfo.orderId,
|
|
// collageId: payInfo.collageId
|
|
// }, 'POST')
|
|
// }
|
|
// uni.showToast({
|
|
// icon: 'none',
|
|
// title: '支付成功'
|
|
// })
|
|
// //console.log(submitResult.orderId, 'order Id')
|
|
// uni.navigateTo({
|
|
// url: '/pages_category_page1/orderModule/paySuccessful?orderId=' + payInfo.orderId
|
|
// })
|
|
// } else if(res.err_msg == "get_brand_wcpay_request:cancel" ){
|
|
// uni.showToast({
|
|
// icon: 'none',
|
|
// title: '用户取消支付'
|
|
// })
|
|
// uni.navigateTo({
|
|
// url: '/pages_category_page1/orderModule/index?type=1'
|
|
// })
|
|
// } else {
|
|
// uni.showToast({
|
|
// title: '微信支付拉起失败',
|
|
// icon: 'none'
|
|
// })
|
|
// uni.navigateTo({
|
|
// url: '/pages_category_page1/orderModule/index?type=1'
|
|
// })
|
|
// }
|
|
// });
|
|
|
|
// get_brand_wcpay_request:ok 支付成功
|
|
// get_brand_wcpay_request:cancel 支付过程中用户取消
|
|
// get_brand_wcpay_request:fail 支付失败
|
|
uni.requestPayment({
|
|
provider: 'wxpay',
|
|
timeStamp: res.data.timeStamp,
|
|
nonceStr: res.data.nonceStr,
|
|
package: res.data.package,
|
|
signType: res.data.signType,
|
|
paySign: res.data.paySign,
|
|
success: async (payRes) => {
|
|
// 拼团微信支付成功回调
|
|
if (payInfo.collageId) {
|
|
await NET.request(API.paySuccess, {
|
|
orderId: payInfo.orderId,
|
|
collageId: payInfo.collageId
|
|
}, 'POST')
|
|
}
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '支付成功'
|
|
})
|
|
//console.log(submitResult.orderId, 'order Id')
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/paySuccessful?orderId=' + payInfo.orderId
|
|
})
|
|
},
|
|
fail: function (err) {
|
|
console.log(err)
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '用户取消支付'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
}
|
|
})
|
|
} catch (e) {
|
|
console.log(e)
|
|
uni.showToast({
|
|
title: '微信支付拉起失败',
|
|
icon: 'none'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
}
|
|
}
|
|
|
|
// #endif
|
|
|
|
// #ifdef APP-PLUS
|
|
/**
|
|
* App拉起微信支付
|
|
* @param payInfo
|
|
* @return {Promise<void>}
|
|
*/
|
|
async function appWechatPay(payInfo) {
|
|
try {
|
|
const res = await NET.request(API.gotoAppPay, payInfo, 'POST')
|
|
const obj = {
|
|
appid: res.data.appId,
|
|
noncestr: res.data.nonceStr,
|
|
package: 'Sign=WXPay',
|
|
prepayid: res.data.prepayId,
|
|
timestamp: res.data.timeStamp,
|
|
sign: res.data.paySign,
|
|
partnerid: res.data.partnerId
|
|
}
|
|
uni.requestPayment({
|
|
provider: 'wxpay',
|
|
orderInfo: obj,
|
|
success: function (payRes) {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '支付成功'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/paySuccessful?orderId=' + payInfo.orderId
|
|
})
|
|
},
|
|
fail: function (err) {
|
|
uni.showToast({
|
|
icon: 'none',
|
|
title: '用户取消支付'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
}
|
|
})
|
|
} catch (e) {
|
|
uni.showToast({
|
|
title: 'APP拉起微信支付失败',
|
|
icon: 'none'
|
|
})
|
|
uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=1'
|
|
})
|
|
} finally {
|
|
uni.hideLoading()
|
|
}
|
|
}
|
|
|
|
// #endif
|
|
|
|
/**
|
|
* 处理支付
|
|
* @param submitResult 结算结果
|
|
*/
|
|
export async function handleDoPay(submitResult) {
|
|
uni.showLoading({
|
|
mask: true,
|
|
title: '支付中...',
|
|
})
|
|
const {paymentMode} = submitResult
|
|
if (paymentMode === 1) {
|
|
// 微信支付
|
|
// #ifdef APP-PLUS
|
|
await appWechatPay(submitResult)
|
|
// #endif
|
|
// #ifdef MP-WEIXIN
|
|
await wechatPay(submitResult)
|
|
// #endif
|
|
// #ifdef H5
|
|
await h5Pay(submitResult)
|
|
// #endif
|
|
} else if ([2, 3].includes(paymentMode)) {
|
|
// 支付宝
|
|
// #ifdef MP-ALIPAY
|
|
await aliPay(submitResult)
|
|
// #endif
|
|
// #ifndef MP-ALIPAY
|
|
// await appWechatPay(submitResult,this.orderId)
|
|
console.error("支付宝相关支付暂时只支持支付宝小程序")
|
|
throw new Error('支付宝相关支付暂时只支持支付宝小程序')
|
|
// #endif
|
|
}
|
|
//#ifndef H5
|
|
// setTimeout(()=>{
|
|
// uni.navigateTo({
|
|
// url: '/pages_category_page1/orderModule/index?type=2'
|
|
// })
|
|
// },1000)
|
|
//#endif
|
|
/* uni.navigateTo({
|
|
url: '/pages_category_page1/orderModule/index?type=2'
|
|
})*/
|
|
// uni.hideLoading()
|
|
|
|
|
|
}
|