最近在忙着折腾华夏银行大宗三方B2B开发,拿到接口的时间直接懵逼,给了我一个JAVA的jar,天空中一万只草泥马飞过。
系统是PHP的程序,结果给我一个java的,而且只有java的,还是gb2312。
苦逼的程序猿,开始尝试使用php-java-bridge,PHP调用jar包的方法。实践检验可行,能够调用方法,但是返回数据的强制转型,怎么也搞不出来。
奋起暴躁的猿怎么可能忍得了,去他妹妹的jar,直接用PHP暴力发送数据。
1、安装JD-GUI
安装JD-GUI之前先安装jdk,直接在网上能搜到很多教程。
我下载的版本是https://github.com/java-decompiler/jd-gui/releases/download/v1.4.0/jd-gui-1.4.0-0.noarch.rpm。
直接暴力读java源码,用PHP实现他的逻辑。
2、不抱怨了,直接上PHP的代码吧。
注:这里只提供一种思路哈,其实很简单,就是往银行的服务器上发送xml数据包就可以。
签名实现方法:
private function sign($data)
{
$certs = array();
openssl_pkcs12_read(file_get_contents("123456.pfx"), $certs, "123456");
if (!$certs) return;
$signature = '';
openssl_sign($data, $signature, $certs['pkey']);
return base64_encode($signature);
}
拼接发送数据:
private function get_post_data($original_len, $xml_data)
{
$headers = array(
'POST /dzserver/test HTTP/1.1',
"\r\n",
'User-Agent: Java/1.3.1',
"\r\n",
'Host: ×××.××.×××.×××:9080',
"\r\n",
'Cookie: JSESSIONID=aIG-RvFXRUUe',
"\r\n",
'Accept: text/html, image/gif, image/jpeg, *; q=.2, * /*; q=.2',
"\r\n",
'Connection: keep-alive',
"\r\n",
'Content-Type: application/x-www-form-urlencoded',
"\r\n",
'Content-Length:'
);
$headers_str = implode('', $headers);
$post_data = $headers_str . $original_len . "\r\n" . "\r\n" . $xml_data;
return $post_data;
}
发送数据:
private function post_url($url, $post_data)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_HTTP_VERSION, '1.0');
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
返回的数据直接用simpleXMLElement处理返回对象,可以调用里面的数据。
注:这里只提供一个思路,请求银行服务器的类代码有500多行,就不往上贴了,有需要加扣扣(七九二二四零五八六)哈