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

6.9 KiB
Raw Blame History

建行生活 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

数据库结构(已执行)

用户表改造

ALTER TABLE `fa_user`
ADD COLUMN `ccb_user_id` varchar(50) DEFAULT NULL COMMENT '建行用户ID';

订单表改造

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 '建行同步时间';

支付日志表

-- fa_ccb_payment_log 表用于记录支付流水

同步日志表

-- 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. 用户登录流程

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. 支付流程

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

// 在页面加载时初始化
CcbLifeBridge.init({
    debug: true,
    apiBaseUrl: '/addons/shopro'
});

获取用户信息

CcbLifeBridge.getUserInfo(function(result) {
    if (result.success) {
        console.log('用户信息:', result.data);
        // result.data 包含: ccb_user_id, mobile, nickname, avatar
    }
});

调起支付

// 先调用后端生成支付串
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