需求:PHP與JAVA做交互,PHP傳遞支付信息給JAVA簽名後反饋給PHP,然後提交給工商銀行。
大體思路如下圖:
準備技術:webservice,json,php,java
最近在做一個工商銀行支付接口的項目,雖然是小項目,但是做了很久了,總結原因,並非技術因素,而是溝通問題,因爲方面給予的回覆效率太低,每次都要等上幾天的時間。
剛開始向對方索要簽名擴展,因爲我們使用的語言是PHP,所以一定要對應我們服務器上的PHP版本才能使用擴展,而經過幾番協調之後,對方終於給了回覆,但是對方給的so文件無法與我們的PHP版本對應,這就導致程序開發依然無法進展下去了。
幾經反覆協調,最後對方在半個月以後給了一套java的簽名跳轉程序讓我們自己研究(汗!我不會java),沒辦法,爲了兌現客戶的承諾,我們只好硬着頭皮上了。
研究了幾個小時的java之後,開始看起了銀行給的程序,基本上都能看懂,但是後來依然無法做跳轉,後來銀行提醒說,提交支付商品的時間要向銀行索要,不是自己寫的,因爲銀行的測試服務器時間和實際的不同的。此問題後來也解決了,但是後面想到PHP如何與JAVA交互呢,因爲PHP要提交數據給JAVA,然後JAVA簽名,最後把數據返回給PHP,PHP在提交POST給工商銀行,這就是總體的思路。因爲多年的經驗,所以一下子想到了webservice,但是很久沒做了,最後花了些時間又熟悉了熟悉。下面分別是PHP和JAVA建立webservice與調用webservice數據的細節。
首先開啓soap擴展extension=php_soap.dll
然後重啓apache,如果是LINUX的話,需要重編譯PHP或用phpize也可以。
然後建立一個test.php的文件,代碼如下:
PHP:
- <?php
- //蘋果巴士www.ipukbus.com [email protected]
- ini_set("soap.wsdl_cache_enabled", "0"); // disabling WSDL cache
- $wsdl="http://localhost:8080/test/myservicePort?wsdl"; //webservice地址
- $soap=new SoapClient($wsdl, array('trace'=>true,'cache_wsdl'=>WSDL_CACHE_NONE, 'soap_version' => SOAP_1_1));
- $method="SayHi";
- $params = array('arg0'=>json_encode(array("hello111","測試")));//傳入數據,並編碼爲json
- try{
- $result=$soap->$method($params);
- }catch(Exception $e) {
- echo "Exception: " . $e->getMessage();
- }
- //$result爲stdClass類型,因此不能使用 echo $result的方式輸出,會報錯的。
- echo $result->return;
- ?>