去年做平安银行的时候,用到了PHP-Java-Bridge,后来写了一篇博客记录使用PHP-Java-Bridge的一些心得(连接:http://my.oschina.net/kenblog/blog/316234)。
后来有很多陆陆续续的朋友在做平安银行接口使用PHP-Java-Bridge,看了我那篇博客也有点蛋疼(可能是那个时候才开始写博客,思路、条理和描述之类的不是很清楚)。
最近使用PHP-Java-Bridge做平安银行开发的人还挺多,好些朋友都来问过,现在抽空专门写一篇关于平安银行支付使用PHP-Java-Bridge的教程,希望给能帮到的人。
使用环境:
PHP版本:最高为5.4,当前测试为5.4/5.3
JDK:官方最新版本,当前测试为1.8和linux自带openjdk
操作系统:Windows7 32位/64位 | Linux(Centos6.5,5.9)
1、使用PHP-Java-Bridge
下载以下文件,放到你的项目中
文件下载:http://pan.baidu.com/s/1mg02WGC
2、正确的放置jar包
1)、将你的平安银行支付相关的jar包放到java的jar下面
2)、将php-java-bridge文件放到java的jar下面
以上所有jar文件已经打包:下载以下文件,放到安装的java的jar下面
文件下载:http://pan.baidu.com/s/1pJ3KDAz
路径如下:
1
2
|
windows:C:\Program Files\Java\jre1.8.0_25\lib\ext
linux:/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/lib/ext
|
注:这个路径会根据你系统安装的java版本和路径不同而不同,但是大概都差不多
3、修改平安银行的配置文件
到上面两个路径下面找到classes文件夹下面的payclient.properties文件
修改"cafile="为你的merchant.jks路径,这里使用的是绝对路径,也可以使用相对路径
代码如下:
1
2
|
windows:
"cafile=C:/Program Files/Java/jre1.8.0_25/lib/ext/classes/merchant.jks"
linux:
"cafile=/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.65.x86_64/jre/lib/ext/classes/merchant.jks"
|
4、开启PHP-Java-Bridge
到上面两个路径下面执行JavaBridge.jar文件
1
2
|
windows:直接双击jar包下面的JavaBridge.jar文件即可运行
linux:使用命令
"Java -jar JavaBridge.jar SERVLET_LOCAL:8080 &"
|
5、在你的项目中使用PHP-Java-Bridge
以下给出了一个实例代码,具体需要和你的项目需求进行修改
代码如下:
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
37
|
<?php
//1、引用Java.inc
require_once
(
$_SERVER
[
"DOCUMENT_ROOT"
].
"/bridge/java/Java.inc"
);
//2、Java方法实例化
try
{
$util
=
new
Java(
"com.sdb.payclient.core.PayclientInterfaceUtil"
);
$input
=
new
Java(
"com.ecc.emp.data.KeyedCollection"
,
"input"
);
$signDataput
=
new
Java(
"com.ecc.emp.data.KeyedCollection"
,
"signDataput"
);
$urlEncoder
=
new
Java(
"java.net.URLEncoder"
);
}
catch
(JavaException
$e
){
echo
"错误:实例化失败:<br/>"
,
$e
;
}
//3、对数据进行组装,然后生成orig和签名sign
try
{
//组装数据到$input
$input
->put(
"masterId"
,
$payment_masterId
);
$input
->put(
"orderId"
,
$payment_orderId
);
$input
->put(
"currency"
,
$payment_currency
);
$input
->put(
"amount"
,
$payment_amount
);
$input
->put(
"paydate"
,
$payment_paydate
);
$input
->put(
"remark"
,
$payment_remark
);
$input
->put(
"objectName"
,
$payment_objectName
);
$input
->put(
"validtime"
,
$payment_validtime
);
//设定初始值
$orig
=
""
;
//原始数据
$sign
=
""
;
//产生签名
$encoding
=
"GBK"
;
//获得orig与sign
$signDataput
=
$util
->getSignData(
$input
);
$orig
=
$signDataput
->getDataValue(
"orig"
);
$sign
=
$signDataput
->getDataValue(
"sign"
);
//对签名进行编码
$orig
=
$util
->Base64Encode(
$orig
,
$encoding
);
$sign
=
$util
->Base64Encode(
$sign
,
$encoding
);
$orig
=
$urlEncoder
->encode(
$orig
,
$encoding
);
$sign
=
$urlEncoder
->encode(
$sign
,
$encoding
);
?>
|
6、按照以上五部操作,基本是没有问题的,如果有问题,请检查你的代码调用是否正确
关于正式上线:
如果项目要正式上线,需要替换payclient.properties文件中的khPaymentUrl=https://testebank.sdb.com.cn:461/corporbank/为平安银行的正式支付地址
备注:
1、如果你成功了,有空可以看下这篇博客:http://my.oschina.net/kenblog/blog/316234
2、如果这样没有成功,可以联系我,查看具体什么原因。