php調用java


PHP調用JAVA方式


1.     背景

在開發招商銀行信用卡分期付款功能過程中,在支付成功之后需要對銀行的返回數據進行簽名驗證,因簽名加密方式招商銀行是不提供的,只提供了相應的JAVA驗證類測試例子,而本項目采用的是PHP架構方式,因此需要PHP調用JAVA的驗證類來測試簽名是否正確。

2.     目的

本文檔提供一種PHP調用JAVA類的方式來進行招行的支付成功簽名驗證,本方法也可用於其他銀行的JAVA簽名驗證方式。

3.     名詞解釋

名詞

解釋說明

php-java-bridge

PHPJAVA的連接橋

 

4.     php-java-bridge安裝和配置介紹

4.1 安裝

Php-java-bridge下載路徑:

http://sourceforge.net/projects/php-java-bridge/files/RHEL_FC%20SecurityEnhancedLinux/php-java-bridge_5.4.4.2/

最新php-java-bridge版本是php-java-bridge_6.2.1.tar.gz

解壓之后采用/usr/local/php/phpize進行模塊編譯,提示Cannot find config.m4,版本過高問題,采用了5.4.4.2版本。

 

編譯及安裝:

tar zxvf php-java-bridge_5.4.4.2.tar.gz

cd php-java-bridge-5.4.4.2/

/usr/local/php/bin/phpize

./configure --disable-servlet --with-java=/usr/local/java/,/usr/local/java/jre --with-php-config=/usr/local/php/bin/php-config

make && make install

 

4.2 配置

vim /usr/local/php/etc/php.ini

[新增]

extension=java.so

[java]

java.java_home="/usr/local/java/"

java.java="/usr/local/java/jre/bin/java"

java.log_file="/var/log/php-java-bridge.log"

java.classpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/JavaBridge.jar"

java.libpath="/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/"

java.log_level="3"

java.hosts="10.204.79.232:8081"

4.3 啟動

重新啟動nginx或者apache,輸入<?php phpinfo();?>可以看到

java support

Enabled

java bridge

5.4.4.2

java.log_level

2

 

手動啟動javaBridge

java -jar JavaBridge.jar SERVLET:8080&

也可以嘗試使用java -jar JavaBridge.jar SERVLET_LOCAL:8081&

4.4 測試

解壓javaBridge.jar,取出java目錄下相關的Java.inc文件

測試代碼:

require_once("java/Java.inc");

$string = new Java("java.lang.String", "HelloWorld");

echo $string;

$system=new Java("java.lang.System");

echo "Java version=".$system->getProperty("java.version")." ";

注意:java/Java.inc記得從javaBridge.jar解壓出來放在相關php代碼中

注意取值:java_is_true java_is_false java_values

 

5.     注意事項及配置過程中的問題

下述描述在實際配置測試過程中可能會碰到的問題及解決方法:

5.1  問題

問題1

configure: error: host_alias is not set. Make sure to run config.guess

Back-end configuration failed.

Please install the recommended autoconf, libtool and automake versions

or disable back-end configuration and use the pre-compiled J2EE back-end:

    ./configure --disable-backend --with-java=<JAVA_HOME>

configure: error: ./configure.gnu failed for server

安裝yum install libtool即可

 

5.2  注意事項

事項1

遠程調用require_once('http://10.204.79.231:8080/JavaBridget/java/Java.inc');需要設置php.iniallow_url_include參數為on,同時編輯 JavaBridge 部署的 Web 應用程序目錄中的 web.xml 文件,如下:

      

取消對這個部分的注釋,以便允許對您的 Java 類進行遠程訪問

<init-param>
  <param-name>promiscuous</param-name>
  <param-value>On</param-value>
</init-param>

 

         事項2

         在實際生產環境中,考慮到如果每台機器都部署一個JavaBridge服務的話,不好維護。故考慮在單台或2台左右機器上部署,其他機器連接到部署機器上,可以做分流承壓的功效並且易監控。在外網環境下發現在調用部署環境的內外網IP都無法獲取到指定文檔。實際require_once本質就是調用部署環境的java.inc文件,可以考慮把相關文件放在本地生產環境上,但在引用Java_require相關JAR包會提示連接不到JavaBridge服務,閱讀Java.inc可以查看它會通過幾個地方設置JAVA_HOST宏變量,第一種是通過require_once里面的IP或者域名和端口,另外一種是在未設置JAVA_HOST宏變量的前提下讀取php.ini,如果都沒有java.hosts參數則默認為127.0.0.1:8080

排除第一種方式如果采用讀取php.ini的話,因為本身java.hosts參數不屬於PHP可人為設置的參數,采用ini_set函數並不能指定java.hosts的值,所以一種方式是在所有項目的生產環境的php.ini都指定內網IP和端口,如java.hosts=10.204.79.231:8080。還有一種方式,查閱Java.inc可以看到是在未設置JAVA_HOST變量的前提下是去讀取php.ini,我們可以在require_once('java/Java.inc')之前新增一行define ("JAVA_HOSTS", $host)

5.3  參考例子

個人的實際測試代碼如下:

private function _checkSign($strText, $strSign){

  $ret = false;

  try{

   $host = ConfigWrapper::load()->services->phpjava->host;

   if($host != NULL){

    define ("JAVA_HOSTS", $host);

   }

   require_once('java/Java.inc');

   java_require(self::CMBJAR);

   $pay = new Java('testCdpaySign', self::CERFILE);

   $result = $pay->checkSign((string)$strText, (string)$strSign);

   if(java_is_true($result) == 1){

    $ret = true;

   }

  }catch (\Exception $e) {

   Logger::debug("_checkSign = " . $e->getMessage());

  }

  return $ret;

 }

        

6.     參考鏈接

http://blog.sina.com.cn/s/blog_51a5e5f40100cxie.html

http://www.cnblogs.com/benio/archive/2010/09/27/1837027.html

http://wangduowu.iteye.com/blog/310846

http://www.tuicool.com/articles/uYVRfu

http://www.ibm.com/developerworks/cn/aix/library/au-javaphpaix5/

http://blog.sina.com.cn/s/blog_5f857be30100u6wp.html

http://www.oicto.com/ecshop-chinapay/

http://www.cppblog.com/zzfmars/archive/2011/04/10/143875.html

http://sourceforge.net/projects/php-java-bridge/files/RHEL_FC%20SecurityEnhancedLinux/php-java-bridge_5.4.4.2/

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM