java chinapay_通过PHP/Java Bridge来实现ecshop的chinapay支付接口
背景:
最近弄ecshop網上商城這個系統,需要提供對中國銀聯支付支持,從網上查了一些資料,發現chinapay對php支持并不是十分友好。需要擴展編譯啥的,似乎很麻煩。網上資料不是很多,php實現chinapay接口,網上流傳三種解決方案,1.參照chianpay官方文檔,來對php進行擴展編譯,似乎很麻煩而且可移值性差。2.php的自帶java橋,網上說不是很穩定3.linys提供的解決方案,但沒有找到源代碼。
chinapy提供的java版jar包,在windows下和linux下應該都沒有問題。我在網上發現php調用java,還可以通過PHP/Java Bridge來實現這個功能。于是采用PHP/Java Bridge來調用java實現chinapay支付接口。
材料說明:
1.PHP/Java Bridge安裝文件
從其官方網站下載http://php-java-bridge.sourceforge.net/pjb/download.php
我下載的是Binary版本的。具體的為JavaBridgeTemplate554experimental.war.zip
2. chinapay提供的java版NetPayClinet2.5 for java包
3. Jdk6,tomcat6安裝文件
下載地址分別為:http://download.java.net/jdk6/和http://archive.apache.org/dist/tomcat/tomcat-6/
步 驟:
1.安裝jdk和部署tomcat
這一步不多述,如果不是熟悉可以問問您身邊的java朋友或上網google,資料很多。
2.安裝PHP/Java Bridge
將下載安裝文件JavaBridgeTemplate554experimental.war.zip解壓,并將文件夾重命名為JavaBridge,方便記憶。
再將NetPayClinet2.5 for java包中的netpayclient.jar包搞到JavaBridge/WEB-INF/lib文件下。
然后將JavaBridge這個文件夾整個拷到tomcat根目錄下webapps文件下。
然后進入tomcat根目錄下bin文件夾,啟動tomcat。
在瀏覽器中輸入http://localhost:8080/JavaBridge 顯示頁面。注 我用的時候在windows下有些異常,但不影響php調用應該沒有什么問題,在linux下則是正常。
3.配置php.ini
找到php.ini這個文件,將里面的allow_url_include參數改為on,如果沒有找到這個參數,自己添加一下就行了。具體如下:
; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
allow_url_include = on
1
2
3
;Whethertoallowinclude/requiretoopenURLs(likehttp:// or ftp://) as files.
allow_url_include=on
寫一個簡單測試php調用java文件test.php
其代碼如下:
<?php
require_once("http://localhost:8080/JavaBridge/java/Java.inc");
$System = java("java.lang.System");
echo $System->getProperties();
?>
1
2
3
4
5
<?php
require_once("http://localhost:8080/JavaBridge/java/Java.inc");
$System=java("java.lang.System");
echo$System->getProperties();
?>
將其放在htdocs下面,在瀏覽器中輸入http://localhost/test.php 如果出現一些環境信息,則說明環境配對了.
4.php調用chianpay的jar包實現signOrder和verifyTransResponse兩個函數。
其signOrder函數核心代碼如下:
/*
*php通過JavaBridge遠程調用java的chinapay組件獲取簽名。
*/
function signOrder($MerId,$OrdId,$TransAmt,$CuryId,$TransDate,$GateId,$merkey_file,$java_inc_file){
//加載javainc文件,初始化java環境
require_once(“http://localhost:8080/JavaBridge/java/Java.inc”);
//導入私鑰文件
$objectKey = new java("chinapay.PrivateKey");
$buildKeyResult = $objectKey->buildKey($MerId,0,$merkey_file);
//生成簽名值
if($buildKeyResult==true){
$chinapayLink = new java("chinapay.SecureLink",$objectKey);
$checkValue = $chinapayLink->signOrder($MerId,$OrdId,$TransAmt,$CuryId,$TransDate,$GateId);
}else{
return false;
}
return $checkValue;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
/*
*php通過JavaBridge遠程調用java的chinapay組件獲取簽名。
*/
functionsignOrder($MerId,$OrdId,$TransAmt,$CuryId,$TransDate,$GateId,$merkey_file,$java_inc_file){
//加載javainc文件,初始化java環境
require_once(“http://localhost:8080/JavaBridge/java/Java.inc”);
//導入私鑰文件
$objectKey=newjava("chinapay.PrivateKey");
$buildKeyResult=$objectKey->buildKey($MerId,0,$merkey_file);
//生成簽名值
if($buildKeyResult==true){
$chinapayLink=newjava("chinapay.SecureLink",$objectKey);
$checkValue=$chinapayLink->signOrder($MerId,$OrdId,$TransAmt,$CuryId,$TransDate,$GateId);
}else{
returnfalse;
}
return$checkValue;
}
其verifyTransResponse函數核心代碼如下:
/*
*php通過JavaBridge遠程調用java的chinapay組件驗證簽名。
*/
function verifyTransResponse($merId, $ordId,$transAmt,$curyId,$transDate,$transType, $orderStatus, $chkValue){
$payment = get_payment(basename(__FILE__, '.php'));
//加載javainc文件,初始化java環境
require_once(“http://localhost:8080/JavaBridge/java/Java.inc”);
$pubkey = $payment['chinapay_pubkey_file'];
//導入公鑰文件 重新計算密鑰的值
$objectKey = new java("chinapay.PrivateKey");
$buildKeyResult = $objectKey->buildKey("999999999999999",0,$pubkey);
//驗證簽名
if($buildKeyResult==true){
$chinapayLink = new java("chinapay.SecureLink",$objectKey);
$verifyTransResponseResult = $chinapayLink->verifyTransResponse($merId, $ordId,$transAmt,$curyId,$transDate,$transType, $orderStatus, $chkValue);
return $verifyTransResponseResult;
}else{
return false;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
/*
*php通過JavaBridge遠程調用java的chinapay組件驗證簽名。
*/
functionverifyTransResponse($merId,$ordId,$transAmt,$curyId,$transDate,$transType,$orderStatus,$chkValue){
$payment=get_payment(basename(__FILE__,'.php'));
//加載javainc文件,初始化java環境
require_once(“http://localhost:8080/JavaBridge/java/Java.inc”);
$pubkey=$payment['chinapay_pubkey_file'];
//導入公鑰文件 重新計算密鑰的值
$objectKey=newjava("chinapay.PrivateKey");
$buildKeyResult=$objectKey->buildKey("999999999999999",0,$pubkey);
//驗證簽名
if($buildKeyResult==true){
$chinapayLink=newjava("chinapay.SecureLink",$objectKey);
$verifyTransResponseResult=$chinapayLink->verifyTransResponse($merId,$ordId,$transAmt,$curyId,$transDate,$transType,$orderStatus,$chkValue);
return$verifyTransResponseResult;
}else{
returnfalse;
}
}
5.php的調用java版ecshop chinapay插件源代碼
chinapay主要參數配置及完整實現代碼?? 見附件
總結
以上是生活随笔為你收集整理的java chinapay_通过PHP/Java Bridge来实现ecshop的chinapay支付接口的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 牙周炎会引起蛋白尿吗
- 下一篇: 腰冷是什么原因引起的