fengketrade/doc/ccblife-implementation-guide.md
2025-10-20 15:29:15 +08:00

252 lines
6.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 建行生活 H5 商城对接实施指南
## 项目概述
本文档描述了 Shopro 商城系统与建行生活 App 的完整对接方案实现。所有代码已根据您的实际数据库结构进行调整,确保与现有系统完美兼容。
## 已实现功能清单
### 1. 核心加密模块
-**RSA 加密解密** (`CcbRSA.php`):支持 1024 位 RSA117/128 字节分段处理
-**MD5 签名** (`CcbMD5.php`)API 消息签名和支付串签名
-**URL 参数解密** (`CcbUrlDecrypt.php`):双层 BASE64 + DES 解密
### 2. 业务服务类
-**HTTP 客户端** (`CcbHttpClient.php`):处理与建行 API 的通信
-**订单服务** (`CcbOrderService.php`):订单推送、查询、状态更新、退款
-**支付服务** (`CcbPaymentService.php`):支付串生成、回调处理、支付验证
### 3. 控制器接口
-**用户登录** (`Ccblife.php`):建行用户登录、自动登录、用户绑定
-**支付处理** (`Ccbpayment.php`):生成支付串、处理回调、推送订单
-**测试接口** (`Ccbtest.php`):全面的功能测试接口
### 4. 前端集成
-**JSBridge 库** (`ccblife-bridge.js`):封装建行原生交互功能
-**示例页面** (`ccblife-demo.html`):演示如何使用 JSBridge
## 数据库结构(已执行)
### 用户表改造
```sql
ALTER TABLE `fa_user`
ADD COLUMN `ccb_user_id` varchar(50) DEFAULT NULL COMMENT '建行用户ID';
```
### 订单表改造
```sql
ALTER TABLE `fa_shopro_order`
ADD COLUMN `ccb_user_id` varchar(30) DEFAULT NULL COMMENT '建行用户ID',
ADD COLUMN `ccb_pay_flow_id` varchar(50) DEFAULT NULL COMMENT '建行支付流水号',
ADD COLUMN `ccb_sync_status` tinyint(1) DEFAULT '0' COMMENT '建行同步状态',
ADD COLUMN `ccb_sync_time` int(11) DEFAULT NULL COMMENT '建行同步时间';
```
### 支付日志表
```sql
-- fa_ccb_payment_log 表用于记录支付流水
```
### 同步日志表
```sql
-- fa_ccb_sync_log 表用于记录与建行的同步日志
```
## 配置说明
配置文件位置:`/addons/shopro/config/ccblife.php`
关键配置项(从 .env 读取):
- `CCB_SERVICE_ID`: 服务方编号生产YS44000009001853
- `CCB_MERCHANT_ID`: 商户号
- `CCB_POS_ID`: POS 号
- `CCB_BRANCH_ID`: 分行号
- `CCB_PRIVATE_KEY`: RSA 私钥BASE64 格式)
- `CCB_PUBLIC_KEY`: RSA 公钥BASE64 格式)
## 接口调用流程
### 1. 用户登录流程
```mermaid
sequenceDiagram
participant U as 用户
participant CCB as 建行App
participant H5 as H5商城
participant API as 后端API
participant DB as 数据库
U->>CCB: 点击进入商城
CCB->>H5: 跳转URL(携带ccbParamSJ)
H5->>API: 调用 /ccblife/login
API->>API: 解密ccbParamSJ参数
API->>DB: 查询/创建用户
DB-->>API: 返回用户信息
API->>API: 生成Token
API-->>H5: 返回Token和用户信息
H5-->>U: 显示商城首页
```
### 2. 支付流程
```mermaid
sequenceDiagram
participant U as 用户
participant H5 as H5商城
participant API as 后端API
participant CCB as 建行App
participant CCBAPI as 建行API
U->>H5: 提交订单
H5->>API: 创建订单
API-->>H5: 返回订单信息
H5->>API: 请求支付串 /ccbpayment/createPayment
API->>API: 生成支付串和MAC签名
API-->>H5: 返回支付串
H5->>CCB: 调用JSBridge发起支付
CCB->>U: 显示收银台
U->>CCB: 确认支付
CCB->>CCBAPI: 处理支付
CCBAPI-->>CCB: 支付结果
CCB->>H5: 返回支付结果
H5->>API: 回调 /ccbpayment/callback
API->>CCBAPI: 验证支付结果
API->>API: 更新订单状态
API->>CCBAPI: 推送订单信息
API-->>H5: 返回最终结果
```
## 测试步骤
### 1. 环境检查
访问:`http://fengketrade.test/addons/shopro/ccbtest`
检查项:
- 配置检查:`/ccbtest/checkConfig`
- 数据库检查:`/ccbtest/checkDatabase`
### 2. 功能测试
#### 基础功能
- RSA 测试:`/ccbtest/testRsa`
- MD5 测试:`/ccbtest/testMd5`
- URL 解密:`/ccbtest/testUrlDecrypt`
#### 业务功能
- 用户登录:`POST /ccbtest/testUserLogin`
- 订单推送:`/ccbtest/testOrderPush?order_id=1`
- 支付串生成:`/ccbtest/testPaymentString?order_id=1`
### 3. 前端测试
1. 访问示例页面:`http://fengketrade.test/ccblife-demo.html`
2. 测试各项功能:
- 检测运行环境
- 获取用户信息
- 自动登录
- 模拟支付
## 前端集成示例
### 初始化 JSBridge
```javascript
// 在页面加载时初始化
CcbLifeBridge.init({
debug: true,
apiBaseUrl: '/addons/shopro'
});
```
### 获取用户信息
```javascript
CcbLifeBridge.getUserInfo(function(result) {
if (result.success) {
console.log('用户信息:', result.data);
// result.data 包含: ccb_user_id, mobile, nickname, avatar
}
});
```
### 调起支付
```javascript
// 先调用后端生成支付串
fetch('/addons/shopro/ccbpayment/createPayment', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'token': localStorage.getItem('ccb_token')
},
body: JSON.stringify({ order_id: orderId })
})
.then(response => response.json())
.then(data => {
if (data.code === 1) {
// 调起建行支付
CcbLifeBridge.payment({
payment_string: data.data.payment_string
}, function(result) {
if (result.success) {
// 支付成功,通知后端
notifyPaymentSuccess(orderId);
}
});
}
});
```
## 注意事项
### 1. 安全要求
- 所有敏感配置必须存储在 `.env` 文件中
- RSA 密钥必须是 BASE64 格式(不含 PEM 头尾)
- 生产环境必须启用 HTTPS
### 2. 数据同步
- 订单状态变更必须同步到建行
- 使用 `fa_ccb_sync_log` 表记录所有同步操作
- 支持批量同步未同步的订单
### 3. 错误处理
- 所有 API 调用都有重试机制(默认 3 次)
- 失败的同步任务会记录到日志表
- 支付失败需要明确提示用户
### 4. 兼容性
- iOS通过 URL Scheme 调起支付comccbpay://
- Android通过 window.mbspay 对象调用
- H5在非建行环境降级处理
## 部署检查清单
- [ ] 确认 `.env` 配置正确
- [ ] 数据库表结构已更新
- [ ] RSA 密钥已配置
- [ ] HTTPS 证书已安装
- [ ] 前端 JS 文件已部署
- [ ] 测试接口访问正常
- [ ] 日志目录可写
## 常见问题
### Q: RSA 加密失败
A: 检查密钥格式是否为 BASE64不要包含 PEM 头尾标记
### Q: 用户登录失败
A: 确认 ccbParamSJ 参数正确,服务方编号与配置一致
### Q: 订单推送失败
A: 检查必需的 34 个字段是否都已填充,特别注意日期格式
### Q: 支付无响应
A: 确认在建行 App 内访问,检查 JSBridge 是否就绪
## 技术支持
如有问题,请检查:
1. 系统日志:`runtime/log/ccblife/`
2. 同步日志:`fa_ccb_sync_log`
3. 支付日志:`fa_ccb_payment_log`
---
*最后更新2025-01-17*
*作者Billy*