Magento 外挂通用支付模块

7天成为Magento系统架构师,现在开始学习Magento全栈开发!

《Magento2.X企业级开发实战》

黑五刚过,又遇到几个国外朋叫我帮着维护跟新一些Magento和其他商铺站点.看到盆友们的站 不得不说技术发展的真快啊 虽然拿了几百美元的小费 但是这几天真的是忙成狗, 博客都没法更新咯 要不是 Miyue兄弟发博客我都忘还有博客了于是赶过来 跟新下

这只是一些通用的方法 你可以吧这个方法 放到任何一个站去 当然 取决于你的接口
从这个模块 可以获得
1.订单所有的信息
2.订单所有的支付信息
2.支付模块的信息

首先应该读下这个支付模块 Magento 支付模块常用函数

getCollection();
$orders->addAttributeToFilter('increment_id',$incrementID); //其中 $incrementID为订单号
$orders->addAttributeToSelect('*');
$orders->load();
$alldata = $orders->getData();
$sales_order = Mage::getModel('sales/order')->load($alldata[0]['entity_id']);
$billingAddress=$sales_order->getBillingAddress();
$Email=$sales_order->getData('customer_email'); //客户的邮件

//与通用接口做适配  比如 zencart opencart 等可以通用的组件 接口适配2
$orderNo=$_REQUEST['orderNo']; 
$orderInfo=$sales_order;
$Amount=sprintf('%.2f', $orderInfo->getGrandTotal());



//直接调用支付模块

   class WeicotPayBox{
	   
   function  getInfo($orderInfo,$cardNo,$cvv,$cardExpireYear,$cardExpireMonth) {
	$standard = Mage::getModel('pocketccns/payment');
	//注意大小写
    $paymentUrl = $standard->getCreditFristPayUrl();
    $paymentData = $standard->setOrder($orderInfo)->getWeicotPayInfo($cardNo,$cvv,$cardExpireYear,$cardExpireMonth);
	//组合定订单信息
    $response = $this->getSystemReturnInfo($paymentUrl, $paymentData);//获得返回信息
    $result = json_decode($response);//对信息进行解码
	$returnData=$this->dataproAction($result);//进行 数组转换
	return  $returnData;
	//$this->orderProcessAction($returnData);//对订单进行判断处理
    //echo $paymentUrl;
   //var_dump($paymentData);
   //var_dump($result);
   }

   //发送订单信息模块
  function getSystemReturnInfo($paymentUrl,$paymentData) {
		//Mage::log($paymentData, null, 'newpay.log');
		if(function_exists('curl_init') && function_exists('curl_exec')) {
			$info = $this->vpost($paymentUrl,$paymentData);
		} else {
			$info = $this->hpost($paymentUrl,$paymentData);
		}
		//Mage::log($info, null, 'newpay.log');
		return $info;
	}
	
	/*
	 * 通用模块 Curl 
	 * Store additional order information
	 * @param String $url
	 * @param String $data
     * @return Array $returnInfo
     */
	function vpost($url, $data) {
        $curl_cookie="";
	    foreach ($_COOKIE as $key => $value) {
	       $curl_cookie.=$key."=".$value.";"; 
	    }
		$curl = curl_init(); 
		curl_setopt($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
		curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
		curl_setopt($curl, CURLOPT_REFERER, $_SERVER['HTTP_HOST']);
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_PORT, 443);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
		curl_setopt($curl, CURLOPT_TIMEOUT, 300);
		curl_setopt($curl, CURLOPT_HEADER, 0);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($curl, CURLOPT_COOKIE,$curl_cookie);
		$tmpInfo = curl_exec($curl);
		curl_close($curl);
		return $tmpInfo;
    }
	//非cul传值
	function hpost($url, $data){
		$website = $_SERVER['HTTP_HOST'];
		$cookie="";
		foreach ($_COOKIE as $key => $value) {	           
		   $cookie.=$key."=".$value.";"; 	                          	
		}
        $options  = array(
			'http' => array(
			'method' => "POST",
			'header' => "Accept-language: enrn" . "Cookie: $cookiern" . "referer:$website rn",
			'content-type' => "multipart/form-data",
			'content' => $data,
			'timeout' => 15 * 60 
            )
        );
        //创建并返回一个流的资源
        $context  = stream_context_create($options);
        $result   = file_get_contents($url, false, $context);
        return $result;
    }
	public function dataproAction($result)
	{
		//返回数据处理
		$returnData = array(
			'transType' 	=> $result->transType,
			'orderNo'		=> $result->orderNo,
			'merNo'			=> $result->merNo,
			'terNo'			=> $result->terNo,
			'currencyCode'	=> $result->currencyCode,
			'amount'		=> $result->amount,
			'tradeNo' 		=> $result->tradeNo,
			'respCode'		=> $result->respCode,
			'respMsg'		=> $result->respMsg
		);
		return $returnData;
	}
   }
