mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 21:03:17 +08:00
up
This commit is contained in:
parent
7df1bbdf19
commit
c5185c9722
@ -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);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user