www.gusucode.com > ShopEx481 & PHPWind 整合版码程序 > plugins/payment/pay.paypal_cn.php

    <?php
require('paymentPlugin.php');
class pay_paypal_cn extends paymentPlugin{

	var $name = 'PayPal 贝宝- 人民币支付';//PayPal 贝宝- 人民币支付
	var $logo = 'PAYPAL_CN';
	var $version = 20070902;
	var $charset = 'GB2312';
	var $applyUrl = '';
	var $submitUrl = 'https://www.paypal.com/cn/cgi-bin/webscr'; //  
	var $submitButton = 'http://img.alipay.com/pimg/button_alipaybutton_o_a.gif'; ##需要完善的地方
	var $supportCurrency =  array("CNY"=>"CNY");
	var $supportArea =  array("AREA_CNY");
	var $desc = "PayPal贝宝 是 PayPal 支付平台的人民币业务品牌,客户通过 PayPal 贝宝可简单快捷地进行支付,款项实时到帐,推荐使用。<br><a href='http://www.paypal.com/cn/' target='_blank'><img src='images/apply-imm.gif' border='0' align=right></a> ";
	var $intro = "PayPal贝宝 是 PayPal 支付平台的人民币业务品牌,客户通过 PayPal 贝宝可简单快捷地进行支付,款项实时到帐,推荐使用。<br><a href='http://www.paypal.com/cn/' target='_blank'><img src='images/apply-imm.gif' border='0' align=right></a> ";	
	var $orderby = 9;
	function toSubmit($payment){
		$merId = $this->getConf($payment["M_OrderId"], 'member_id');
		$ikey = $this->getConf($payment["M_OrderId"], 'PrivateKey');
		$return['cmd'] = "_xclick";
		$return['business'] = $merId;
		$return['item_name'] = $payment["M_OrderNO"];
		$return['item_number'] = $payment["M_OrderId"];
		$return['amount'] = $payment["M_Amount"];
		$return['currency_code'] = $payment["M_Currency"];
		$return['bn'] = "shopex";
		$return['return'] = $this->callbackUrl;
		return $return;
	}

	function callback($in,&$paymentId,&$money,&$message){
        /*
		$req = 'cmd=_notify-synch';
		$tx_token = $in['tx'];
		$req .= "&tx=$tx_token&at=$auth_token";
		$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
		$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
		$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
		$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);
		if (!$fp){
			$succ = "N";
			$errcode = "1";
		}else{
			fputs ($fp, $header . $req);
			// read the body data 
			$res = '';
			$headerdone = false;
			while (!feof($fp)){
				$line = fgets ($fp, 1024);
				if (strcmp($line, "\r\n") == 0){
					// read the header
					$headerdone = true;
				}elseif($headerdone){
					// header has been read. now read the contents
					$res .= $line;
				}
			}
			// parse the data
			$lines = explode("\n", $res);
			$keyarray = array();
			if (strcmp ($lines[0], "SUCCESS") == 0){
				for ($i=1; $i<count($lines);$i++){
					list($key,$val) = explode("=", $lines[$i]);
					$keyarray[urldecode($key)] = urldecode($val);
				}
				$firstname = $keyarray['first_name'];
				$lastname = $keyarray['last_name'];
				$itemname = $keyarray['item_name'];
				$amount = $keyarray['mc_gross'];
				
				$payid = $keyarray['item_number'];
				$mydate = substr($itemname,0,8);
				$currency = $keyarray['mc_currency'];

				$paymentId = $keyarray['item_number'];
				$money = $keyarray['mc_gross'];

				$payment_status = $keyarray['payment_status'];
				//取得PAYPAL私钥,该私钥在PAYPAL后台开启了Payment Data Transfer后,会以identity token方式显示在该页上
				$auth_token = trim($this->getConf($payid, 'PrivateKey'));
				if(strlen($auth_token)==0){
					$message = "Invalid Auth_token";
					return PAY_FAILED;
				}
				if($payment_status == "Completed"){
					$succ = "Y";
				}else{
					$succ = "N";
					$errcode = "2";
				}
			}elseif(strcmp ($lines[0], "FAIL") == 0){
				$succ = "N";
				$errcode = "3".$res;
				// log for manual investigation
			}
		}
		fclose ($fp);
		//验证
		switch ($succ){
			//成功支付
			case "Y":
				return PAY_SUCCESS;
			break;
			//支付失败
			case "N":
				$message = '支付失败,请立即与商店管理员联系'."(".$errcode.")";
				return PAY_FAILED;
				break;
		} */
        $req = 'cmd=_notify-validate';
        foreach ($in as $key => $value) {
            $value = urlencode(stripslashes($value));
            $req .= "&$key=$value";
        }
        $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
        $header .= "Content-Type:application/x-www-form-urlencoded\r\n";
        $header .= "Content-Length:" . strlen($req) ."\r\n\r\n";
        $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
        $item_name = $in['item_name'];
        $item_number = $in['item_number'];
        $payment_status = $in['payment_status'];
        $payment_amount = $in['mc_gross'];
        $payment_currency = $in['mc_currency'];
        $txn_id = $in['txn_id'];
        $receiver_email = $in['receiver_email'];
        $payer_email = $in['payer_email'];
        $paymentId = $item_number;
        $money = $in['mc_gross'];
        if (!$fp) {
            $succ = "N";
            $errcode = "1";
        }
        else{
            fputs ($fp, $header . $req."\r\n\r\n");
			while (!feof($fp)){
				$res = fgets ($fp, 1024);
				$retstr .= ",".$res;
				if (strcmp (trim($res), "VERIFIED") == 0){
					if(trim($payment_status)=="Completed"){
						$succ="Y";
					}else{
						$succ = "N";
						$errcode = "2";
					}
				}elseif(strcmp ($res, "INVALID") == 0){
					$succ = "N";
					$errcode = "3";
				}
			}
        } 
        fclose ($fp);
        switch ($succ){
			//成功支付
			case "Y":
				return PAY_SUCCESS;
				break;
			//支付失败
			case "N":
				return PAY_ERROR;
				break;
		}
	}

	function getfields(){
		return array(
				'member_id'=>array(
						'label'=>'客户号',
						'type'=>'string'
					),
				'PrivateKey'=>array(
						'label'=>'私钥',
						'type'=>'string'
				)
			);
	}
}
?>