This commit is contained in:
sjk
2025-11-17 14:11:46 +08:00
commit ad4a600af9
1659 changed files with 171560 additions and 0 deletions

View File

@@ -0,0 +1,253 @@
import Dialog from 'tdesign-miniprogram/dialog/index';
import Toast from 'tdesign-miniprogram/toast/index';
import { dispatchCommitPay } from '../../../services/order/orderConfirm';
import { config } from '../../../config/index';
// 真实的提交支付
export const commitPay = (params) => {
console.log('=== pay.js commitPay 调试 ===');
console.log('接收到的params:', params);
console.log('params.couponList:', params.couponList);
if (params.couponList && params.couponList.length > 0) {
console.log('第一张优惠券详情:', params.couponList[0]);
console.log('优惠券ID字段检查:', {
id: params.couponList[0].id,
couponId: params.couponList[0].couponId,
userCouponId: params.couponList[0].userCouponId,
allFields: Object.keys(params.couponList[0])
});
}
return dispatchCommitPay({
goodsRequestList: params.goodsRequestList, // 待结算的商品集合
invoiceRequest: params.invoiceRequest, // 发票信息
// isIgnore: params.isIgnore || false, // 删掉 是否忽视库存不足和商品失效,继续结算,true=继续结算 购物车请赋值false
userAddressReq: params.userAddressReq, // 地址信息(用户在购物选择更换地址)
currency: params.currency || 'CNY', // 支付货币: 人民币=CNY美元=USD
logisticsType: params.logisticsType || 1, // 配送方式 0=无需配送 1=快递 2=商家 3=同城 4=自提
// orderMark: params.orderMark, // 下单备注
orderType: params.orderType || 0, // 订单类型 0=普通订单 1=虚拟订单
payType: params.payType || 1, // 支付类型(0=线上、1=线下)
totalAmount: params.totalAmount, // 新增字段"totalAmount"总的支付金额
userName: params.userName, // 用户名
payWay: 1,
authorizationCode: '', //loginCode, // 登录凭证
storeInfoList: params.storeInfoList, //备注信息列表
couponList: params.couponList,
groupInfo: params.groupInfo,
});
};
export const paySuccess = (payOrderInfo, pageContext = null) => {
const { payAmt, tradeNo, groupId, promotionId } = payOrderInfo;
// 支付成功
console.log('支付成功,准备跳转到支付结果页面', payOrderInfo);
// 显示成功提示,如果有页面上下文则使用,否则使用全局提示
if (pageContext) {
Toast({
context: pageContext,
selector: '#t-toast',
message: '支付成功',
duration: 1500,
icon: 'check-circle',
});
} else {
wx.showToast({
title: '支付成功',
icon: 'success',
duration: 1500
});
}
const params = {
totalPaid: payAmt,
orderNo: tradeNo,
};
if (groupId) {
params.groupId = groupId;
}
if (promotionId) {
params.promotionId = promotionId;
}
const paramsStr = Object.keys(params)
.map((k) => `${k}=${params[k]}`)
.join('&');
// 确保提示显示完成后再跳转
setTimeout(() => {
console.log('准备跳转到支付结果页面', `/pages/order/pay-result/index?${paramsStr}`);
// 直接使用redirectTo进行页面跳转
wx.redirectTo({
url: `/pages/order/pay-result/index?${paramsStr}`,
success: () => {
console.log('跳转到支付结果页面成功');
},
fail: (err) => {
console.error('跳转到支付结果页面失败', err);
// 如果redirectTo失败尝试使用navigateTo
wx.navigateTo({
url: `/pages/order/pay-result/index?${paramsStr}`,
fail: (navErr) => {
console.error('navigateTo也失败了', navErr);
// 最后尝试使用reLaunch
wx.reLaunch({
url: `/pages/order/pay-result/index?${paramsStr}`,
fail: (relaunchErr) => {
console.error('所有跳转方式都失败了', relaunchErr);
}
});
}
});
}
});
}, 1600); // 延迟1.6秒后跳转确保Toast显示完成
};
export const payFail = (payOrderInfo, resultMsg) => {
if (resultMsg === 'requestPayment:fail cancel') {
if (payOrderInfo.dialogOnCancel) {
//结算页取消付款dialog提示
Dialog.confirm({
title: '是否放弃付款',
content: '商品可能很快就会被抢空哦,是否放弃付款?',
confirmBtn: '放弃',
cancelBtn: '继续付款',
}).then(() => {
wx.redirectTo({ url: '/pages/order/order-list/index' });
});
} else {
//订单列表页订单详情页取消付款toast提示
Toast({
context: this,
selector: '#t-toast',
message: '支付取消',
duration: 2000,
icon: 'close-circle',
});
}
} else {
Toast({
context: this,
selector: '#t-toast',
message: `支付失败:${resultMsg}`,
duration: 2000,
icon: 'close-circle',
});
setTimeout(() => {
wx.redirectTo({ url: '/pages/order/order-list/index' });
}, 2000);
}
};
// 微信支付方式
export const wechatPayOrder = (payOrderInfo, pageContext = null) => {
console.log('开始微信支付流程', payOrderInfo);
return new Promise((resolve, reject) => {
// 获取token
const token = wx.getStorageSync('token');
if (!token) {
wx.showModal({
title: '提示',
content: '请先登录后再进行支付',
showCancel: true,
cancelText: '取消',
confirmText: '去登录',
success: (res) => {
if (res.confirm) {
wx.navigateTo({
url: '/pages/login/index'
});
}
}
});
reject(new Error('未登录'));
return;
}
// 显示支付中提示
wx.showLoading({ title: '创建支付订单...' });
// 调用后端创建支付订单API
wx.request({
url: `${config.apiBase}/payment/create`,
method: 'POST',
header: {
'Authorization': `Bearer ${token}`,
'Content-Type': 'application/json'
},
data: {
orderNo: payOrderInfo.tradeNo,
paymentMethod: 'wechat'
},
success: (res) => {
console.log('创建支付订单API响应:', res);
if (res.statusCode === 200 && res.data.code === 200) {
const paymentData = res.data.data;
// 如果返回了微信支付参数调用微信支付SDK
if (paymentData && paymentData.payInfo) {
wx.hideLoading();
wx.showLoading({ title: '调起微信支付...' });
try {
const payInfo = typeof paymentData.payInfo === 'string'
? JSON.parse(paymentData.payInfo)
: paymentData.payInfo;
console.log('微信支付参数:', payInfo);
wx.requestPayment({
timeStamp: payInfo.timeStamp,
nonceStr: payInfo.nonceStr,
package: payInfo.package,
signType: payInfo.signType || 'RSA',
paySign: payInfo.paySign,
success: function (payRes) {
wx.hideLoading();
console.log('微信支付成功:', payRes);
paySuccess(payOrderInfo, pageContext);
resolve();
},
fail: function (payErr) {
wx.hideLoading();
console.error('微信支付失败:', payErr);
payFail(payOrderInfo, payErr.errMsg);
reject(payErr);
}
});
} catch (parseErr) {
wx.hideLoading();
console.error('解析支付参数失败:', parseErr);
payFail(payOrderInfo, '支付参数解析失败');
reject(parseErr);
}
} else {
// 如果没有返回微信支付参数,可能是模拟支付成功
wx.hideLoading();
console.log('支付处理完成,调用支付成功回调');
paySuccess(payOrderInfo, pageContext);
resolve();
}
} else {
wx.hideLoading();
console.error('创建支付订单失败:', res.data.message);
const errorMsg = res.data.message || '创建支付订单失败';
payFail(payOrderInfo, errorMsg);
reject(new Error(errorMsg));
}
},
fail: (err) => {
wx.hideLoading();
console.error('创建支付订单请求失败:', err);
const errorMsg = '网络错误,支付失败';
payFail(payOrderInfo, errorMsg);
reject(err);
}
});
});
};