黑五刚过,又遇到几个国外朋叫我帮着维护跟新一些Magento和其他商铺站点.看到盆友们的站 不得不说技术发展的真快啊 虽然拿了几百美元的小费 但是这几天真的是忙成狗, 博客都没法更新咯 要不是 Miyue兄弟发博客我都忘还有博客了于是赶过来 跟新下
这只是一些通用的方法 你可以吧这个方法 放到任何一个站去 当然 取决于你的接口
从这个模块 可以获得
1.订单所有的信息
2.订单所有的支付信息
2.支付模块的信息
首先应该读下这个支付模块 Magento 支付模块常用函数
<?php /* *WWW.WEICOT.COM *pay post module *version 0.2.0 2015-5-10 *NO . 003 his *BlueWeicot Pay *********************** *WeicotPayment new version *version 2.0 *2015-12-04 *1050653098@qq.com *历史接口是 指多个模块共用的接口 *或 必须适配的旧的接口 */ //必要信息获得模块 接口适配 1 $incrementID=$_REQUEST['orderNo']; $cardNo=$_REQUEST['cardNo']; $cvv =$_REQUEST['cvv']; $cardExpireYear =$_REQUEST['expirationYear']; $cardExpireMonth =$_REQUEST['expirationMonth']; //自带函数加载模块 require_once("../app/Mage.php");//先引用 $app = Mage::app('default'); //$incrementID='C00014307'; $orders = Mage::getModel('sales/order')->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: en\r\n" . "Cookie: $cookie\r\n" . "referer:$website \r\n", '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='<a target="_blank" href=\''.$Url.$Uid.'\'>CLICK HERE</a>'; 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 <a href="/contacts" target="_blank">Contact us</a> thanks<br />'; $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."\r\n",FILE_APPEND); //长日志 file_put_contents("Dipaylogtest.txt",date("Y-m-d H:i:s")."|".$BillNO."|".$Amount."|".$pay."|".$TradeNO."|".$ReSucceend."|".$returnData['respMsg']."|".$ApsLog."->".$GetApsLog."\r\n",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."<Goods><GoodsName>".$lineitem['name']."</GoodsName><Qty>"."1"."</Qty>"."<Price>".sprintf('%.2f',$lineitem['cost'])."</Price></Goods>"; $c++; } $baseStr='<?xml version="1.0" encoding="UTF-8" ?><Order>'; $baseStr =$baseStr."<MerNo>".$merNo."</MerNo>"; $baseStr =$baseStr."<ShopName>".$_REQUEST['']."</ShopName>"; $baseStr =$baseStr."<BillNo>".$orderNo."</BillNo><GoodsList>"; $baseStr =$baseStr.$GoodListInfo; $baseStr =$baseStr."</GoodsList><Amount>".$amount."</Amount>"; $baseStr =$baseStr."<Fee>".$Fee."</Fee>"; $baseStr =$baseStr."<Freight>".$Freight."</Freight>"; $baseStr =$baseStr."<CurrencyCode>".$_REQUEST['currency']."</CurrencyCode>"; $baseStr =$baseStr."<BFirstName>".$_REQUEST['billFirstName']."</BFirstName>"; $baseStr =$baseStr."<BLastName>".$_REQUEST['billLastName']."</BLastName>"; $baseStr =$baseStr."<Phone>".$_REQUEST['phone']."</Phone>"; $baseStr =$baseStr."<Email>".$_REQUEST['email']."</Email>"; $baseStr =$baseStr."<BillAddress>".$_REQUEST['billAddress']."</BillAddress>"; $baseStr =$baseStr."<BillCity>".$_REQUEST['billCity']."</BillCity>"; $baseStr =$baseStr."<BillState>".$billstate."</BillState>"; $baseStr =$baseStr."<BillCountry>".$_REQUEST['billCountry']."</BillCountry>"; $baseStr =$baseStr."<BillZip>".$_REQUEST['billZip']."</BillZip>"; $baseStr =$baseStr."<SFirstName>".$_REQUEST['shipFirstName']."</SFirstName>"; $baseStr =$baseStr."<SLastName>".$_REQUEST['shipLastName']."</SLastName>"; $baseStr =$baseStr."<ShipAddress>".$Adrress."</ShipAddress>"; $baseStr =$baseStr."<ShipCity>".$_REQUEST['shipCity']."</ShipCity>"; $baseStr =$baseStr."<ShipState>".$shipstatedata."</ShipState>"; $baseStr =$baseStr."<ShipCountry>".$_REQUEST['shipCountry']."</ShipCountry>"; $baseStr =$baseStr."<ShipZip>".$_REQUEST['shipZip']."</ShipZip>"; $baseStr =$baseStr."<Language>".'2' ."</Language>"; $baseStr =$baseStr."<LangCode>".'en'."</LangCode>"; $baseStr =$baseStr."<Currency>".'15'."</Currency>"; $baseStr =$baseStr."<ReturnURL>".$returnURL."</ReturnURL>"; $baseStr =$baseStr."<Remark>".'SDF'."</Remark>"; $baseStr =$baseStr."<MD5info>".$MD5info."</MD5info>"; $baseStr =$baseStr."<IssuingBank>"."HSUB"."</IssuingBank>"; $baseStr =$baseStr."<CardNo>".$_REQUEST['cardNo']."</CardNo>"; $baseStr =$baseStr."<CVV>".$_REQUEST['cvv']."</CVV>"; $baseStr =$baseStr."<ExpireYear>".$_REQUEST['expirationYear']."</ExpireYear>"; $baseStr =$baseStr."<ExpireMonth>".$_REQUEST['expirationMonth']."</ExpireMonth>"; $baseStr =$baseStr."<AcceptLanguage>".$acceptLanguage."</AcceptLanguage>"; $baseStr =$baseStr."<UserAgent>".$userAgent."</UserAgent>"; $baseStr =$baseStr."<Ipaddress>".$_REQUEST['payIp']."</Ipaddress></Order>"; $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 <a href="/contacts" target="_blank">Contact us</a> thanks<br />'; $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."\r\n",FILE_APPEND); file_put_contents("nexpaylong.txt",date("Y-m-d H:i:s")."|".$BillNO."|".$Amount."|".$pay."|".$TradeNO."|".$Succeend."|".$splitdata[3][1]."|".$ApsLog."->".$GetApsLog."\r\n",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');