From 5b6bb76d88fdbfbd824e9bbd595acd68c3b68d91 Mon Sep 17 00:00:00 2001 From: Billy <641833868@qq.com> Date: Tue, 21 Oct 2025 15:03:39 +0800 Subject: [PATCH] up --- addons/shopro/config/ccblife.php | 2 +- addons/shopro/controller/Ccbpayment.php | 49 ------------- .../shopro/library/ccblife/CcbHttpClient.php | 6 +- doc/建行生活API接口文档.md | 71 +++++++++++++++++++ 4 files changed, 76 insertions(+), 52 deletions(-) diff --git a/addons/shopro/config/ccblife.php b/addons/shopro/config/ccblife.php index 44b496f..22dacb5 100644 --- a/addons/shopro/config/ccblife.php +++ b/addons/shopro/config/ccblife.php @@ -22,7 +22,7 @@ if (file_exists($envFile)) { return [ // API基础地址 (生产环境) - 'api_base_url' => 'https://yunbusiness.ccb.com/tp_service/server', + 'api_base_url' => 'https://yunbusiness.ccb.com/tp_service/txCtrl/server', // 交易代码映射 'tx_codes' => [ 'order_push' => 'A3341TP01', // 订单推送 diff --git a/addons/shopro/controller/Ccbpayment.php b/addons/shopro/controller/Ccbpayment.php index 3d500ec..26149bd 100644 --- a/addons/shopro/controller/Ccbpayment.php +++ b/addons/shopro/controller/Ccbpayment.php @@ -272,53 +272,4 @@ class Ccbpayment extends Common exit('FAIL'); } } - - /** - * ⚠️ 已废弃: 推送订单到建行外联系统 - * - * @deprecated 2025-01-20 根据建行流程图,订单推送应在createPayment()时完成,此方法已废弃 - * @see createPayment() 步骤5: 推送未支付订单 - * @see notify() 步骤7: 更新订单为已支付 - */ - private function pushOrderToCcb($orderId) - { - Log::warning('[建行支付] pushOrderToCcb()已废弃,请使用orderService->pushOrder()或updateOrderStatus()'); - } - - /** - * 保存支付日志 - * - * @param object $order 订单对象 - * @param string $paymentString 支付串 - * @param string $payFlowId 支付流水号 - * @return void - */ - private function savePaymentLog($order, $paymentString, $payFlowId) - { - Db::name('ccb_payment_log')->insert([ - 'order_id' => $order->id, - 'order_sn' => $order->order_sn, - 'pay_flow_id' => $payFlowId, - 'payment_string' => $paymentString, - 'user_id' => $order->user_id, - 'ccb_user_id' => $order->ccb_user_id, - 'amount' => $order->pay_amount, - 'status' => 0, // 待支付 - 'create_time' => time(), - ]); - } - - /** - * 更新支付日志 - * - * @param string $payFlowId 支付流水号 - * @param array $data 更新数据 - * @return void - */ - private function updatePaymentLog($payFlowId, $data) - { - Db::name('ccb_payment_log') - ->where('pay_flow_id', $payFlowId) - ->update($data); - } } diff --git a/addons/shopro/library/ccblife/CcbHttpClient.php b/addons/shopro/library/ccblife/CcbHttpClient.php index a7fe9a2..d78d17b 100644 --- a/addons/shopro/library/ccblife/CcbHttpClient.php +++ b/addons/shopro/library/ccblife/CcbHttpClient.php @@ -111,16 +111,18 @@ class CcbHttpClient // 构建完整的API URL(基础URL + ?txcode=交易代码) $apiUrl = $this->config['api_base_url'] . '?txcode=' . $txCode; - // 构建请求参数 + // 构建请求参数(按照建行报文规范:cnt、mac、svcid) $params = [ 'cnt' => $cnt, - 'mac' => $mac + 'mac' => $mac, + 'svcid' => $this->config['service_id'] ]; // 📝 记录请求参数(加密后的完整内容) Log::info('建行生活API加密请求参数 [txCode=' . $txCode . '] [url=' . $apiUrl . '] [timeout=' . self::DEFAULT_TIMEOUT . 's]'); Log::info('加密参数 cnt: ' . $cnt); Log::info('加密参数 mac: ' . $mac); + Log::info('加密参数 svcid: ' . $this->config['service_id']); // 初始化CURL $ch = curl_init(); diff --git a/doc/建行生活API接口文档.md b/doc/建行生活API接口文档.md index ed3a366..ae5cd49 100644 --- a/doc/建行生活API接口文档.md +++ b/doc/建行生活API接口文档.md @@ -204,6 +204,77 @@ https://yunbusiness.ccb.com/tp_service/txCtrl/server?txcode=XX | CCB_DISCOUNT_AMT | 建行支付侧优惠金额 | number(15,2) | N | 因业务调整,后续下线字段 | | CCB_DISCOUNT_AMT_DESC | 建行支付侧优惠定义 | varChar(1000) | N | 因业务调整,后续下线字段 | +#### 报文示例 + +##### 1. 明文报文(加密前) + +```json +{ + "CLD_HEADER": { + "CLD_TX_CHNL": "YS44000009001853", + "CLD_TX_TIME": "20250121143522", + "CLD_TX_CODE": "A3341TP01", + "CLD_TX_SEQ": "PAY20250121143522123456" + }, + "CLD_BODY": { + "USER_ID": "CCB_USER_12345678", + "ORDER_ID": "SO202501211435220001", + "ORDER_DT": "20250121143500", + "TOTAL_AMT": "100.00", + "PAY_AMT": "90.00", + "DISCOUNT_AMT": "10.00", + "DISCOUNT_AMT_DESC": "满减优惠=10.00", + "ORDER_STATUS": "0", + "REFUND_STATUS": "0", + "INV_DT": "20250121173500", + "MCT_NM": "丰科贸易(荷西嘉园店)", + "CUS_ORDER_URL": "https://example.com/order/detail?id=123", + "OCC_MCT_LOGO_URL": "https://example.com/logo.png", + "PAY_FLOW_ID": "PAY20250121143522123456", + "PAY_MRCH_ID": "105003953998037", + "GOODS_NM": "测试商品", + "PLATFORM": "99", + "SKU_LIST": "[{\"SKU_NAME\":\"测试商品\",\"SKU_REF_PRICE\":100.00,\"SKU_NUM\":1,\"SKU_SELL_PRICE\":90.00}]" + } +} +``` + +##### 2. 加密报文(最终发送) + +**报文结构**: +```json +{ + "cnt": "BASE64加密后的明文内容...", + "mac": "32位小写MD5签名", + "svcid": "YS44000009001853" +} +``` + +**字段说明**: + +| 字段 | 说明 | +|------|------| +| cnt | 使用服务方公钥对明文报文进行RSA加密后的BASE64编码内容 | +| mac | MD5(明文报文 + 服务方私钥) 的32位小写签名 | +| svcid | 服务方编号(建行分配) | + +**请求方式**: +``` +POST https://yunbusiness.ccb.com/tp_service/txCtrl/server?txcode=A3341TP01 +Content-Type: application/x-www-form-urlencoded + +cnt=BASE64加密内容&mac=MD5签名&svcid=服务方编号 +``` + +**完整示例**(参考): +```json +{ + "cnt": "Y2tFMDFJd2RGMGg5aFdXUGtjVVdaSmo4NHBKQzNNZE1wQTRRSXZVRlhBSWhqVEdXNE1LcE9MOXdxY0hhNUlIZndUU0RLK3NrZ1hpTytJUitpREEwSUp0bktRcWMxRG5hN1R0OEtjcUkxTUFDVE5FY2Z0b3lCeTVTaEo3cmNjSnBOUVFsSjRBR2htSzRheEhNb0p6N215eFViK1ZjeGd5WjVTTjJQcHUxQlBnZXJsQXE2Q1lrQ2VuSmZEYUxVSks5RGx2Yk9YWDlDczJiVVllYjlHSHQrUkFuYTljc2hucGhqVWNwNDgrcThNcGhQOElBL20xNVk5NG9lZEV4SXpmc0pDcDExZjFvQ0E5YkwwOWJOZjM4VHR3TkJkTmhqM3lKSVpWeWVpT0FucGhjS3JpOEs5RnlZbXlNVHF1UER3UjhmQ0p5dk5vYkNMS1BPRmQ3WFdXTVczZ29kSWpLaG5OUnhnaFA3N2txdDU3K2Rkd3hGbDgxUEdYbXJWN1ZKWDFOeXRVUFg2dWp3ZzdsUU1OSTlubU1kVE9nbHZJUHRoS205aEludFc2ZFBVTG1DUlNLNzZDc05qTUIyb1hTR2M2cHBNazMxNDJSa05KR0hvY1ZBNFUzcmc4SVk4ZFlYaTUzZmF3cHRES3pHY2JYVFI0SldRVzRNU2ZmSUxvNFpxTkY=", + "mac": "947cab4dfebe59265dd28246e4465157", + "svcid": "YS44000009001853" +} +``` + --- ### 3.2 A3341TP02 - 服务方订单更新