//函数开开始  
$PayModule=new WeicotPayBox;
$returnData=$PayModule->getInfo($orderInfo,$cardNo,$cvv,$cardExpireYear,$cardExpireMonth);

// 支付 模块 结束

//重新支付模块
function RePay($OrderID,$Amount,$Email,$Payment){
	//非必须
	$Amount=de($Amount*100);
	//双重验证加密
    $Url="/index.php/Weicot/index/view/?order[number]=$OrderID&order[email]=$Email";
	$Id=base64_encode('&pay='.$Payment.'&pr='.$Amount);
	$Uid='**********';
        //参数在次混淆 这个 个我就不发勒 一切为了安全
	$Track='CLICK HERE';
	return $Track;
	}
$RePayUrl=RePay($incrementID,$Amount,$Email,'0');
//价格 不是必须参数 用来做混淆的

//状态处理模块 还是历史接口 适配 3 
   if($returnData['respCode'] == '00') {
				//成功 代码	
				$payin="成功";
	            $Bankinfo="Payment success";
				$Succeend='1';
			}else {
				
				$Bankinfo=$returnData['respMsg'];
				$BankNo='1';
				//失败代码
				//$info='Payment Failed!:'.$returnData['respMsg'];
				//适配 历史接口
				//$Bankinfo=$info.'--Please try after 15 minutes or more by '.$RePayUrl.', or Contact us thanks
';
	            $payin="失败";
				$Succeend='0';
		}
	
	
	

//历史接口  适配 4
//历史接口  
//订单状态更改模块
//成功邮件发送模块
//在次发送带付款链接邮件模块
require_once "state.php";

/////////////////////////////////////////////////////
$BillNO=$_REQUEST['orderNo']; 
$TradeNO=$BillNO;//订单追踪号
$ReSucceend=$returnData['respCode'];
$pay='WeicotPayBox';

//日志 历史接口适配5
//写入日志 文件
//短日志
file_put_contents("paylogtest.txt",$BillNO."|".$pay."|".date("Y-m-d H:i:s")."|".$payin."rn",FILE_APPEND);
//长日志
file_put_contents("Dipaylogtest.txt",date("Y-m-d H:i:s")."|".$BillNO."|".$Amount."|".$pay."|".$TradeNO."|".$ReSucceend."|".$returnData['respMsg']."|".$ApsLog."->".$GetApsLog."rn",FILE_APPEND);	
//返回页面
include('newpay.php'); 
//orderProcessAction($returnData);
//构造重行支付链接 模块

效果图

这是老版本的函数

$shipstatedata=empty($shipstate)? "Am":$shipstate;
$billstatedata=empty($billstate)? "Am":$billstate;
$Adrress=$shipstate.$shipcity.$shipcountry.$shipcompany.$shipstreet;
$md5src = $merNo.$orderNo.$Freight.$amount.$Fee.$_REQUEST['currency'].$returnURL.$_REQUEST['email'].$merKey;	
$MD5info = strtoupper(md5($md5src));
$lineitems= array(
				'sku' => $sku,
				'name' => $name,
				'description' => $description,
				'cost' => $cost,
				'taxable' => $taxable,
				'qty' => $qty
			);
			$c=1;
		if(!is_array($lineitems)) $lineitems=array();
		foreach($lineitems as $lineitem)
		{
			 $GoodListInfo=$GoodListInfo."".$lineitem['name'].""."1".""."".sprintf('%.2f',$lineitem['cost'])."";
			$c++;	
		}
	  $baseStr='';
      $baseStr =$baseStr."".$merNo."";
	  $baseStr =$baseStr."".$_REQUEST['']."";   
      $baseStr =$baseStr."".$orderNo."";
	  $baseStr =$baseStr.$GoodListInfo;
	  $baseStr =$baseStr."".$amount."";
	  $baseStr =$baseStr."".$Fee."";
      $baseStr =$baseStr."".$Freight."";
      $baseStr =$baseStr."".$_REQUEST['currency']."";
      $baseStr =$baseStr."".$_REQUEST['billFirstName'].""; 
      $baseStr =$baseStr."".$_REQUEST['billLastName']."";
      $baseStr =$baseStr."".$_REQUEST['phone']."";
      $baseStr =$baseStr."".$_REQUEST['email']."";
      $baseStr =$baseStr."".$_REQUEST['billAddress']."";
      $baseStr =$baseStr."".$_REQUEST['billCity'].""; 
      $baseStr =$baseStr."".$billstate."";
      $baseStr =$baseStr."".$_REQUEST['billCountry'].""; 
      $baseStr =$baseStr."".$_REQUEST['billZip']."";
      $baseStr =$baseStr."".$_REQUEST['shipFirstName']."";  
      $baseStr =$baseStr."".$_REQUEST['shipLastName'].""; 
	  $baseStr =$baseStr."".$Adrress.""; 
	  $baseStr =$baseStr."".$_REQUEST['shipCity'].""; 
	  $baseStr =$baseStr."".$shipstatedata.""; 
      $baseStr =$baseStr."".$_REQUEST['shipCountry']."";
      $baseStr =$baseStr."".$_REQUEST['shipZip'].""; 
      $baseStr =$baseStr."".'2' .""; 
      $baseStr =$baseStr."".'en'.""; 
      $baseStr =$baseStr."".'15'.""; 
	  $baseStr =$baseStr."".$returnURL.""; 
	  $baseStr =$baseStr."".'SDF'.""; 
      $baseStr =$baseStr."".$MD5info.""; 
	  $baseStr =$baseStr.""."HSUB"."";
      $baseStr =$baseStr."".$_REQUEST['cardNo']."";
	  $baseStr =$baseStr."".$_REQUEST['cvv']."";
	  $baseStr =$baseStr."".$_REQUEST['expirationYear']."";
	  $baseStr =$baseStr."".$_REQUEST['expirationMonth']."";
	  $baseStr =$baseStr."".$acceptLanguage."";
	  $baseStr =$baseStr."".$userAgent."";
	  $baseStr =$baseStr."".$_REQUEST['payIp']."";
