一参考资料工行支付SDKhttps://open.icbc.com.cn/icbc/apip/docs_sdkdemo.html工行支付资料https://download.csdn.net/download/huaweichenai/92636164PHP对接工行支付组件https://download.csdn.net/download/huaweichenai/92636166二支付详解1.支付地址https://gw.open.icbc.com.cn/api/cardbusiness/qrcode/qrgenerate/V12.支付参数app_idAPP的编号,应用在API开放平台注册时生成msg_id消息通讯唯一编号每次调用独立生成APP级唯一format请求参数格式仅支持jsoncharset字符集 ,缺省为UTF-8sign_type签名类型本接口为RSA2-RSAWithSha256认证方式为RSA2sign报文签名timestamp交易发生时间戳yyyy-MM-dd HH:mm:ss格式biz_content请求参数的集合请求参数mer_id商户线下档案编号out_trade_no商户系统订单号order_amt订单总金额 单位分trade_date商户订单生成日期 yyyyMMddtrade_time商户订单生成时间 HHmmsspay_expire二维码有效期 单位秒必须小于24小时notify_url商户接收支付成功通知消息URLtporder_create_ip商户订单生成的机器IPsp_flag扫码后是否需要跳转分行 0否1是默认值0notify_flag商户是否开启通知接口 0-否1-是默认值03.签名生成逻辑1签名原文构造获取所有请求参数不包括字节型参数如文件、字节流剔除sign字段。将筛选的参数按照第一个字符的键值ASCII码递增排序字母升序排序如果遇到相同字符则按照第二个字符的键值ASCII码递增排序以此类推。将排序后的参数与其对.值组合成“参数参数值”的格式并且把这些参数用字符连接来此时生成的字符串为待签名字符串。签名原文示例/api/cardbusiness/qrcode/qrgenerate/V1?app_idXXXbiz_content{mer_id:XXX,out_trade_no:XXX,order_amt:1,trade_date:20260206,trade_time:095241,pay_expire:3600,notify_url:XXX,tporder_create_ip:127.0.0.1,notify_flag:1}charsetUTF-8formatjsonmsg_idXXXsign_typeRSA2timestamp2026-02-06 09:52:412签名生成将待签名字符串进行RSA2签名这里以PHP为例如下$privateKey 提供的签名私钥; $data 待签名字符串; $privateKey str_replace([\r, \n, ], , $privateKey); $privateKey -----BEGIN PRIVATE KEY-----\n.$privateKey.\n-----END PRIVATE KEY-----; $success openssl_sign($data, $signature, $privateKey, OPENSSL_ALGO_SHA256); if (!$success) { echo 签名失败; exit(); } $signature base64_encode($signature);4接口调用demo示例$bizContent [ mer_id xxx,//商户线下档案编号 out_trade_no xxx,//商户系统订单号 order_amt 1,//金额 单位分 trade_date 20260206,//商户订单生成日期 trade_time 100101,//商户订单生成时间 pay_expire 3600,//二维码有效期 notify_url http://www.test.com,//商户接收支付成功通知消息URL tporder_create_ip 127.0.0.1,//商户订单生成的机器IP sp_flag 0,//扫码后是否需要跳转分行 notify_flag 1,//商户是否开启通知接口 ]; $requestData [ app_id xxx,//APPID msg_id xxx,//消息通讯唯一编号 format json,//请求参数格式 charset UTF-8,//字符集 sign_type RSA2,//签名类型 timestamp 2026-02-06 10:01:01, biz_content json_encode($bizContent, JSON_UNESCAPED_UNICODE), ]; //签名 $requestData[sign] xxx;//签名 $ch curl_init(); curl_setopt($ch, CURLOPT_URL, 接口地址); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($requestData)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 生产环境开启SSL验证 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); curl_setopt($ch, CURLOPT_TIMEOUT, 30); curl_setopt($ch, CURLOPT_HTTPHEADER, [ Content-Type: application/json, ]); $response curl_exec($ch); $httpCode curl_getinfo($ch, CURLINFO_HTTP_CODE); if (curl_errno($ch)) { throw new \Exception(HTTP请求失败 . curl_error($ch)); } curl_close($ch); return $response;