需求:PHPJAVA做交互,PHP传递支付信息给JAVA签名后反馈给PHP,然后提交给工商银行。

大体思路如下图:

 

 

苹果巴士

准备技术:webservice,json,php,java

最近在做一个工商银行支付接口的项目,虽然是小项目,但是做了很久了,总结原因,并非技术因素,而是沟通问题,因为方面给予的回复效率太低,每次都要等上几天的时间。

刚开始向对方索要签名扩展,因为我们使用的语言是PHP,所以一定要对应我们服务器上的PHP版本才能使用扩展,而经过几番协调之后,对方终于给了回复,但是对方给的so文件无法与我们的PHP版本对应,这就导致程序开发依然无法进展下去了。

几经反复协调,最后对方在半个月以后给了一套java的签名跳转程序让我们自己研究(汗!我不会java,没办法,为了兑现客户的承诺,我们只好硬着头皮上了。

研究了几个小时的java之后,开始看起了银行给的程序,基本上都能看懂,但是后来依然无法做跳转,后来银行提醒说,提交支付商品的时间要向银行索要,不是自己写的,因为银行的测试服务器时间和实际的不同的。此问题后来也解决了,但是后面想到PHP如何与JAVA交互呢,因为PHP要提交数据给JAVA,然后JAVA签名,最后把数据返回给PHPPHP在提交POST给工商银行,这就是总体的思路。因为多年的经验,所以一下子想到了webservice,但是很久没做了,最后花了些时间又熟悉了熟悉。下面分别是PHPJAVA建立webservice与调用webservice数据的细节。

首先开启soap扩展extension=php_soap.dll

然后重启apache,如果是LINUX的话,需要重编译PHP或用phpize也可以。

然后建立一个test.php的文件,代码如下:

PHP:

 

 

 
  
  1. <?php 
  2. //苹果巴士www.ipukbus.com jeffxie@gmail.com
  3. ini_set("soap.wsdl_cache_enabled""0"); // disabling WSDL cache 
  4. $wsdl="http://localhost:8080/test/myservicePort?wsdl"; //webservice地址 
  5. $soap=new SoapClient($wsdlarray('trace'=>true,'cache_wsdl'=>WSDL_CACHE_NONE, 'soap_version'   => SOAP_1_1)); 
  6. $method="SayHi"
  7. $params = array('arg0'=>json_encode(array("hello111","测试")));//传入数据,并编码为json 
  8. try{ 
  9.     $result=$soap->$method($params); 
  10. }catch(Exception $e) { 
  11.     echo "Exception: " . $e->getMessage(); 
  12. //$result为stdClass类型,因此不能使用 echo $result的方式输出,会报错的。 
  13. echo $result->return
  14.  
  15. ?>