符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
用php的curl模拟浏览器请求是访问java服务器程序
永年网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联建站自2013年起到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
2.用java的一个http类库同样发送http请求来访问PHP服务器
$context=stream_context_create(array('http'=array('method'="GET",'timeout'=30,)));
$string=file_get_contents('',false,$context);//换成java地址
echo '这可不是百度,只是我输出了百度的返回';
echo $string;
PHP调用JAVA方式
1. 背景
在开发招商银行信用卡分期付款功能过程中,在支付成功之后需要对银行的返回数据进行签名验证,因签名加密方式招商银行是不提供的,只提供了相应的JAVA验证类测试例子,而本项目采用的是PHP架构方式,因此需要PHP调用JAVA的验证类来测试签名是否正确。
2. 目的
本文档提供一种PHP调用JAVA类的方式来进行招行的支付成功签名验证,本方法也可用于其他银行的JAVA签名验证方式。
3. 名词解释
名词
解释说明
php-java-bridge
PHP和JAVA的连接桥
4. php-java-bridge安装和配置介绍
4.1 安装
Php-java-bridge下载路径:
最新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-configmake 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:80814.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_values5. 注意事项及配置过程中的问题
下述描述在实际配置测试过程中可能会碰到的问题及解决方法:
5.1 问题
问题1:
configure: error: host_alias is not set. Make sure to run config.guessBack-end configuration failed.
Please install the recommended autoconf, libtool and automake versionsor 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(‘‘);需要设置php.ini的allow_url_include参数为on,同时编辑 JavaBridge 部署的 Web 应用程序目录中的 web.xml 文件,如下:
取消对这个部分的注释,以便允许对您的 Java 类进行远程访问init-param
param-namepromiscuous/param-name
param-valueOn/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;
}
在java中用Inflater.setInput()输入PHP传来的码文,用Inflater.inflate()解压出原文.
再用new String(原文, "GBK");转换成java字符串。
java 里面有一个URL对象,比如:
在php里面获取参数:
echo $_GET['id'];
这样就获取了