去年作平安銀行的時候,用到了PHP-Java-Bridge,後來寫了一篇博客記錄使用PHP-Java-Bridge的一些心得(鏈接:http://my.oschina.net/kenblog/blog/316234)。php
後來有不少陸陸續續的朋友在作平安銀行接口使用PHP-Java-Bridge,看了我那篇博客也有點蛋疼(多是那個時候纔開始寫博客,思路、條理和描述之類的不是很清楚)。java
最近使用PHP-Java-Bridge作平安銀行開發的人還挺多,好些朋友都來問過,如今抽空專門寫一篇關於平安銀行支付使用PHP-Java-Bridge的教程,但願給能幫到的人。linux
使用環境:shell
PHP版本:最高爲5.4,當前測試爲5.4/5.3
windows
JDK:官方最新版本,當前測試爲1.8和linux自帶openjdk
jvm
操做系統:Windows7 32位/64位 | Linux(Centos6.5,5.9)
測試
一、使用PHP-Java-Bridgeui
下載如下文件,放到你的項目中
編碼
文件下載:http://pan.baidu.com/s/1mg02WGCurl
二、正確的放置jar包
1)、將你的平安銀行支付相關的jar包放到java的jar下面
2)、將php-java-bridge文件放到java的jar下面
以上全部jar文件已經打包:下載如下文件,放到安裝的java的jar下面
文件下載:http://pan.baidu.com/s/1pJ3KDAz
路徑以下:
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版本和路徑不一樣而不一樣,可是大概都差很少
三、修改平安銀行的配置文件
到上面兩個路徑下面找到classes文件夾下面的payclient.properties文件
修改"cafile="爲你的merchant.jks路徑,這裏使用的是絕對路徑,也能夠使用相對路徑
代碼以下:
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"
四、開啓PHP-Java-Bridge
到上面兩個路徑下面執行JavaBridge.jar文件
windows:直接雙擊jar包下面的JavaBridge.jar文件便可運行 linux:使用命令"Java -jar JavaBridge.jar SERVLET_LOCAL:8080 &"
五、在你的項目中使用PHP-Java-Bridge
如下給出了一個實例代碼,具體須要和你的項目需求進行修改
代碼以下:
<?php //一、引用Java.inc require_once($_SERVER["DOCUMENT_ROOT"]."/bridge/java/Java.inc"); //二、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; } //三、對數據進行組裝,而後生成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); ?>
六、按照以上五部操做,基本是沒有問題的,若是有問題,請檢查你的代碼調用是否正確
關於正式上線:
若是項目要正式上線,須要替換payclient.properties文件中的khPaymentUrl=https://testebank.sdb.com.cn:461/corporbank/爲平安銀行的正式支付地址
備註:
一、若是你成功了,有空能夠看下這篇博客:http://my.oschina.net/kenblog/blog/316234
二、若是這樣沒有成功,能夠聯繫我,查看具體什麼緣由。