From cae46224a3f2be7f768447653f4908de85ad7e1d Mon Sep 17 00:00:00 2001 From: kron Date: Sat, 12 Jul 2025 17:12:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E6=94=AF=E4=BB=98=E5=8A=9F?= =?UTF-8?q?=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apis.js | 10 ++++++++-- src/constants.js | 1 + src/pages/be-vip.vue | 29 ++++++++++++++++++++++++----- src/pages/order-detail.vue | 30 +++++++++++++++++++++++++++++- src/pages/orders.vue | 6 +++--- src/util.js | 4 ++-- src/websocket.js | 8 ++++++-- 7 files changed, 73 insertions(+), 15 deletions(-) diff --git a/src/apis.js b/src/apis.js index ac28c0f..21405e6 100644 --- a/src/apis.js +++ b/src/apis.js @@ -26,6 +26,14 @@ function request(method, url, data = {}) { resolve({}); return; } + if (message === "ERROR_ORDER_UNPAY") { + uni.showToast({ + title: "当前有未支付订单", + icon: "none", + }); + resolve({}); + return; + } uni.showToast({ title: message, icon: "none", @@ -260,7 +268,6 @@ export const createOrderAPI = (vipId) => { return request("POST", "/user/order/create", { vipId, quanity: 1, - mockTest: true, tradeType: "mini", payType: "wxpay", }); @@ -269,7 +276,6 @@ export const createOrderAPI = (vipId) => { export const payOrderAPI = (id) => { return request("POST", "/user/order/pay", { id, - mockTest: true, tradeType: "mini", payType: "wxpay", }); diff --git a/src/constants.js b/src/constants.js index d80cf7a..e4aec12 100644 --- a/src/constants.js +++ b/src/constants.js @@ -19,6 +19,7 @@ export const MESSAGETYPES = { HalfTimeOver: 388606440, BackToGame: 1899960424, FinalShootResult: 3813452544, + PaySuccess: 3793388244, }; export const topThreeColors = ["#FFD947", "#D2D2D2", "#FFA515"]; diff --git a/src/pages/be-vip.vue b/src/pages/be-vip.vue index 571de72..3e49ff5 100644 --- a/src/pages/be-vip.vue +++ b/src/pages/be-vip.vue @@ -5,12 +5,13 @@ import Avatar from "@/components/Avatar.vue"; import SButton from "@/components/SButton.vue"; import SModal from "@/components/SModal.vue"; import Signin from "@/components/Signin.vue"; -import { createOrderAPI } from "@/apis"; +import { createOrderAPI, getHomeData } from "@/apis"; import { formatTimestamp } from "@/util"; import useStore from "@/store"; import { storeToRefs } from "pinia"; const store = useStore(); const { user, config } = storeToRefs(store); +const { updateUser } = store; const selectedVIP = ref(0); const showModal = ref(false); @@ -23,10 +24,28 @@ const onPay = async () => { const result = await createOrderAPI( config.value.vipMenus[selectedVIP.value].id ); - uni.showToast({ - title: "创建成功", - icon: "none", - }); + if (!result.pay) return; + const params = result.pay.order.jsApi.params; + if (params) { + wx.requestPayment({ + timeStamp: params.timeStamp, // 时间戳 + nonceStr: params.nonceStr, // 随机字符串 + package: params.package, // 统一下单接口返回的 prepay_id 参数值,格式:prepay_id=*** + paySign: params.paySign, // 签名 + signType: "RSA", // 签名类型,默认为RSA + async success(res) { + const result = await getHomeData(); + if (result.user) updateUser(result.user); + uni.showToast({ + title: "支付成功", + icon: "none", + }); + }, + fail(res) { + console.log("pay error", res); + }, + }); + } } } }; diff --git a/src/pages/order-detail.vue b/src/pages/order-detail.vue index f6922b4..6df1a05 100644 --- a/src/pages/order-detail.vue +++ b/src/pages/order-detail.vue @@ -2,10 +2,14 @@ import { ref, onMounted } from "vue"; import Container from "@/components/Container.vue"; import SButton from "@/components/SButton.vue"; -import { payOrderAPI, cancelOrderListAPI } from "@/apis"; +import { payOrderAPI, cancelOrderListAPI, getHomeData } from "@/apis"; import { orderStatusNames } from "@/constants"; +import useStore from "@/store"; +const store = useStore(); +const { updateUser } = store; const data = ref({}); +const loading = ref(false); onMounted(() => { const order = uni.getStorageSync("order"); @@ -14,6 +18,29 @@ onMounted(() => { const goPay = async () => { const result = await payOrderAPI(data.value.orderId); + const params = result.jsApi.params; + if (params) { + loading.value = true; + wx.requestPayment({ + timeStamp: params.timeStamp, // 时间戳 + nonceStr: params.nonceStr, // 随机字符串 + package: params.package, // 统一下单接口返回的 prepay_id 参数值,格式:prepay_id=*** + paySign: params.paySign, // 签名 + signType: "RSA", // 签名类型,默认为RSA + async success(res) { + const result = await getHomeData(); + if (result.user) updateUser(result.user); + uni.showToast({ + title: "支付成功", + icon: "none", + }); + }, + fail(res) { + loading.value = false; + console.log("pay error", res); + }, + }); + } }; const cancelOrder = async () => { @@ -36,6 +63,7 @@ const cancelOrder = async () => { 去支付 + 取消订单 diff --git a/src/pages/orders.vue b/src/pages/orders.vue index dcd99a7..8993cdd 100644 --- a/src/pages/orders.vue +++ b/src/pages/orders.vue @@ -11,10 +11,10 @@ const { user, config } = storeToRefs(store); const getStatusColor = (status) => { switch (status) { - case "4": - return "#35CD67"; - case "5": + case 1: return "#EF4848"; + case 4: + return "#35CD67"; default: return "#999999"; } diff --git a/src/util.js b/src/util.js index da0d3bb..7822454 100644 --- a/src/util.js +++ b/src/util.js @@ -1,12 +1,12 @@ import websocket from "@/websocket"; export const formatTimestamp = (timestamp) => { - const date = new Date(timestamp); + const date = new Date(timestamp * 1000); const year = date.getFullYear(); const month = date.getMonth() + 1; const day = date.getDate(); - return `${year}.${month}.${day}`; + return `${year}年${month}月${day}号`; }; export const checkConnection = () => { diff --git a/src/websocket.js b/src/websocket.js index fdb6add..3b1764a 100644 --- a/src/websocket.js +++ b/src/websocket.js @@ -32,10 +32,11 @@ function createWebSocket(token, onMessage) { // 接收消息 uni.onSocketMessage((res) => { const data = JSON.parse(res.data); - if(data.event === 'pong' || !data.data.updates) return; + if (data.event === "pong" || !data.data.updates) return; if (onMessage) onMessage(data.data.updates); const msg = data.data.updates[0]; - if (msg && msg.constructor === MESSAGETYPES.BackToGame) { + if (!msg) return; + if (msg.constructor === MESSAGETYPES.BackToGame) { const { battleInfo } = msg; uni.setStorageSync(`battle-${battleInfo.id}`, battleInfo); // 约战 @@ -57,6 +58,9 @@ function createWebSocket(token, onMessage) { } } } + if (msg.constructor === MESSAGETYPES.PaySuccess) { + console.log(1111111, msg); + } }); // 错误处理