|
|
/** * @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()
}
|