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;
	}
}
?>