$TradeInfo=base64_encode(urlencode($baseStr));
$url="https://ssl.weicot.com/payment/DirPaymentProcess";
$Postresult=CurlPost($url,'TradeInfo='.$TradeInfo);
$Decrydata=base64_decode($Postresult);
$splitdata=array();
$edata=explode('&',$Decrydata);
foreach($edata as $key=>$value){
	$splitdata[$key]= explode('=',$value);
}
$TradeNO= $splitdata[0][1];
$BillNO=  $splitdata[1][1]; 
$Currency=$splitdata[8][1];
$Amount=  $splitdata[9][1];
$Succeend=$splitdata[2][1];
$MD5info= $splitdata[4][1];
$Bankinfo= $splitdata[3][1];

$RePayUrl=PayBlue($orderNo,$amount,$_REQUEST['email'],'0');
function error($ostr){
$ostr=preg_replace("#[^0-9]#",'',$ostr);
$error=array(
1=>"failed to pay",
2=>"in processing",
2007=>"failed to pay",
3000=>"failed to pay"
);
(!empty($error[$ostr]))?$eput=$error[$ostr]:$eput=$error[2];
return $eput;
}

if ($Succeend==1){
	$payin="成功";
	$Bankinfo="Payment success";
}else{
	$Bankinfo='Failed to pay--Please try after 15 minutes or more by '.$RePayUrl.', or Contact us thanks
';
	$payin="失败";
}
require_once "state.php";
require_once "getstate.php"; 
$pay='xxxxxxxxx';
file_put_contents("nexpay.txt",$BillNO."|".$pay."|".date("Y-m-d H:i:s")."|".$payin."rn",FILE_APPEND);
file_put_contents("nexpaylong.txt",date("Y-m-d H:i:s")."|".$BillNO."|".$Amount."|".$pay."|".$TradeNO."|".$Succeend."|".$splitdata[3][1]."|".$ApsLog."->".$GetApsLog."rn",FILE_APPEND);


function CurlPost($url, $data) { 
		
		    $curl_cookie="";
	        foreach ($_COOKIE as $key => $value) {
	           
	           $curl_cookie.=$key."=".$value.";"; 
	                          	
	        }
	           
		$curl = curl_init(); 
		curl_setopt($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
		curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
		//curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
		curl_setopt($curl, CURLOPT_REFERER, $_SERVER['HTTP_HOST']);
		curl_setopt($curl, CURLOPT_POST, 1);
		curl_setopt($curl, CURLOPT_PORT, 443);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $data); 
		curl_setopt($curl, CURLOPT_TIMEOUT, 300);
		curl_setopt($curl, CURLOPT_HEADER, 0);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($curl, CURLOPT_COOKIE,$curl_cookie);
		$tmpInfo = curl_exec($curl);
		
		curl_close($curl);
		return $tmpInfo;
	} 
	include('result.php'); 

转载请注明:(●–●) Hello.My Weicot » Magento 外挂通用支付模块

文章来源于互联网:Magento 外挂通用支付模块

如无特殊说明或标注,任何个人或组织,复制、转载、采集本站内容请注明:
本文来源于:【Magento中文网】,并添加本文地址链接。
如未按上述操作复制或转载,本站有权追究法律责任。
若本站内容侵犯了原著者的合法权益,可联系我们进行处理。