This commit is contained in:
Billy 2025-10-20 10:03:55 +08:00
parent 7df1bbdf19
commit c5185c9722

View File

@ -211,6 +211,7 @@
<button class="btn" onclick="refreshEnv()">🔄 刷新环境检测</button>
<button class="btn" onclick="decryptCcbParam()">🔓 解密建行参数</button>
<button class="btn btn-success" onclick="testLogin()">🔐 测试登录入库</button>
<button class="btn" onclick="getUserInfo()">获取建行用户信息</button>
<button class="btn btn-secondary" onclick="doAutoLogin()">执行自动登录</button>
<button class="btn btn-success" onclick="testPayment()">测试支付功能</button>
@ -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);
});
}