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

View File

@@ -7,14 +7,40 @@ export function delay(ms: number) {
export async function payOrder(params) { export async function payOrder(params) {
const { timeStamp, nonceStr, package: _package, signType, paySign } = params; const { timeStamp, nonceStr, package: _package, signType, paySign } = params;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
Taro.requestPayment({ let settled = false;
timeStamp, const timeout = setTimeout(() => {
nonceStr, if (settled) return;
package: _package, settled = true;
signType, reject(new Error("支付响应超时,请在订单页确认支付结果"));
paySign, }, 20000);
success: resolve,
fail: reject.bind(null, new Error("支付失败")), 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("支付拉起失败,请重试")));
}
}); });
} }