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
|
* @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="label">当前环境:</span>
|
||||||
<span class="value" id="env-status">检测中...</span>
|
<span class="value" id="env-status">检测中...</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="label">设备类型:</span>
|
||||||
|
<span class="value" id="device-type">-</span>
|
||||||
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="label">JSBridge 状态:</span>
|
<span class="label">JSBridge 状态:</span>
|
||||||
<span class="value" id="bridge-status">未就绪</span>
|
<span class="value" id="bridge-status">未就绪</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="label">Bridge 对象:</span>
|
||||||
|
<span class="value" id="bridge-object">检测中...</span>
|
||||||
|
</div>
|
||||||
<div class="info-item">
|
<div class="info-item">
|
||||||
<span class="label">登录状态:</span>
|
<span class="label">登录状态:</span>
|
||||||
<span class="value" id="login-status">未登录</span>
|
<span class="value" id="login-status">未登录</span>
|
||||||
@ -190,6 +198,10 @@
|
|||||||
<span class="label">建行用户ID:</span>
|
<span class="label">建行用户ID:</span>
|
||||||
<span class="value" id="ccb-user-id">-</span>
|
<span class="value" id="ccb-user-id">-</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="info-item">
|
||||||
|
<span class="label">建行参数:</span>
|
||||||
|
<span class="value" id="ccb-param">无</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="divider"></div>
|
<div class="divider"></div>
|
||||||
@ -197,6 +209,8 @@
|
|||||||
<!-- 功能测试 -->
|
<!-- 功能测试 -->
|
||||||
<h3 style="margin-bottom: 15px;">功能测试</h3>
|
<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" onclick="getUserInfo()">获取建行用户信息</button>
|
||||||
<button class="btn btn-secondary" onclick="doAutoLogin()">执行自动登录</button>
|
<button class="btn btn-secondary" onclick="doAutoLogin()">执行自动登录</button>
|
||||||
<button class="btn btn-success" onclick="testPayment()">测试支付功能</button>
|
<button class="btn btn-success" onclick="testPayment()">测试支付功能</button>
|
||||||
@ -207,6 +221,8 @@
|
|||||||
<h3 style="margin-bottom: 15px;">调试功能</h3>
|
<h3 style="margin-bottom: 15px;">调试功能</h3>
|
||||||
|
|
||||||
<button class="btn btn-secondary" onclick="checkUrlParams()">检查 URL 参数</button>
|
<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="clearCache()">清除缓存</button>
|
||||||
<button class="btn btn-secondary" onclick="toggleDebug()">切换调试模式</button>
|
<button class="btn btn-secondary" onclick="toggleDebug()">切换调试模式</button>
|
||||||
|
|
||||||
@ -259,6 +275,22 @@
|
|||||||
envEl.innerHTML = '<span class="status status-warning">普通浏览器</span>';
|
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 token = localStorage.getItem('ccb_token');
|
||||||
var userInfo = localStorage.getItem('ccb_user_info');
|
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) {
|
function updateLoginStatus(data) {
|
||||||
document.getElementById('login-status').innerHTML =
|
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 参数
|
// 检查 URL 参数
|
||||||
function checkUrlParams() {
|
function checkUrlParams() {
|
||||||
var params = CcbLifeBridge.getUrlParams();
|
var params = CcbLifeBridge.getUrlParams();
|
||||||
showResult('URL 参数:\n' + JSON.stringify(params, null, 2));
|
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() {
|
function clearCache() {
|
||||||
localStorage.removeItem('ccb_token');
|
localStorage.removeItem('ccb_token');
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user