mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 21:03:17 +08:00
调试
This commit is contained in:
parent
dd8c8b0ab0
commit
48dbc5f4e4
@ -18,7 +18,7 @@ class Ccblife extends Common
|
||||
* 不需要登录的方法
|
||||
* @var array
|
||||
*/
|
||||
protected $noNeedLogin = ['autoLogin', 'login', 'callback'];
|
||||
protected $noNeedLogin = ['autoLogin', 'login', 'callback', 'decryptParam'];
|
||||
|
||||
/**
|
||||
* 不需要权限的方法
|
||||
@ -220,6 +220,41 @@ class Ccblife extends Common
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 解密建行参数(调试用)
|
||||
* 用于前端测试页面解密建行传递的加密参数
|
||||
*
|
||||
* POST /addons/shopro/ccblife/decryptParam
|
||||
*/
|
||||
public function decryptParam()
|
||||
{
|
||||
try {
|
||||
// 获取加密参数
|
||||
$ccbParamSJ = $this->request->post('ccbParamSJ', '');
|
||||
|
||||
if (empty($ccbParamSJ)) {
|
||||
$this->error('缺少 ccbParamSJ 参数');
|
||||
}
|
||||
|
||||
// 获取配置
|
||||
$config = config('ccblife');
|
||||
|
||||
// 解密参数
|
||||
$decryptedParams = CcbUrlDecrypt::decrypt($ccbParamSJ, $config['service_id']);
|
||||
|
||||
if (!$decryptedParams) {
|
||||
$this->error('参数解密失败');
|
||||
}
|
||||
|
||||
// 返回解密后的数据
|
||||
$this->success('解密成功', $decryptedParams);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
Log::error('建行参数解密失败: ' . $e->getMessage());
|
||||
$this->error('解密失败: ' . $e->getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 手机号脱敏
|
||||
*
|
||||
|
||||
@ -178,10 +178,18 @@
|
||||
<span class="label">当前环境:</span>
|
||||
<span class="value" id="env-status">检测中...</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">设备类型:</span>
|
||||
<span class="value" id="device-type">-</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">JSBridge 状态:</span>
|
||||
<span class="value" id="bridge-status">未就绪</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">Bridge 对象:</span>
|
||||
<span class="value" id="bridge-object">检测中...</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">登录状态:</span>
|
||||
<span class="value" id="login-status">未登录</span>
|
||||
@ -190,6 +198,10 @@
|
||||
<span class="label">建行用户ID:</span>
|
||||
<span class="value" id="ccb-user-id">-</span>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<span class="label">建行参数:</span>
|
||||
<span class="value" id="ccb-param">无</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="divider"></div>
|
||||
@ -197,6 +209,8 @@
|
||||
<!-- 功能测试 -->
|
||||
<h3 style="margin-bottom: 15px;">功能测试</h3>
|
||||
|
||||
<button class="btn" onclick="refreshEnv()">🔄 刷新环境检测</button>
|
||||
<button class="btn" onclick="decryptCcbParam()">🔓 解密建行参数</button>
|
||||
<button class="btn" onclick="getUserInfo()">获取建行用户信息</button>
|
||||
<button class="btn btn-secondary" onclick="doAutoLogin()">执行自动登录</button>
|
||||
<button class="btn btn-success" onclick="testPayment()">测试支付功能</button>
|
||||
@ -207,6 +221,8 @@
|
||||
<h3 style="margin-bottom: 15px;">调试功能</h3>
|
||||
|
||||
<button class="btn btn-secondary" onclick="checkUrlParams()">检查 URL 参数</button>
|
||||
<button class="btn btn-secondary" onclick="showUserAgent()">显示 User-Agent</button>
|
||||
<button class="btn btn-secondary" onclick="checkBridgeObjects()">检查 Bridge 对象</button>
|
||||
<button class="btn btn-secondary" onclick="clearCache()">清除缓存</button>
|
||||
<button class="btn btn-secondary" onclick="toggleDebug()">切换调试模式</button>
|
||||
|
||||
@ -259,6 +275,22 @@
|
||||
envEl.innerHTML = '<span class="status status-warning">普通浏览器</span>';
|
||||
}
|
||||
|
||||
// 设备类型
|
||||
var deviceType = CcbLifeBridge.isIOS() ? 'iOS' : 'Android';
|
||||
document.getElementById('device-type').textContent = deviceType;
|
||||
|
||||
// 检查 Bridge 对象
|
||||
checkBridgeObjectsStatus();
|
||||
|
||||
// 检查建行参数
|
||||
var params = CcbLifeBridge.getUrlParams();
|
||||
if (params.ccbParamSJ) {
|
||||
document.getElementById('ccb-param').innerHTML =
|
||||
'<span class="status status-warning">已加密(点击解密按钮)</span>';
|
||||
} else {
|
||||
document.getElementById('ccb-param').textContent = '无';
|
||||
}
|
||||
|
||||
// 检查登录状态
|
||||
var token = localStorage.getItem('ccb_token');
|
||||
var userInfo = localStorage.getItem('ccb_user_info');
|
||||
@ -273,6 +305,50 @@
|
||||
}
|
||||
}
|
||||
|
||||
// 检查 Bridge 对象状态
|
||||
function checkBridgeObjectsStatus() {
|
||||
var bridgeObjects = [];
|
||||
|
||||
if (window.WebViewJavascriptBridge) {
|
||||
bridgeObjects.push('WebViewJavascriptBridge');
|
||||
}
|
||||
if (window.mbspay) {
|
||||
bridgeObjects.push('mbspay');
|
||||
}
|
||||
|
||||
var bridgeEl = document.getElementById('bridge-object');
|
||||
if (bridgeObjects.length > 0) {
|
||||
bridgeEl.innerHTML = '<span class="status status-success">' +
|
||||
bridgeObjects.join(', ') + '</span>';
|
||||
} else {
|
||||
bridgeEl.innerHTML = '<span class="status status-error">未检测到</span>';
|
||||
}
|
||||
}
|
||||
|
||||
// 刷新环境检测
|
||||
function refreshEnv() {
|
||||
updateEnvStatus();
|
||||
|
||||
// 重新检查 Bridge 就绪状态
|
||||
if (CcbLifeBridge.isReady) {
|
||||
document.getElementById('bridge-status').innerHTML =
|
||||
'<span class="status status-success">已就绪</span>';
|
||||
} else {
|
||||
document.getElementById('bridge-status').innerHTML =
|
||||
'<span class="status status-error">未就绪</span>';
|
||||
|
||||
// 等待 3 秒后重新检查
|
||||
setTimeout(function() {
|
||||
if (CcbLifeBridge.isReady) {
|
||||
document.getElementById('bridge-status').innerHTML =
|
||||
'<span class="status status-success">已就绪</span>';
|
||||
}
|
||||
}, 3000);
|
||||
}
|
||||
|
||||
showResult('环境信息已刷新');
|
||||
}
|
||||
|
||||
// 更新登录状态
|
||||
function updateLoginStatus(data) {
|
||||
document.getElementById('login-status').innerHTML =
|
||||
@ -366,12 +442,78 @@
|
||||
});
|
||||
}
|
||||
|
||||
// 解密建行参数
|
||||
function decryptCcbParam() {
|
||||
var params = CcbLifeBridge.getUrlParams();
|
||||
|
||||
if (!params.ccbParamSJ) {
|
||||
showResult('错误:URL 中没有 ccbParamSJ 参数');
|
||||
return;
|
||||
}
|
||||
|
||||
showLoading(true);
|
||||
|
||||
// 调用后端接口解密
|
||||
fetch('/addons/shopro/ccblife/decryptParam', {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json'
|
||||
},
|
||||
body: JSON.stringify({
|
||||
ccbParamSJ: params.ccbParamSJ
|
||||
})
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
showLoading(false);
|
||||
|
||||
if (data.code === 1) {
|
||||
var decrypted = data.data;
|
||||
showResult('解密成功:\n' + JSON.stringify(decrypted, null, 2));
|
||||
|
||||
// 更新显示
|
||||
document.getElementById('ccb-param').innerHTML =
|
||||
'<span class="status status-success">已解密</span>';
|
||||
|
||||
// 如果有用户ID,显示出来
|
||||
if (decrypted.userid) {
|
||||
document.getElementById('ccb-user-id').textContent = decrypted.userid;
|
||||
}
|
||||
} else {
|
||||
showResult('解密失败:' + data.msg);
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
showLoading(false);
|
||||
showResult('请求失败:' + error.message);
|
||||
});
|
||||
}
|
||||
|
||||
// 检查 URL 参数
|
||||
function checkUrlParams() {
|
||||
var params = CcbLifeBridge.getUrlParams();
|
||||
showResult('URL 参数:\n' + JSON.stringify(params, null, 2));
|
||||
}
|
||||
|
||||
// 显示 User-Agent
|
||||
function showUserAgent() {
|
||||
var ua = navigator.userAgent;
|
||||
showResult('User-Agent:\n' + ua);
|
||||
}
|
||||
|
||||
// 检查 Bridge 对象
|
||||
function checkBridgeObjects() {
|
||||
var info = {
|
||||
WebViewJavascriptBridge: typeof window.WebViewJavascriptBridge !== 'undefined',
|
||||
mbspay: typeof window.mbspay !== 'undefined',
|
||||
bridgeReady: CcbLifeBridge.isReady,
|
||||
isIOS: CcbLifeBridge.isIOS(),
|
||||
isInCcbApp: CcbLifeBridge.isInCcbApp()
|
||||
};
|
||||
|
||||
showResult('Bridge 对象检测:\n' + JSON.stringify(info, null, 2));
|
||||
}
|
||||
|
||||
// 清除缓存
|
||||
function clearCache() {
|
||||
localStorage.removeItem('ccb_token');
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user