PHP建设银行支付网络回调验签
2018-01-13 10:08
351 查看
最近在做建行支付接口,商户到银行的已经通了,现在遇到的问题就是当用户交易完成之后建行会给指定URL回复交易信息,其中有一段是SIGN签名,使用MD5withRSA这个算法,接口文档上简单介绍了下算法。验证操作总结分三步:
1) 使用公钥进行签名的逆运算
2) 使用标准MD5算法运算原文
3) 比较1)、2)结果。
其中就卡在了第一步,参考了demo,demo里基本上都是在windows平台下验证的,其中代码如下:
问题是建行的CCBRSA.DLL很久没有更新了,目前在win2003还可以使用,在2008以上的32位系统及64位系统上根本无法使用。
在咨询建行相关人员,得到的回复是只能在服务器上安装java环境,使用官方提供的jar包建立socket通信,然后在php里通过socket客户端来实现数据通信,进行验签。
1.搭建java环境
首先要搭建java环境,本处案例是采用linux服务器,具体的java环境搭建参考
http://blog.csdn.net/xinxin19881112/article/details/46816385。我使用的jdk安装包是“jdk-8u131-linux-x64.tar.gz”,可从oracle官网下载,linux上需要先卸载原有的opensdk里的java程序,再安装下载的jdk。
(说明:安装jdk1.4及以上版本,商户验签包使用jdk1.4编译)
jdk安装完成后,将xml配置文件(名称:ccbnetpayconfig.xml)和jar包(官方提供,名称为:ccbnetpaysign.jar)放在同一目录下
2.配置xml文件
xml配置文件:
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
参数说明:
1.comport:socket通讯端口。配置文件中默认为55533,商户可在0-65535之间选择空置端口,建议使用1024-65535之间的空置端口。
2.maxconn:处理验签的线程数。系统默认为5,商户可按照实际情况配置。
3.merpos: 商户柜台信息,对于有多个柜台的商户可循环配置。
4.Posid:商户柜台号。
5.Pubkey:柜台号对应的公钥。
3.1.4 JAR包的运行方法
方法1. 默认方式将jar包和xml配置文件放在相同目录,在该目录下执行:
方法2. 指定文件路径:
2
3
正常执行状态下控制台输出:server is running on PORT: 55533
等待外部连接。
4.php连接socket验签
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
上面的涉及到配置信息的内容,为官方文档提供的配置信息,本地实现不一定为有效信息,具体以建行提供给商户的配置信息来实现。
根据以上内容,验签工作实现成功。
另外,可以通过nohup 命令将启动jar包的启动命令设置为后台运行,这样退出操作界面,也能保证验签程序的存活了。
步骤:
1) 使用公钥进行签名的逆运算
2) 使用标准MD5算法运算原文
3) 比较1)、2)结果。
其中就卡在了第一步,参考了demo,demo里基本上都是在windows平台下验证的,其中代码如下:
$strSrc=$_POST['src'];<br data-filtered="filtered"> $strSign=$_POST['sign'];<br data-filtered="filtered"> $strPubKey=$_POST['pubkey'];<br data-filtered="filtered"> <br data-filtered="filtered"> $rsasig=new COM("CCBRSA.RSASig");<br data-filtered="filtered"> $rsasig->setpublickey($strPubKey);<br data-filtered="filtered"> $strRet=$rsasig->StringVerifySigature($strSign,$strSrc);
问题是建行的CCBRSA.DLL很久没有更新了,目前在win2003还可以使用,在2008以上的32位系统及64位系统上根本无法使用。
在咨询建行相关人员,得到的回复是只能在服务器上安装java环境,使用官方提供的jar包建立socket通信,然后在php里通过socket客户端来实现数据通信,进行验签。
1.搭建java环境
首先要搭建java环境,本处案例是采用linux服务器,具体的java环境搭建参考
http://blog.csdn.net/xinxin19881112/article/details/46816385。我使用的jdk安装包是“jdk-8u131-linux-x64.tar.gz”,可从oracle官网下载,linux上需要先卸载原有的opensdk里的java程序,再安装下载的jdk。
(说明:安装jdk1.4及以上版本,商户验签包使用jdk1.4编译)
jdk安装完成后,将xml配置文件(名称:ccbnetpayconfig.xml)和jar包(官方提供,名称为:ccbnetpaysign.jar)放在同一目录下
2.配置xml文件
xml配置文件:
配置文件名称:ccbnetpayconfig.xml <?xml version="1.0" encoding="UTF-8"?> <!-- 中国建设银行商户通知验签配置文件 --> <ccbnetpayconfig> <!-- 通讯端口1024~65535之间未被使用的端口 --> <commport> <value>55533</value> </commport> <!-- 通讯端口1024~65535之间未被使用的端口 --> <maxconn> <value>5</value> </maxconn> <!-- 可按照不同的柜台号配置不同的公钥 --> <merpos> <!-- 商户柜台号 --> <posid>100001329</posid> <!-- 对应的公钥 --> <pubkey>30819d300d06092a864886f70d010101050003818b0030818702818100ad10ae07fe299a3993a129153502ca809aff9f9f0059af33a80da26453c0ec7abafc8ba677c869aaaedc6a1a0c59087af329696d5d2eb29750fa70b1b1a35c076e61703711e2fae8251f0ec760976d3f2f7d78ce566b251ffcfe9ed5d5881f8239def691a100f41cde2b9889faeaef72165e9aeaf0a58079f76a796caa806d87020111</pubkey> </merpos> <merpos> <posid>100001321</posid> <pubkey>kkk19d300d06092a864886f70d010101050003818b0030818702818100ad10ae07fe299a3993a129153502ca809aff9f9f0059af33a80da26453c0ec7abafc8ba677c869aaaedc6a1a0c59087af329696d5d2eb29750fa70b1b1a35c076e61703711e2fae8251f0ec760976d3f2f7d78ce566b251ffcfe9ed5d5881f8239def691a100f41cde2b9889faeaef72165e9aeaf0a58079f76a796caa806d87020111</pubkey> </merpos> </ccbnetpayconfig>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
参数说明:
1.comport:socket通讯端口。配置文件中默认为55533,商户可在0-65535之间选择空置端口,建议使用1024-65535之间的空置端口。
2.maxconn:处理验签的线程数。系统默认为5,商户可按照实际情况配置。
3.merpos: 商户柜台信息,对于有多个柜台的商户可循环配置。
4.Posid:商户柜台号。
5.Pubkey:柜台号对应的公钥。
3.1.4 JAR包的运行方法
方法1. 默认方式将jar包和xml配置文件放在相同目录,在该目录下执行:
java -jar ccbnetpaysign.jar1
方法2. 指定文件路径:
java –jar jar包路径 配置文件绝对路径 java –jar /opt/ccbsign/ccbnetpaysign.jar /etc /config/cbnetpayconfig.xml java -jar ./cc/ccbnetpaysign.jar C:\hxj\cc\ccbnetpayconfig.xml1
2
3
正常执行状态下控制台输出:server is running on PORT: 55533
等待外部连接。
4.php连接socket验签
<?php function get_data_from_server($address, $service_port, $send_data) { $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($socket < 0) { echo "socket创建失败原因: " . socket_strerror($socket) . "\n"; } else { echo "socket_create OK,HE HE.\n"; } $result = socket_connect($socket, $address, $service_port); if ($result < 0) { echo "SOCKET连接失败原因: ($result) " . socket_strerror($result) . "\n"; } else { echo "OK.\n"; } //发送命令 $in = $send_data; $out = ''; echo "Send .........."; socket_write($socket, $in, strlen($in)); echo "OK.\n"; echo "Reading Backinformatin:\n\n"; while ($out = socket_read($socket, 2048)) { echo $out; } echo "Close socket........"; socket_close($socket); echo "OK,He He.\n\n"; return $out; } echo "aaaaaa"; echo get_data_from_server("127.0.0.1",55533,"POSID=100001329&BRANCHID=500000000&ORDERID=GWA10081217305965959&PAYMENT=0.01&CURCODE=01&REMARK1=&REMARK2=&SUCCESS=Y&TYPE=1&REFERER=http://114.255.7.208/page/bankpay.do&CLIENTIP=114.255.7.194&SIGN=9a7efc7f15f4b0e7f8fba52649d6b97ae33fad44598a7ca1c26196e8ddba00ecf91a596346e4bfd3cc6d2bdba6c085a3cdb0f231d865d7856e37de89846a371c8bc09f8f2643284260499e1d3f464d9ca9d379fe8af3202a09fc83d39f5c68501a4627d62a3ae891d4b0ff6aa21d61f6ba0e9c8bc5840b292af853d2736ce04a\n"); ?>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
上面的涉及到配置信息的内容,为官方文档提供的配置信息,本地实现不一定为有效信息,具体以建行提供给商户的配置信息来实现。
根据以上内容,验签工作实现成功。
另外,可以通过nohup 命令将启动jar包的启动命令设置为后台运行,这样退出操作界面,也能保证验签程序的存活了。
步骤:
1.进入jar包目录
2.nohupjava -jar ccbnetpaysign.jar &
3.exit命令退出(注:一定要输入exit退出,直接关闭nohup命令会无效)
相关文章推荐
- PHP建设银行支付网络回调验签
- 支付宝 APP支付异步回调验签失败 PHP
- PHP微信APP支付,下单,处理异步回调
- 微信H5支付完整版含PHP回调页面.代码精简2018年2月
- PHP微信支付开发之扫描支付(模式二)后如何回调
- PHP:微信小程序调用【统一下单】【微信支付】【支付回调】API;XML转Array,Array转XML方法(通用)
- ecshop php 建设银行 支付接口
- php 开发Google支付回调验证并发货
- PHP微信支付开发之扫描支付(模式二)后如何回调
- PHP服务端集成支付宝APP支付以及回调
- php处理苹果支付接口回调
- PHP微信支付开发之扫描支付(模式二)后如何回调
- PHP微信支付开发之扫描支付(模式二)后如何回调
- PHP服务端集成微信APP支付以及回调
- php处理苹果支付接口回调
- 微信支付WxpayAPI_php_v3(三)支付成功回调
- 微信扫码支付native包含回调PHP完整版2018
- 微信扫码支付电脑版完整版含回调PHP带支付成功跳转功能
- 微信H5支付:网络环境未能通过安全验证,请稍后再试。解决办法(PHP版)
- 支付宝APP支付里设置应用网关和授权回调地址是不必填的