mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 21:03:17 +08:00
272 lines
8.9 KiB
PHP
272 lines
8.9 KiB
PHP
<?php
|
||
/**
|
||
* 建行生活对接配置文件
|
||
*
|
||
* 重要说明:
|
||
* - 建行只提供生产环境,没有测试环境
|
||
* - 配置优先从.env读取,如果没有则使用默认值
|
||
* - 请在.env文件中配置敏感信息(密钥等)
|
||
*
|
||
* @author Billy
|
||
* @date 2025-01-16
|
||
*/
|
||
|
||
use think\Env;
|
||
|
||
// 读取 .env 文件以获取密钥配置
|
||
$envFile = __DIR__ . '/../../../.env';
|
||
$envVars = [];
|
||
if (file_exists($envFile)) {
|
||
$envVars = parse_ini_file($envFile);
|
||
}
|
||
|
||
return [
|
||
// API基础地址 (生产环境)
|
||
'api_base_url' => 'https://yunbusiness.ccb.com/tp_service/txCtrl/server',
|
||
// 交易代码映射
|
||
'tx_codes' => [
|
||
'order_push' => 'A3341TP01', // 订单推送
|
||
'order_update' => 'A3341TP02', // 订单状态更新
|
||
'order_query' => 'A3341TP03', // 订单查询
|
||
'order_refund' => 'A3341TP04', // 订单退款
|
||
],
|
||
|
||
// 服务方信息(生产环境)
|
||
'service_id' => Env::get('ccb.service_id', 'YS44000009001853'),
|
||
|
||
// 商户信息(从.env读取)
|
||
'merchant_id' => Env::get('ccb.merchant_id', '105003953998037'),
|
||
'pos_id' => Env::get('ccb.pos_id', '068295530'),
|
||
'branch_id' => Env::get('ccb.branch_id', '340650000'),
|
||
|
||
// ========== 密钥配置 (从.env读取) ==========
|
||
|
||
/**
|
||
* 商户私钥 (商户自己生成的RSA私钥)
|
||
* 用途:
|
||
* - API请求签名(MD5(明文 + 私钥))
|
||
* - 解密建行返回的加密数据(ccbParamSJ等)
|
||
* - 解密建行API响应报文
|
||
* 格式: BASE64格式(不含PEM头尾) 或 PEM格式(含头尾)
|
||
*
|
||
* ⚠️ 安全提示: 私钥必须严格保密,不得泄露!
|
||
*/
|
||
'private_key' => $envVars['private_key'] ?? '',
|
||
|
||
/**
|
||
* 商户公钥 (商户自己生成的RSA公钥,对应上面的私钥)
|
||
* 用途:
|
||
* - 提交给建行用于验证商户签名
|
||
* - 支付下单的MD5签名计算(PLATFORMPUB字段)
|
||
* - 加密商户公钥(ENCPUB字段)
|
||
* 格式: BASE64格式(不含PEM头尾) 或 PEM格式(含头尾)
|
||
*
|
||
* 📌 注意: 需要将此公钥提交给建行进行配置
|
||
*/
|
||
'public_key' => $envVars['public_key'] ?? '',
|
||
|
||
/**
|
||
* 建行平台API公钥 (建行生活平台提供的RSA公钥)
|
||
* 用途:
|
||
* - 加密API请求报文(A3341TP01/02/03/04等接口)
|
||
* - 只有建行用自己的私钥才能解密
|
||
* 获取方式: 联系建行生活平台技术支持获取
|
||
* 格式: BASE64格式(不含PEM头尾) 或 PEM格式(含头尾)
|
||
*
|
||
* ⚠️ 重要说明:
|
||
* 1. 如果未单独配置,将使用merchant_public_key(向下兼容)
|
||
* 2. 建行可能为每个商户分配统一密钥对,或要求使用建行平台公钥
|
||
* 3. 请联系建行确认应使用哪个公钥进行API请求加密
|
||
*
|
||
* 📋 RSA加密逻辑:
|
||
* - 商户用建行公钥加密请求 → 建行用建行私钥解密
|
||
* - 商户用商户私钥签名 → 建行用商户公钥验签
|
||
*/
|
||
'ccb_platform_public_key' => $envVars['ccb_platform_public_key'] ?? ($envVars['public_key'] ?? ''),
|
||
|
||
/**
|
||
* 建行生活支付验签公钥 (建行生活平台分配的)
|
||
* 用途:
|
||
* - 验证异步通知中的SIGN字段(NT_TYPE=YS时)
|
||
* 获取方式: 联系建行生活平台运营人员或技术支持
|
||
* 格式: PEM格式RSA公钥(2048位)
|
||
*
|
||
* 📌 如果未配置此字段:
|
||
* - 异步通知验签会降级为POSID验证
|
||
* - 安全性降低,建议尽快获取并配置
|
||
*/
|
||
'ccb_payment_verify_public_key' => $envVars['ccb_payment_verify_public_key'] ?? '',
|
||
|
||
// HTTP请求配置
|
||
'http' => [
|
||
'timeout' => 30, // 超时时间(秒)
|
||
'retry_times' => 3, // 重试次数
|
||
'retry_delay' => [1, 2, 5], // 重试间隔(秒)
|
||
],
|
||
|
||
// 支付配置
|
||
'payment' => [
|
||
'currency_code' => '01', // 币种: 01-人民币
|
||
'tx_code' => '520100', // 支付交易码
|
||
'third_app_info' => 'comccbpay1234567890cloudmerchant',
|
||
'timeout_minutes' => 30, // 支付超时时间(分钟)
|
||
],
|
||
|
||
// ========== 可选支付参数配置 ==========
|
||
// 以下参数按需配置,不配置则不会添加到支付串中
|
||
|
||
/**
|
||
* 外部平台商户号 (与建行商户号二选一)
|
||
* 说明: 使用外部平台商户号时,会自动移除MERCHANTID、POSID、BRANCHID
|
||
*/
|
||
'plat_mct_id' => Env::get('ccb.plat_mct_id', ''),
|
||
|
||
/**
|
||
* 微信支付19位终端号
|
||
* 说明: 微信支付场景下使用
|
||
*/
|
||
'pos_id_19' => Env::get('ccb.pos_id_19', ''),
|
||
|
||
/**
|
||
* 支付位图 - 控制支付方式
|
||
* 格式: 6位字符串,每位对应一个支付方式(1=开启,0=关闭)
|
||
* 位置: [生活钱包][龙支付][微信][数字人民币][信用付][快贷]
|
||
* 示例: '111111' = 全部开启, '110000' = 仅生活钱包和龙支付
|
||
*/
|
||
'pay_bitmap' => Env::get('ccb.pay_bitmap', '110000'),
|
||
|
||
/**
|
||
* 账户位图 - 控制支付账户类型
|
||
* 格式: 5位字符串,每位对应一个账户类型(1=开启,0=关闭)
|
||
* 位置: [建行借记卡][建行贷记卡][他行借记卡][他行贷记卡][建行钱包]
|
||
* 示例: '11111' = 全部开启, '11000' = 仅建行卡
|
||
*/
|
||
'account_bitmap' => Env::get('ccb.account_bitmap', '11000'),
|
||
|
||
/**
|
||
* 分期付款期数
|
||
* 说明: 分期支付场景下使用
|
||
*/
|
||
'install_num' => Env::get('ccb.install_num', ''),
|
||
|
||
/**
|
||
* 积分二级活动编号
|
||
* 说明: 积分抵扣场景下使用
|
||
*/
|
||
'point_avy_id' => Env::get('ccb.point_avy_id', ''),
|
||
|
||
/**
|
||
* 固定抵扣积分值
|
||
* 说明: 固定积分抵扣场景下使用
|
||
*/
|
||
'fixed_point_val' => Env::get('ccb.fixed_point_val', ''),
|
||
|
||
/**
|
||
* 最小使用积分抵扣限制
|
||
* 说明: 积分抵扣最小值限制
|
||
*/
|
||
'min_point_limit' => Env::get('ccb.min_point_limit', ''),
|
||
|
||
/**
|
||
* 有价券活动编号
|
||
* 说明: 优惠券活动场景下使用
|
||
*/
|
||
'coupon_avy_id' => Env::get('ccb.coupon_avy_id', ''),
|
||
|
||
/**
|
||
* 限制信用卡支付标志
|
||
* 说明: 1=仅限信用卡支付
|
||
*/
|
||
'only_credit_pay_flag' => Env::get('ccb.only_credit_pay_flag', ''),
|
||
|
||
/**
|
||
* 扩展域参数
|
||
* 格式: JSON字符串(配置时无需urlencode,代码会自动处理)
|
||
* 示例: '{"key1":"value1","key2":"value2"}'
|
||
*/
|
||
'extend_params' => Env::get('ccb.extend_params', ''),
|
||
|
||
// ========== 数字人民币(DCEP)配置 ==========
|
||
|
||
/**
|
||
* 数字人民币商户类型
|
||
* 1=融合商户(使用普通商户号)
|
||
* 2=非融合商户(需单独配置数币商户号)
|
||
*/
|
||
'dcep_mct_type' => Env::get('ccb.dcep_mct_type', ''),
|
||
|
||
/**
|
||
* 数字人民币商户号 (dcep_mct_type=2时必填)
|
||
*/
|
||
'dcep_merchant_id' => Env::get('ccb.dcep_merchant_id', ''),
|
||
|
||
/**
|
||
* 数字人民币柜台号 (dcep_mct_type=2时必填)
|
||
*/
|
||
'dcep_pos_id' => Env::get('ccb.dcep_pos_id', ''),
|
||
|
||
/**
|
||
* 数字人民币分行号 (dcep_mct_type=2时必填)
|
||
*/
|
||
'dcep_branch_id' => Env::get('ccb.dcep_branch_id', ''),
|
||
|
||
/**
|
||
* 数字人民币存款账号
|
||
*/
|
||
'dcep_dep_acc_no' => Env::get('ccb.dcep_dep_acc_no', ''),
|
||
|
||
// ========== 二级商户配置(平台类服务方使用) ==========
|
||
|
||
/**
|
||
* 二级商户编号
|
||
* 说明: 平台型服务方为下级商户收款时使用
|
||
*/
|
||
'sub_mct_id' => Env::get('ccb.sub_mct_id', ''),
|
||
|
||
/**
|
||
* 二级商户名称
|
||
*/
|
||
'sub_mct_name' => Env::get('ccb.sub_mct_name', ''),
|
||
|
||
/**
|
||
* 二级商户MCC码
|
||
* 说明: 商户类别码,标识商户行业类型
|
||
*/
|
||
'sub_mct_mcc' => Env::get('ccb.sub_mct_mcc', ''),
|
||
|
||
// ========== 场景编号配置(埋点使用,不参与MAC签名) ==========
|
||
|
||
/**
|
||
* 场景编号
|
||
* 说明: 用于数据埋点分析,不参与MAC校验
|
||
*/
|
||
'scn_id' => Env::get('ccb.scn_id', ''),
|
||
|
||
/**
|
||
* 场景平台编号
|
||
* 说明: 用于数据埋点分析,不参与MAC校验
|
||
*/
|
||
'scn_pltfrm_id' => Env::get('ccb.scn_pltfrm_id', ''),
|
||
|
||
// 日志配置
|
||
'log' => [
|
||
'enabled' => true,
|
||
'level' => Env::get('ccb.log_level', 'info'), // debug, info, warning, error
|
||
'path' => __DIR__ . '/../../../runtime/log/ccblife/',
|
||
],
|
||
|
||
// 安全配置
|
||
'security' => [
|
||
'encrypt_enabled' => true, // 是否启用加密
|
||
'sign_enabled' => true, // 是否启用签名
|
||
'verify_sign' => true, // 是否验证响应签名
|
||
],
|
||
|
||
// 商户信息
|
||
'merchant' => [
|
||
'name' => Env::get('ccb.merchant_name', '丰科贸易(荷西嘉园店)'),
|
||
'logo_url' => Env::get('ccb.merchant_logo', ''),
|
||
'order_detail_url' => Env::get('app_url', 'http://fengketrade.test') . '/pages/order/detail?id=',
|
||
],
|
||
];
|