PHP-Java-Bridge的使用(平安銀行支付功能專版)

去年作平安銀行的時候,用到了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

二、若是這樣沒有成功,能夠聯繫我,查看具體什麼緣由。

相關文章
相關標籤/搜索