This commit is contained in:
张成
2026-04-22 10:21:53 +08:00
parent b5081afb2c
commit 33ab46aec0
2 changed files with 41 additions and 25 deletions

View File

@@ -23,7 +23,6 @@ import {
isPhoneNumber,
genGameLength,
} from "@/utils";
import { getStorage, setStorage } from "@/store/storage";
import { useGlobalStore } from "@/store/global";
import { useOrder } from "@/store/orderStore";
import detailService, { GameData } from "@/services/detailService";
@@ -692,35 +691,26 @@ const OrderCheck = () => {
}
setPaying(true);
let payment_params = {};
let payment_params: any = {};
try {
payment_params = await getPaymentParams();
if (!id) {
setStorage("backFlag", "1");
Taro.redirectTo({
url: `/order_pages/orderDetail/index?id=${payment_params.order_id}`,
});
}
await payOrder(payment_params);
Taro.showToast({
title: "支付成功",
icon: "success",
});
const backFlag = getStorage("backFlag");
if (backFlag === "1") {
setStorage("backFlag", "0");
Taro.navigateBack();
// 支付成功后再跳转,避免部分机型(如华为)在页面切换中拉起支付导致卡死
if (!id && payment_params?.order_id) {
Taro.redirectTo({
url: `/order_pages/orderDetail/index?id=${payment_params.order_id}`,
});
}
// Taro.navigateBack({
// delta: 1,
// });
} catch (error) {
Taro.showToast({
title: error.message,
icon: "none",
});
} finally {
setStorage("backFlag", "0");
init();
setPaying(false);
}

View File

@@ -7,14 +7,40 @@ export function delay(ms: number) {
export async function payOrder(params) {
const { timeStamp, nonceStr, package: _package, signType, paySign } = params;
return new Promise((resolve, reject) => {
Taro.requestPayment({
timeStamp,
nonceStr,
package: _package,
signType,
paySign,
success: resolve,
fail: reject.bind(null, new Error("支付失败")),
});
let settled = false;
const timeout = setTimeout(() => {
if (settled) return;
settled = true;
reject(new Error("支付响应超时,请在订单页确认支付结果"));
}, 20000);
const finish = (cb: () => void) => {
if (settled) return;
settled = true;
clearTimeout(timeout);
cb();
};
try {
Taro.requestPayment({
timeStamp,
nonceStr,
package: _package,
signType,
paySign,
success: (res) => finish(() => resolve(res)),
fail: (err: any) =>
finish(() => {
const errMsg = String(err?.errMsg || "");
if (errMsg.includes("cancel")) {
reject(new Error("已取消支付"));
return;
}
reject(new Error("支付失败,请重试"));
}),
});
} catch {
finish(() => reject(new Error("支付拉起失败,请重试")));
}
});
}