diff --git a/public/ccblife-demo.html b/public/ccblife-demo.html
index 3715b30..098bbaf 100644
--- a/public/ccblife-demo.html
+++ b/public/ccblife-demo.html
@@ -211,6 +211,7 @@
+
@@ -397,7 +398,19 @@
// 测试支付功能
function testPayment() {
- // 这里需要先调用后端接口生成支付串
+ // 检查是否已登录
+ var token = localStorage.getItem('ccb_token');
+ if (!token) {
+ showResult('错误:未登录\n\n请先执行"测试登录入库"获取 Token');
+ return;
+ }
+
+ // 检查是否在建行 App 内
+ if (!CcbLifeBridge.isInCcbApp()) {
+ showResult('警告:不在建行生活 App 内\n\n支付功能需要在建行 App 中才能调起');
+ }
+
+ // 输入订单ID
var orderId = prompt('请输入订单ID(测试用):', '1');
if (!orderId) {
@@ -405,13 +418,14 @@
}
showLoading(true);
+ showResult('正在生成支付串...\n1. 验证订单\n2. 生成支付串\n3. 调起建行支付');
- // 模拟调用后端生成支付串
+ // 调用后端生成支付串
fetch('/addons/shopro/ccbpayment/createPayment', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
- 'token': localStorage.getItem('ccb_token') || ''
+ 'token': token
},
body: JSON.stringify({
order_id: orderId
@@ -422,23 +436,131 @@
showLoading(false);
if (data.code === 1) {
- // 调起支付
- CcbLifeBridge.payment({
- payment_string: data.data.payment_string
- }, function(result) {
- if (result.success) {
- showResult('支付调起成功,请在建行 App 内完成支付');
- } else {
- showResult('支付调起失败:' + result.error);
- }
- });
+ var paymentData = data.data;
+
+ showResult('✅ 支付串生成成功!\n\n' +
+ '订单编号:' + paymentData.order_sn + '\n' +
+ '支付流水号:' + paymentData.pay_flow_id + '\n' +
+ '支付金额:¥' + paymentData.amount + '\n' +
+ 'MAC 签名:' + paymentData.mac.substr(0, 20) + '...\n\n' +
+ '支付串:\n' + paymentData.payment_string.substr(0, 100) + '...\n\n' +
+ '正在调起支付...'
+ );
+
+ // 调起建行支付
+ if (CcbLifeBridge.isInCcbApp()) {
+ CcbLifeBridge.payment({
+ payment_string: paymentData.payment_string
+ }, function(result) {
+ if (result.success) {
+ showResult('✅ 支付调起成功!\n\n请在建行 App 内完成支付\n\n' +
+ '支付完成后,页面会自动跳转');
+
+ // 轮询查询订单状态
+ pollPaymentStatus(orderId);
+ } else {
+ showResult('❌ 支付调起失败:' + result.error);
+ }
+ });
+ } else {
+ showResult('⚠️ 不在建行 App 内,无法调起支付\n\n' +
+ '但支付串已生成,可以手动测试:\n\n' +
+ '支付 URL:\n' + paymentData.payment_url
+ );
+ }
} else {
- showResult('生成支付串失败:' + data.msg);
+ showResult('❌ 生成支付串失败:' + data.msg);
}
})
.catch(error => {
showLoading(false);
- showResult('请求失败:' + error.message);
+ showResult('❌ 请求失败:' + error.message);
+ });
+ }
+
+ // 轮询查询支付状态
+ function pollPaymentStatus(orderId) {
+ var token = localStorage.getItem('ccb_token');
+ var pollCount = 0;
+ var maxPoll = 60; // 最多轮询60次(5分钟)
+
+ var pollInterval = setInterval(function() {
+ pollCount++;
+
+ fetch('/addons/shopro/order/detail?id=' + orderId, {
+ method: 'GET',
+ headers: {
+ 'token': token
+ }
+ })
+ .then(response => response.json())
+ .then(data => {
+ if (data.code === 1) {
+ var order = data.data;
+
+ if (order.status === 'paid' || order.status === 'completed') {
+ clearInterval(pollInterval);
+ showResult('✅ 支付成功!\n\n' +
+ '订单编号:' + order.order_sn + '\n' +
+ '订单状态:' + order.status + '\n' +
+ '支付时间:' + new Date(order.paid_time).toLocaleString()
+ );
+ } else if (pollCount >= maxPoll) {
+ clearInterval(pollInterval);
+ showResult('⏱ 查询超时\n\n请手动刷新订单状态');
+ }
+ }
+ })
+ .catch(error => {
+ console.error('轮询订单状态失败:', error);
+ });
+
+ }, 5000); // 每5秒查询一次
+ }
+
+ // 测试登录入库
+ function testLogin() {
+ var params = CcbLifeBridge.getUrlParams();
+
+ if (!params.ccbParamSJ) {
+ showResult('错误:URL 中没有 ccbParamSJ 参数\n\n请从建行生活 App 跳转到此页面,或在 URL 中添加 ccbParamSJ 参数');
+ return;
+ }
+
+ showLoading(true);
+ showResult('正在登录...\n1. 解密建行参数\n2. 验证用户信息\n3. 创建/更新用户\n4. 生成登录 Token');
+
+ // 调用后端登录接口
+ fetch('/addons/shopro/ccblife/login?ccbParamSJ=' + encodeURIComponent(params.ccbParamSJ), {
+ method: 'GET'
+ })
+ .then(response => response.json())
+ .then(data => {
+ showLoading(false);
+
+ if (data.code === 1) {
+ var loginData = data.data;
+
+ // 保存 token 和用户信息
+ localStorage.setItem('ccb_token', loginData.token);
+ localStorage.setItem('ccb_user_info', JSON.stringify(loginData.user_info));
+
+ // 更新页面显示
+ updateLoginStatus({ userInfo: loginData.user_info });
+
+ showResult('✅ 登录成功!\n\n' +
+ '用户信息:\n' + JSON.stringify(loginData.user_info, null, 2) + '\n\n' +
+ 'Token:' + loginData.token.substr(0, 20) + '...\n\n' +
+ '是否新用户:' + (loginData.user_info.is_new ? '是' : '否') + '\n\n' +
+ '跳转URL:' + loginData.redirect_url
+ );
+ } else {
+ showResult('❌ 登录失败:' + data.msg);
+ }
+ })
+ .catch(error => {
+ showLoading(false);
+ showResult('❌ 请求失败:' + error.message);
});
}