From 33393bc31e8438557a2bec7c525f856b825741a4 Mon Sep 17 00:00:00 2001
From: gonghaoxing <478185430@qq.com>
Date: Tue, 21 Oct 2025 17:33:05 +0800
Subject: [PATCH] =?UTF-8?q?'=E6=94=AF=E4=BB=98=E8=B0=83=E8=AF=95'?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
frontend/env | 4 +-
frontend/pages/activity/groupon/order.vue | 7 +-
frontend/pages/order/confirm.vue | 9 +-
frontend/pages/order/detail.vue | 7 +-
frontend/pages/order/list.vue | 7 +-
frontend/pages/pay/recharge.vue | 9 +-
frontend/pages/user/wallet/money.vue | 5 +-
.../s-wallet-card/s-wallet-card.vue | 10 +-
frontend/sheep/platform/pay.js | 133 +++++++++++++++---
.../sheep/platform/provider/ccblife/api.js | 7 +
.../sheep/platform/provider/ccblife/index.js | 131 ++++++++++++++++-
11 files changed, 284 insertions(+), 45 deletions(-)
diff --git a/frontend/env b/frontend/env
index 9b8f563..19fcf51 100644
--- a/frontend/env
+++ b/frontend/env
@@ -1,8 +1,8 @@
# 正式环境接口域名
-SHOPRO_BASE_URL = https://v3.shopro.top
+SHOPRO_BASE_URL = https://admin.fengketrade.com
# 开发环境接口域名
-SHOPRO_DEV_BASE_URL = https://v3.shopro.top
+SHOPRO_DEV_BASE_URL = https://admin.fengketrade.com
# 开发环境运行端口
SHOPRO_DEV_PORT = 3000
diff --git a/frontend/pages/activity/groupon/order.vue b/frontend/pages/activity/groupon/order.vue
index 90e6e73..b0cfea5 100644
--- a/frontend/pages/activity/groupon/order.vue
+++ b/frontend/pages/activity/groupon/order.vue
@@ -132,11 +132,10 @@
});
}
- // 继续支付
+ // 继续支付 - 直接调起建行支付
function onPay(orderSN) {
- sheep.$router.go('/pages/pay/index', {
- orderSN,
- });
+ // ⭐ 直接调用建行支付(跳过收银台页面)
+ sheep.$platform.pay('ccb', 'goods', orderSN);
}
// 评价
diff --git a/frontend/pages/order/confirm.vue b/frontend/pages/order/confirm.vue
index a73866e..c17188d 100644
--- a/frontend/pages/order/confirm.vue
+++ b/frontend/pages/order/confirm.vue
@@ -263,13 +263,16 @@
sheep.$store('cart').submitUpdateList();
}
if (data.status === 'paid') {
+ // 订单已支付,直接跳转到支付结果页
sheep.$router.redirect('/pages/pay/result', {
orderSN: data.order_sn,
+ payState: 'success',
+ orderType: 'goods',
});
} else {
- sheep.$router.redirect('/pages/pay/index', {
- orderSN: data.order_sn,
- });
+ // ⭐ 订单未支付,直接调起建行支付(跳过收银台页面)
+ // 调用建行支付方法
+ sheep.$platform.pay('ccb', 'goods', data.order_sn);
}
}
}
diff --git a/frontend/pages/order/detail.vue b/frontend/pages/order/detail.vue
index 21191c5..53071eb 100644
--- a/frontend/pages/order/detail.vue
+++ b/frontend/pages/order/detail.vue
@@ -369,11 +369,10 @@
});
return refundFee;
});
- // 去支付
+ // 去支付 - 直接调起建行支付
function onPay(orderSN) {
- sheep.$router.go('/pages/pay/index', {
- orderSN,
- });
+ // ⭐ 直接调用建行支付(跳过收银台页面)
+ sheep.$platform.pay('ccb', 'goods', orderSN);
}
function onGoodsDetail(id) {
diff --git a/frontend/pages/order/list.vue b/frontend/pages/order/list.vue
index 7233993..d99c659 100644
--- a/frontend/pages/order/list.vue
+++ b/frontend/pages/order/list.vue
@@ -316,11 +316,10 @@
});
}
- // 继续支付
+ // 继续支付 - 直接调起建行支付
function onPay(orderSN) {
- sheep.$router.go('/pages/pay/index', {
- orderSN,
- });
+ // ⭐ 直接调用建行支付(跳过收银台页面)
+ sheep.$platform.pay('ccb', 'goods', orderSN);
}
// 评价
diff --git a/frontend/pages/pay/recharge.vue b/frontend/pages/pay/recharge.vue
index 531e1a9..23c892b 100644
--- a/frontend/pages/pay/recharge.vue
+++ b/frontend/pages/pay/recharge.vue
@@ -10,7 +10,8 @@
当前余额(元)
{{ userInfo.money }}
-
+
+
@@ -77,10 +78,8 @@ async function onConfirm() {
// #ifdef MP
sheep.$platform.useProvider('wechat').subscribeMessage('money_change');
// #endif
- sheep.$router.go('/pages/pay/index', {
- orderSN: data.order_sn,
- type: 'recharge',
- });
+ // ⭐ 直接调用建行支付(跳过收银台页面)
+ sheep.$platform.pay('ccb', 'recharge', data.order_sn);
}
}
onLoad(() => {
diff --git a/frontend/pages/user/wallet/money.vue b/frontend/pages/user/wallet/money.vue
index 1711649..edce563 100644
--- a/frontend/pages/user/wallet/money.vue
+++ b/frontend/pages/user/wallet/money.vue
@@ -13,9 +13,10 @@
{{ state.showMoney ? userInfo.money : '*****' }}
-
diff --git a/frontend/sheep/components/s-wallet-card/s-wallet-card.vue b/frontend/sheep/components/s-wallet-card/s-wallet-card.vue
index f725ad8..b1efed2 100644
--- a/frontend/sheep/components/s-wallet-card/s-wallet-card.vue
+++ b/frontend/sheep/components/s-wallet-card/s-wallet-card.vue
@@ -1,6 +1,7 @@
diff --git a/frontend/sheep/platform/pay.js b/frontend/sheep/platform/pay.js
index d186e13..e8493b8 100644
--- a/frontend/sheep/platform/pay.js
+++ b/frontend/sheep/platform/pay.js
@@ -25,6 +25,9 @@ export default class SheepPay {
}
payAction() {
+ // 调试日志:打印当前平台和支付方式
+ console.log('[支付调试] 当前平台:', sheep.$platform.name, '支付方式:', this.payment);
+
const payAction = {
WechatOfficialAccount: {
wechat: () => {
@@ -99,7 +102,43 @@ export default class SheepPay {
this.offlinePay();
}
},
+ // ⭐ 建行生活平台(CcbLife)
+ CcbLife: {
+ wechat: () => {
+ this.ccbPay(); // 在建行生活内使用建行支付
+ },
+ alipay: () => {
+ sheep.$helper.toast('请使用建行支付');
+ },
+ ccb: () => {
+ this.ccbPay(); // 建行支付
+ },
+ money: () => {
+ this.moneyPay();
+ },
+ offline: () => {
+ this.offlinePay();
+ }
+ },
};
+
+ // 防御性检查:确保平台配置存在
+ if (!payAction[sheep.$platform.name]) {
+ console.error('[支付错误] 未知平台:', sheep.$platform.name);
+ sheep.$helper.toast('当前平台不支持该支付方式');
+ return;
+ }
+
+ // 防御性检查:确保支付方式存在
+ if (!payAction[sheep.$platform.name][this.payment]) {
+ console.error('[支付错误] 平台不支持该支付方式:', {
+ platform: sheep.$platform.name,
+ payment: this.payment
+ });
+ sheep.$helper.toast(`当前平台不支持${this.payment}支付`);
+ return;
+ }
+
return payAction[sheep.$platform.name][this.payment]();
}
@@ -290,41 +329,86 @@ export default class SheepPay {
// 建行生活支付
async ccbPay() {
let that = this;
+ console.log('[建行支付] ========== 开始建行支付流程 ==========');
+ console.log('[建行支付] 订单号:', this.orderSN);
+ console.log('[建行支付] 订单类型:', this.orderType);
// 检查是否在建行App内
+ console.log('[建行支付] 检查建行App环境...');
+ console.log('[建行支付] isInCcbApp:', CcbLifePlatform.isInCcbApp);
+ console.log('[建行支付] User Agent:', navigator.userAgent);
+ console.log('[建行支付] URL参数:', location.search);
+
if (!CcbLifePlatform.isInCcbApp) {
+ console.error('[建行支付] ❌ 不在建行App内');
sheep.$helper.toast('请在建行生活App内使用建行支付');
return;
}
+ console.log('[建行支付] ✅ 确认在建行App内');
// 获取订单ID(从订单号查询)
- const orderInfo = await sheep.$api.order.detail(this.orderSN);
- if (!orderInfo || orderInfo.code !== 1) {
- sheep.$helper.toast('获取订单信息失败');
- return;
- }
+ console.log('[建行支付] 步骤1: 查询订单信息...');
+ try {
+ const orderInfo = await sheep.$api.order.detail(this.orderSN);
+ console.log('[建行支付] 订单查询结果:', orderInfo);
+
+ if (!orderInfo || orderInfo.code !== 1) {
+ console.error('[建行支付] ❌ 获取订单信息失败:', orderInfo);
+ sheep.$helper.toast('获取订单信息失败');
+ return;
+ }
- const orderId = orderInfo.data.id;
+ const orderId = orderInfo.data.id;
+ console.log('[建行支付] ✅ 订单ID:', orderId);
+ console.log('[建行支付] 订单金额:', orderInfo.data.pay_fee);
+ console.log('[建行支付] 订单状态:', orderInfo.data.status);
- // 调用后端生成支付串
- const paymentResult = await ccbApi.createPayment(orderId);
+ // 调用后端生成支付串
+ console.log('[建行支付] 步骤2: 调用后端生成支付串...');
+ console.log('[建行支付] 请求参数:', { order_id: orderId });
+
+ const paymentResult = await ccbApi.createPayment(orderId);
+ console.log('[建行支付] 支付串生成结果:', paymentResult);
- if (paymentResult.code !== 1) {
- sheep.$helper.toast(paymentResult.msg || '生成支付串失败');
+ if (paymentResult.code !== 1) {
+ console.error('[建行支付] ❌ 生成支付串失败:', paymentResult);
+ console.error('[建行支付] 错误信息:', paymentResult.msg);
+ console.error('[建行支付] 完整响应:', JSON.stringify(paymentResult));
+ sheep.$helper.toast(paymentResult.msg || '生成支付串失败');
+ return;
+ }
+
+ console.log('[建行支付] ✅ 支付串生成成功');
+ console.log('[建行支付] 支付串长度:', paymentResult.data.payment_string?.length);
+ console.log('[建行支付] 支付流水号:', paymentResult.data.pay_flow_id);
+ console.log('[建行支付] 支付金额:', paymentResult.data.amount);
+ } catch (error) {
+ console.error('[建行支付] ❌ 异常:', error);
+ console.error('[建行支付] 错误堆栈:', error.stack);
+ sheep.$helper.toast('支付准备失败: ' + error.message);
return;
}
// 调起建行支付
+ console.log('[建行支付] 步骤3: 调起建行收银台...');
try {
- const result = await CcbLifePlatform.payment({
+ const paymentParams = {
payment_string: paymentResult.data.payment_string,
order_id: orderId,
order_sn: this.orderSN
+ };
+ console.log('[建行支付] 调起参数:', {
+ order_id: paymentParams.order_id,
+ order_sn: paymentParams.order_sn,
+ payment_string_length: paymentParams.payment_string?.length
});
+
+ const result = await CcbLifePlatform.payment(paymentParams);
+ console.log('[建行支付] 收银台调起结果:', result);
if (result.code === 0) {
// ✅ 支付调起成功,开始轮询查询订单状态
- console.log('[建行支付] 支付调起成功,开始轮询查询订单状态');
+ console.log('[建行支付] ✅ 支付调起成功,开始轮询查询订单状态');
// 显示加载提示
uni.showLoading({
@@ -339,23 +423,31 @@ export default class SheepPay {
const pollPaymentStatus = async () => {
pollCount++;
+ console.log(`[建行支付] 轮询查询 ${pollCount}/${MAX_POLL_COUNT} 次...`);
try {
const statusResult = await ccbApi.queryPaymentStatus(orderId);
+ console.log('[建行支付] 查询结果:', statusResult);
if (statusResult.code === 1 && statusResult.data.is_paid) {
// ✅ 支付成功
uni.hideLoading();
- console.log('[建行支付] 订单已支付 order_id:' + orderId);
+ console.log('[建行支付] ✅ 订单已支付 order_id:' + orderId);
+ console.log('[建行支付] 支付时间:', statusResult.data.paid_time);
that.payResult('success');
return;
}
+ console.log('[建行支付] 订单状态:', statusResult.data.status);
+ console.log('[建行支付] 是否已支付:', statusResult.data.is_paid);
+
// 未支付,继续轮询
if (pollCount < MAX_POLL_COUNT) {
+ console.log(`[建行支付] ${POLL_INTERVAL/1000}秒后继续查询...`);
setTimeout(pollPaymentStatus, POLL_INTERVAL);
} else {
// 超时
+ console.warn('[建行支付] ⚠️ 轮询超时,可能支付未完成');
uni.hideLoading();
uni.showModal({
title: '提示',
@@ -369,7 +461,8 @@ export default class SheepPay {
});
}
} catch (error) {
- console.error('[建行支付] 查询状态失败:', error);
+ console.error('[建行支付] ❌ 查询状态失败:', error);
+ console.error('[建行支付] 错误详情:', error.message);
// 继续轮询(网络错误不中断)
if (pollCount < MAX_POLL_COUNT) {
@@ -387,18 +480,26 @@ export default class SheepPay {
} else {
// 支付失败或取消
+ console.error('[建行支付] ❌ 支付未成功:', result);
if (result.msg && result.msg.includes('取消')) {
+ console.log('[建行支付] 用户取消支付');
sheep.$helper.toast('支付已取消');
} else {
+ console.error('[建行支付] 支付失败原因:', result.msg);
sheep.$helper.toast(result.msg || '支付失败');
that.payResult('fail');
}
}
} catch (error) {
- console.error('[建行支付] 错误:', error);
- sheep.$helper.toast('支付失败');
+ console.error('[建行支付] ❌ 异常错误:', error);
+ console.error('[建行支付] 错误类型:', error.name);
+ console.error('[建行支付] 错误信息:', error.message);
+ console.error('[建行支付] 错误堆栈:', error.stack);
+ sheep.$helper.toast('支付失败: ' + error.message);
that.payResult('fail');
}
+
+ console.log('[建行支付] ========== 建行支付流程结束 ==========');
}
// 支付结果跳转,success:成功,fail:失败
diff --git a/frontend/sheep/platform/provider/ccblife/api.js b/frontend/sheep/platform/provider/ccblife/api.js
index a6cb5f1..fdd9542 100644
--- a/frontend/sheep/platform/provider/ccblife/api.js
+++ b/frontend/sheep/platform/provider/ccblife/api.js
@@ -45,6 +45,7 @@ const ccbApi = {
* 用于调起建行收银台
*/
createPayment: (orderId) => {
+ console.log('[建行API] 调用createPayment接口, order_id:', orderId);
return request({
url: '/ccbpayment/createPayment',
method: 'POST',
@@ -55,6 +56,12 @@ const ccbApi = {
showLoading: true,
auth: true
}
+ }).then(res => {
+ console.log('[建行API] createPayment响应:', res);
+ return res;
+ }).catch(err => {
+ console.error('[建行API] createPayment错误:', err);
+ return err;
});
},
diff --git a/frontend/sheep/platform/provider/ccblife/index.js b/frontend/sheep/platform/provider/ccblife/index.js
index bd53b8c..36703b1 100644
--- a/frontend/sheep/platform/provider/ccblife/index.js
+++ b/frontend/sheep/platform/provider/ccblife/index.js
@@ -42,6 +42,8 @@ const CcbLifePlatform = {
* 初始化
*/
init() {
+ console.log('[CcbLife] ========== 建行生活平台初始化 ==========');
+
// 检测环境
this.detectEnvironment();
@@ -50,29 +52,43 @@ const CcbLifePlatform = {
// this.setupBridge();
// }
- console.log('[CcbLife] 初始化完成, 是否在建行App内:', this.isInCcbApp);
+ console.log('[CcbLife] ✅ 初始化完成');
+ console.log('[CcbLife] 是否在建行App内:', this.isInCcbApp);
+ console.log('[CcbLife] 平台标识:', this.platform);
+ console.log('[CcbLife] ===========================================');
},
/**
* 检测运行环境
*/
detectEnvironment() {
+ console.log('[CcbLife] 开始检测运行环境...');
+
// #ifdef H5
const ua = navigator.userAgent.toLowerCase();
+ console.log('[CcbLife] User-Agent:', ua);
// 检查User-Agent
if (ua.indexOf('ccblife') > -1 || ua.indexOf('ccb') > -1) {
+ console.log('[CcbLife] ✅ 通过UA检测到建行App');
this.isInCcbApp = true;
return;
}
// 检查URL参数
const urlParams = this.getUrlParams();
+ console.log('[CcbLife] URL参数:', urlParams);
+
if (urlParams.ccbParamSJ || urlParams.from === 'ccblife') {
+ console.log('[CcbLife] ✅ 通过URL参数检测到建行App');
+ console.log('[CcbLife] ccbParamSJ:', urlParams.ccbParamSJ ? '存在' : '不存在');
+ console.log('[CcbLife] from:', urlParams.from);
this.isInCcbApp = true;
return;
}
+ console.log('[CcbLife] ❌ 未检测到建行App环境');
+
// ⚠️ 已移除 JSBridge 检查(目前不需要)
// if (window.WebViewJavascriptBridge || window.mbspay) {
// this.isInCcbApp = true;
@@ -83,10 +99,12 @@ const CcbLifePlatform = {
// #ifdef APP-PLUS
// 在APP中也可能通过插件方式集成建行SDK
// TODO: 检测建行SDK插件
+ console.log('[CcbLife] App环境,检测建行SDK插件...');
// #endif
// #ifdef MP-WEIXIN
// 小程序环境不支持建行生活
+ console.log('[CcbLife] 小程序环境,不支持建行生活');
this.isInCcbApp = false;
// #endif
},
@@ -424,6 +442,117 @@ const CcbLifePlatform = {
// // #endif
// },
+ /**
+ * 调起建行收银台
+ * 根据建行App服务方接入文档,使用支付串调起收银台
+ *
+ * @param {Object} options - 支付参数
+ * @param {String} options.payment_string - 支付串
+ * @param {Number} options.order_id - 订单ID
+ * @param {String} options.order_sn - 订单号
+ * @returns {Promise