ecshop:通过PHP/Java Bridge来实现ecshop的chinapay支付接口

  背景:

  最近弄ecshop网上商城这个系统需要提供对中国银联支付支持从网上查了些资料发现chinapay对php支持并不是十分友好需要扩展编译啥似乎很麻烦网上资料不是很多php实现chinapay接口网上流传 3种解决方案1.参照chianpay官方文档来对php进行扩展编译似乎很麻烦而且可移值性差2.php自带java桥网上说不是很稳定3.lnsys提供解决方案但没有找到源代码

  chinapy提供java版jar包在windows下和linux下应该都没有问题我在网上发现phpjava还可以通过 PHP/Java Bridge来实现这个功能于是采用PHP/Java Bridge来java实现chinapay支付接口

  步 骤:

  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_参数改为on如果没有找到这个参数自己添加下就行了具体如下:

  Php代码   

; Whether to allow /require to open URLs (like http:// or ftp://) as files. 
 
allow_url_ = on


  写个简单测试phpjava文件test.php

  其代码如下:

  Php代码   

<?php 
  require_once("http://localhost:8080/JavaBridge/java/Java.inc"); 
  $ = java("java.lang."); 
  echo $->getProperties; 
?> 


  将其放在htdocs下面在浏览器中输入http://localhost/test.php 如果出现些环境信息则介绍说明环境配对了.

  4.phpchianpayjar包实现signOrder和veryTransResponse两个

  其signOrder核心代码如下:

  Php代码   

/* 
 
  *php通过JavaBridge远程javachinapay组件获取签名 
 
  */ 
 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 =  java("chinapay.PrivateKey"); 
 
  $buildKeyResult = $objectKey->buildKey($MerId,0,$merkey_file); 
   //生成签名值 
 
  ($buildKeyResulttrue){ 
 
    $chinapayLink =  java("chinapay.SecureLink",$objectKey); 
 $checkValue = $chinapayLink->signOrder($MerId,$OrdId,$TransAmt,$CuryId,$TransDate,$GateId); 
  }{ 
   false; 
  } 
   $checkValue; 
 
 }




  其veryTransResponse核心代码如下:

  Php代码   

/* 
 
 *php通过JavaBridge远程javachinapay组件验证签名 
 
 */ 
 
function veryTransResponse($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 =  java("chinapay.PrivateKey"); 
 
 $buildKeyResult = $objectKey->buildKey("999999999999999",0,$pubkey); 
 
 //验证签名 
 
 ($buildKeyResulttrue){ 
 
 $chinapayLink =  java("chinapay.SecureLink",$objectKey); 
 $veryTransResponseResult = $chinapayLink->veryTransResponse($merId, $ordId,$transAmt,$curyId,$transDate,$transType,  $orderStatus, $chkValue); 
    $veryTransResponseResult; 
 }{ 
        false; 
    } 
}


  5.phpjava版ecshop chinapay插件源代码



Tags:  ecshop漏洞 ecshopshopex poweredbyecshop ecshop

延伸阅读

最新评论

发表评论