TP5项目中配置php_java_bridge并调用自定义jar包中的类


        背景:最近公司接入第三方支付,提供了相关jar包,但是公司项目使用的是TP5框架,故此研究了一下TP5项目中配置php_java_bridge来调用jar包的方法。
        先本地windows上配置测试,测试成功后再通过宝塔面板配置到centos7环境中,通过宝塔面板配置步骤相对简单。


        一、安装Java。windows下的安装可参考网上的教程,centos7中通过宝塔面板,可以直接安装tomcat8,也可以安装Java项目管理器,通过它安装tomcat8,安装tomcat8会附带安装jdk1.8。

        二、配置php_java_bridge。


1、下载JavaBridgeTemplate721.war
    进入网站http://sourceforge.net/projects/php-java-bridge/files,选择Binarypackage,
    然后选择最新的版本Php-java-bridge_7.2.1,下载JavaBridgeTemplate721.war;
2、把JavaBridgeTemplate721.war放到tomcat下webapps,
    启动tomcat,tomcat就会解析该文件,然后产生一个同名文件夹,tomcat的在这里的主要作用就是这个(用完可以关掉);
3、启动方法。

    进入该文件夹下/WEB-INF/lib目录,
    windows执行命令:java -jar JavaBridge.jar SERVLET_LOCAL:8081 &
    linux下执行命令:java -jar /www/server/tomcat8/webapps/JavaBridgeTemplate721/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8081 &

也可在配置文件中添加此命令开机执行(rc.local 文件要配置执行权限!否则无效):

编辑     vi /etc/rc.local

将命令添加到结尾,注意这里肯定要JavaBridge.jar的完整路径;

为确保JavaBridge.jar保持运行状态,可以通过宝塔面板添加计划任务,选择shell脚本,脚本内容如下:

#!/bin/bash
#判断进程是否存在,如果不存在就启动它
PIDS=`ps -ef |grep 'JavaBridge.jar' |grep -v grep | awk '{print $2}'`
if [ "$PIDS" == "" ]; then
echo "JavaBridge.jar is starting!"
#else
#运行进程
java -jar /www/server/tomcat8/webapps/JavaBridgeTemplate721/WEB-INF/lib/JavaBridge.jar SERVLET_LOCAL:8081 &
fi

        三、对第三方提供的jar包,通过安装eclipse插件查看源码进行重写,或者了解jar包中要调用类的路径。调试OK后将项目导出为可运行的jar文件(如果选择的不是该选项,linux环境中可能调用不到),复制到步骤一安装目录下的jdk1.8.0_181\jre\lib\ext文件夹中。

        四、TP5项目中,使用composer安装php_java_bridge依赖包,命令:composer require soluble/japha,安装包地址:https://packagist.org/packages/soluble/japha。

TP5项目中调用示例:

use Soluble\Japha\Bridge\Adapter as BridgeAdapter;
use Soluble\Japha\Bridge\Exception as BridgeException;

class Rsautil
{

    private $bridge;
    private $java;

    public function __construct()
    {


        #--实例化php_java_bridge:
        $options = [
            'servlet_address' => 'localhost:8081/php-servlet.jar',
            'driver' => 'pjb62'
        ];
        try {
            #--实例化java类:
            $java = $this->java = new BridgeAdapter($options);

            #--测试调用java系统类:
            /*$props = $java->java("java.lang.System")->getProperties();
            $array = $java->values($props);
            foreach ($array as $k => $v) {
                echo "$k=>$v";
                echo "
\n";             }             echo "
\n";*/             #--调用自定义java类:             $this->bridge = $java->java("com.third.ReadP12Cert");         } catch (BridgeException\ConnectionException $e) {             #--无法访问服务器:             echo $e->getMessage();         }     } /** * 调用jar包中的loadPrivateKey类,从证书文件中装入私钥 * @return 私钥 * @throws Exception */ public function loadPrivateKey() { $res = self::$bridge->loadPrivateKey(); $res = $this->java->values($res); ($res) or die('您使用的私钥格式错误,请检查私钥配置'); return $res; } }

 

       在此实践过程中,参考过很多先行者的文章,这里特别鸣谢,因参考文章太多,这里就不一一列出了。


 

你可能感兴趣的:(TP5项目中配置php_java_bridge并调用自定义jar包中的类)