thinkphp对接银联b2b支付需使用企业网银支付(商户版),核心是适配银联企业网银支付流程,包括配置acp_sdk、构造biztype=000201等b2b专用参数、实现退款退票申请及严格验签的异步通知与对账。

ThinkPHP 对接银联 B2B 网关支付与退款,核心在于适配银联企业网银支付(即商户版企业网银支付)流程,而非普通 B2C 网关支付。银联官方明确将“企业网银支付(商户版)”定义为面向直接对接银联系统的商户提供的 B2B 支付方式,由银联提供统一收银台并支持清算对账——这正是 ThinkPHP 项目中需落地的场景。
确认使用的是企业网银支付(B2B)而非普通网关支付
银联体系中,“网关支付”通常指 B2C 场景(用户跳转银联页面完成个人卡支付),而 B2B 场景对应的是企业网银支付(商户版)。它要求付款方为企业,且需通过其对公网银完成认证与扣款。若你的业务是向合作企业收取货款、服务费或平台分润,必须走此通道。
关键区别:
- 普通网关支付:持卡人输入银行卡号/登录银联账户,适用于个人消费者;
- 企业网银支付:商户发起请求后,跳转至付款企业网银登录页(如工行、建行、招行等),由企业财务在自身网银中确认付款,资金从企业对公账户出账;
- 接口调用主体是商户系统(你),但支付动作发生在付款方企业网银端,银联仅作指令中转与结果通知。
ThinkPHP 中集成银联企业网银支付 SDK 的步骤
银联未提供原生 ThinkPHP SDK,但其 Java/PHP 服务端 SDK 均基于标准 HTTP + 签名机制,可平滑接入 ThinkPHP 项目。
操作要点:
- 下载银联开放服务平台提供的 PHP 版 acp_sdk(注意选择“企业网银支付”对应文档包,非通用网关支付包);
- 将 SDK 核心类(如 AcpService.php、SDKConfig.php、CertUtil.php)放入 ThinkPHP 的
extend/目录,按命名空间规范注册自动加载; - 在
config/下新建chinapay.php,配置生产/测试环境参数:merId(银联分配的企业商户号)、certPath(签名证书路径)、encryptCertPath(加密证书路径)、verifyCertPath(验签证书路径); - 签名逻辑必须严格遵循银联要求:参数按 key=value 拼接、字典序排序、SHA-256 摘要、私钥签名、Base64 编码,ThinkPHP 中建议封装为独立 service 类复用;
- 支付请求需构造
txnType=01(消费)、bizType=000201(B2B 企业网银支付)、channelType=07(企业网银)等固定字段,不可套用 B2C 的 bizType。
退款接口实现要点(仅支持原路退回且需企业网银二次确认)
企业网银支付的退款不是单边操作,银联要求退款必须经付款方企业网银再次授权,因此退款接口本质是“发起退票申请”,而非实时到账。
ThinkPHP 中需注意:
- 调用退款接口时,
txnType设为04(退货),origQryId必须传原支付交易的queryId(非 orderNo),该值在支付成功异步通知中返回; - 银联不保证退款即时成功,需主动轮询或监听异步通知(
backEndUrl),通知中respCode=00且origRespCode=00才代表企业网银已确认退票; - 退款金额不能超过原交易金额,且不支持部分退款分多次提交(每次退款需对应独立原交易);
- 退款请求同样需签名,且验签响应报文时,必须使用银联下发的验签证书(非你自己的签名证书)。
异步通知与对账处理(ThinkPHP 实际落地中最易出错环节)
企业网银支付的异步通知(backEndUrl)和对账文件下载,是保障资金一致性的关键,不能依赖前端跳转或用户操作。
建议做法:
- 在控制器中单独设一个无中间件、无 CSRF 验证的接口(如
/pay/chinapay/notify),接收银联 POST 数据; - 收到通知后,先校验
sign字段(用银联验签证书 + SHA-256),再检查respCode和业务状态,更新本地订单为“已支付”或“已退款”; - 每日定时任务调用银联对账接口(
fileType=01),下载压缩对账文件,解压后逐行比对交易流水号、金额、状态,生成差异报告; - 所有通知和对账日志必须写入独立数据库表(含原始报文、验签结果、处理时间),便于监管审计与问题追溯。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











