需求: 因为国密签名Sm2 sm3加密算法,在php端略显无力!
对接的三方也只有java的demo, 而且.sm2文件 php好像也解析不开!
方案:
1:建立java环境 web容器 创造接口把加密放进去 让php请求
2:建立java环境 用本地插件形式调取java-jar包!
显然第二种更简便, 只为了一个加密算法而言!
这里我在官网下载了1.8 的exe进行一键安装!
Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads/#java8-windows
PHP/Java Bridgehttps://php-java-bridge.sourceforge.net/pjb/download.php
红框内点击即可下载,
该目录下运行jar包!
注意:一开始是没有JavaBridge.lo文件,第一次运行后就会出现!
Java.inc文件暂时先放同目录,后面编写php会使用到!
运行后有小弹窗!
点击确定即可!此时两个语言衔接的环境就搭建好了!
下载idea编辑器! 我是体验的30天哈~
目录结构于此! 此时就会默认创建一个主函数!man
我们修改一下!
此时,我们知道add方法是运行无误的!我们等会就调取add方法即可!
我们开始打包!
此时我们简单的类包就封好了,我们就调取这个jar包的 add方法!
先看下我们应该把打包好的jar 放到哪个位置!
找到我们第一次运行环境时自动创建的log文件,
就放到该目录下, 放过去之前先把环境关掉Crtl+c退出环境
记号我们打包好的jar文件,类文件的目录结构!
目录结构为: org.example.Main 一定不要写错!!!!!!
放置好后重新启动下环境!我们开始写php!
1:小结 先用原生php 写一下! 与框架写法有一点点差距!下面会讲!
注意看,我引用了之前下载的Java.inc文件!
改文件必须放到php可以加载到的目录哦!否则无法链接成功!
-
-
- include_once("WEB-INF/lib/Java.inc");
- try {
- $model = new java("org.example.Main");
- $props = $model->add((int) 1,(int) 2);
- $array = java_values($props);
- var_dump($array);
- exit();
- } catch (JavaException $ex) {
- echo "An exception occured: "; echo $ex; echo "
\n"; - }
我们运行输出一下!是不是可以了呢!
2:我们开始编写一下框架的写法!我这里使用的TP5.1
- try{
- $model = java("org.example.Main");
- $props = $model->add((int) 1,(int) 2);
- $array = java_values($props);
- $arr = json_decode($array,true);
- var_dump($arr);
- }catch (\JavaException $ex) {
- echo "An exception occured: "; echo $ex; echo "
\n"; - }
加载inc文件正常加载!
差异在于调取插件的时候 不是new java() 而是直接 java(),
在框架内new java() 会找不到类,
框架内 java() java_values 以及异常类 JavaException 在编辑器可能会报错!这个不用在意!
解析java的返回值时务必请使用java_values,以防出现不必要的麻烦!
如果你写的java类里面包含读取文件!
当你单独运行java类的时候是没有问题的!但是从php调取就会找不到文件!
因为你当前运行的环境目录是在php! 请以php目录为准!