diff --git a/addons/shopro/controller/Ccblife.php b/addons/shopro/controller/Ccblife.php
index 8136569..112f9fc 100644
--- a/addons/shopro/controller/Ccblife.php
+++ b/addons/shopro/controller/Ccblife.php
@@ -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());
+ }
+ }
+
/**
* 手机号脱敏
*
diff --git a/public/ccblife-demo.html b/public/ccblife-demo.html
index 7d5639e..3715b30 100644
--- a/public/ccblife-demo.html
+++ b/public/ccblife-demo.html
@@ -178,10 +178,18 @@
当前环境:
检测中...
+
+ 设备类型:
+ -
+
JSBridge 状态:
未就绪
+
+ Bridge 对象:
+ 检测中...
+
登录状态:
未登录
@@ -190,6 +198,10 @@
建行用户ID:
-
+
+ 建行参数:
+ 无
+
@@ -197,6 +209,8 @@
功能测试
+
+
@@ -207,6 +221,8 @@
调试功能
+
+
@@ -259,6 +275,22 @@
envEl.innerHTML = '普通浏览器';
}
+ // 设备类型
+ 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 =
+ '已加密(点击解密按钮)';
+ } 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 = '' +
+ bridgeObjects.join(', ') + '';
+ } else {
+ bridgeEl.innerHTML = '未检测到';
+ }
+ }
+
+ // 刷新环境检测
+ function refreshEnv() {
+ updateEnvStatus();
+
+ // 重新检查 Bridge 就绪状态
+ if (CcbLifeBridge.isReady) {
+ document.getElementById('bridge-status').innerHTML =
+ '已就绪';
+ } else {
+ document.getElementById('bridge-status').innerHTML =
+ '未就绪';
+
+ // 等待 3 秒后重新检查
+ setTimeout(function() {
+ if (CcbLifeBridge.isReady) {
+ document.getElementById('bridge-status').innerHTML =
+ '已就绪';
+ }
+ }, 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 =
+ '已解密';
+
+ // 如果有用户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');