www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > plugins/payment/pay.chinapay.php
<?php require('paymentPlugin.php'); class pay_chinapay extends paymentPlugin{ var $name = '上海银联电子支付ChinaPay';//CHINAPAY网上支付 var $logo = 'CHINAPAY'; var $version = 20070902; var $charset = 'gb2312'; var $submitUrl = 'http://payment.chinapay.com:8081/pay/TransGet'; // var $submitButton = 'http://img.alipay.com/pimg/button_alipaybutton_o_a.gif'; ##需要完善的地方 var $supportCurrency = array("CNY"=>"156"); var $supportArea = array('AREA_CNY'); var $M_Language = '1'; var $orderby = 17; function toSubmit($payment){ $merId = $this->getConf($payment["M_OrderId"], 'member_id'); $ikey = $this->getConf($payment["M_OrderId"], 'PrivateKey'); $type = "0001"; //$order->M_OrderId = "0000".substr($merId, -5)."0".$order->M_OrderId; $payment["M_OrderId"] = "0000".substr($merId, -5)."0".$payment["M_OrderId"]; $payment["M_Amount"] = $this->intString($payment["M_Amount"] * 100, 12); $tmp_date = date("Ymd",$payment["M_Time"]); if(PHP_OS == "WINNT"){ $secre = new COM("ChinaPay.NetPayClient"); //$ChkValue = $secre->sign($merId,$order->M_OrderId,$order->M_Amount,$order->M_Currency,$tmp_date,$type); $ChkValue = $secre->sign($merId,$payment["M_OrderId"],$payment["M_Amount"],$payment["M_Currency"],$tmp_date,$type); }else{ if(class_exists("Java")){ $private_key = new Java("chinapay.PrivateKey"); $flag=$private_key->buildKey($merId,0,$this->getConf($payment["M_OrderId"], 'MerPrk')); if ($flag==false){ echo("build key error!"); exit; } $t_chinapay =new Java("chinapay.SecureLink",$private_key); //$ChkValue = $t_chinapay->signOrder($merId,$order->M_OrderId,$order->M_Amount,$order->M_Currency,$tmp_date,$type); $ChkValue = $t_chinapay->signOrder($merId,$payment["M_OrderId"],$payment["M_Amount"],$payment["M_Currency"],$tmp_date,$type); }else{ echo "该网关所在的系统环境出错! You also can activate it by config PHP with JAVA support"; exit ; } } $return['MerId']=$merId; $return['OrdId']=$payment["M_OrderId"];//$order->M_OrderId; $return['TransAmt']=$payment["M_Amount"];//$order->M_Amount; $return['CuryId']=$payment["M_Currency"];//$order->M_Currency; $return['TransDate']=$tmp_date; $return['TransType']=$type; $return['Version']="20010606"; $return['RecvUrl']=$this->callbackUrl; $return['ChkValue']=$ChkValue; return $return; } function callback($in,&$paymentId,&$money,&$message){ $merid = $in["merid"]; $meryid = $this->getConf(substr($in['orderno'],-6),'member_id'); $ikey = $this->getConf(substr($in['orderno'],-6),'PrivateKey'); $orderno = $in["orderno"]; $amount = $in["amount"]; $currencycode = $in["currencycode"]; $transdate = $in["transdate"]; $transtype = $in["transtype"]; $status = $in["status"]; $checkvalue = $in["checkvalue"]; $paymentId = substr($orderno,-6); if(PHP_OS == "WINNT"){ $secre = new COM("ChinaPay.NetPayClient"); $result = $secre->check($merid,$orderno,$amount,$currencycode,$transdate,$transtype,$checkvalue); }else{ if(class_exists("Java")){ $private_key = new Java("chinapay.PrivateKey"); $flag=$private_key->buildKey($this->merid,0,$this->getConf($orderno, 'MerPrk')); if ($flag==false) { $message = "build key error!"; return PAY_ERROR; } $t_chinapay =new Java("chinapay.SecureLink",$private_key); $result = $t_chinapay->verifyTransResponse($merid,$orderno,$amount,$currencycode,$transdate,$transtype,$checkvalue); if($result){ $result=0; }else{ $result=1; } }else{ $message = "该网关所在的系统环境出错! You also can activate it by config PHP with JAVA support"; return PAY_ERROR; } } switch ($result){ //验证签名 case 0: return PAY_SUCCESS; break; //支付失败 case "1": $message = '交易失败'; return PAY_FAILED; break; } } function getfields(){ return array( 'member_id'=>array( 'label'=>'客户号', 'type'=>'string' ), 'PrivateKey'=>array( 'label'=>'私钥', 'type'=>'string' ), 'MerPrk'=>array( 'label'=>'私钥文件', 'type'=>'file' ) ); } function intString($intvalue,$len){ $intstr=strval($intvalue); for ($i=1;$i<=$len-strlen($intstr);$i++){ $tmpstr .= "0"; } return $tmpstr.$intstr; } } ?>