magento 根据快递号 跟踪查询物流快递信息,纯php或者插件形式
一:index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>快递单号获取接口API - More</title> <script language="javascript" src="jquery-1.4.4.min.js"></script> <script language="javascript"> $(document).ready(function() { $("#btnSnap").click(function() { $("#retData").html('loading...'); var expressid = $("#expressid").val(); var expressno = $("#expressno").val(); $.get("get.php",{com:expressid,nu:expressno}, function(data) { $("#retData").html(data); } ); return false; }); }); </script> <style> #retForm{width:640px;line-height:22px;padding-bottom:10px;border-bottom:1px dotted #ccc;} #retData{ background:#efefef; padding:10px; line-height:18px; width: 96%; border: 0; } .txtPartner{width:960px;margin:20px 10px;padding:10px 0 0 0;border-top:1px solid #dfdfdf;} .txtPartner h1{font-size:14px;color:#FF5632;} .txtPartner a{float:left;margin:0 10px 10px 0;} .logo { font-size: 18px; font-weight: bold; text-align: center; padding: 10px; font-family: "微软雅黑"; } .txtURL { font-size: 12px; padding: 10px; } </style> </head> <body> <div class="result"> <div class="seatchForm"> <div class="txtURL"> <p>快递公司: <input name="expressid" type="text" id="expressid" value="tnt"/> 快递单号:<input name="expressno" type="text" id="expressno" value="382351534"/> </p> <p>说明:查询时需要发送两个参数:公司名(拼音或英文);快递单号</p> </div> <div class="txtButton"><input type="submit" value="查询" id="btnSnap" class="btnSnap"/></div> </div> </div> </body> </html>
二:
<?php $typeCom = $_GET["com"];//快递公司 $typeNu = $_GET["nu"]; //快递单号 //echo $typeCom.'<br/>' ; //echo $typeNu ; $AppKey='XXXXXX';//请将XXXXXX替换成您申请到的KEY $url ='http://api.kuaidi100.com/api?id='.$AppKey.'&com='.$typeCom.'&nu='.$typeNu.'&show=2&muti=1&order=asc'; //请勿删除变量$powered 的信息,否者本站将不再为你提供快递接口服务。 $powered = '查询数据由:<a href="http://kuaidi100.com" target="_blank">KuaiDi100.Com (快递100)</a> 网站提供 '; //优先使用curl模式发送数据 if (function_exists('curl_init') == 1){ $curl = curl_init(); curl_setopt ($curl, CURLOPT_URL, $url); curl_setopt ($curl, CURLOPT_HEADER,0); curl_setopt ($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($curl, CURLOPT_USERAGENT,$_SERVER['HTTP_USER_AGENT']); curl_setopt ($curl, CURLOPT_TIMEOUT,5); $get_content = curl_exec($curl); curl_close ($curl); }else{ include("snoopy.php"); $snoopy = new snoopy(); $snoopy->referer = 'http://www.google.com/';//伪装来源 $snoopy->fetch($url); $get_content = $snoopy->results; } print_r($get_content . '<br/>' . $powered); exit(); ?>
三:snoopy.php下载
代码如下:
一:配置config.xml
[xml] <?xml version=”1.0″?> <config> <modules> <More_Track> <version>0.2.0.1</version> </More_Track> </modules> <global> <models> <sales> <rewrite> <order_shipment_track>More_Track_Model_Order_Shipment_Track</order_shipment_track> </rewrite> </sales> <track> <class>More_Track_Model</class> <resourceModel>track_resource</resourceModel> </track> <track_resource> <class>More_Track_Model_Resource</class> <deprecatedNode>track_mysql4</deprecatedNode> <entities> <kuaidi> <table>kuaidi</table> </kuaidi> </entities> </track_resource> </models> <blocks> <track> <class>More_Track_Block</class> </track> <adminhtml> <rewrite> <sales_order_shipment_view_tracking>More_Track_Block_Adminhtml_Sales_Order_Shipment_View_Tracking</sales_order_shipment_view_tracking> <sales_order_shipment_create_tracking>More_Track_Block_Adminhtml_Sales_Order_Shipment_Create_Tracking</sales_order_shipment_create_tracking> </rewrite> </adminhtml> </blocks> <helpers> <track> <rewrite> <data>More_Track_Helper_Data</data> </rewrite> </track> </helpers> <resources> <track_setup> <setup> <module>More_Track</module> </setup> </track_setup> </resources> <rewrite> <shipping_tracking_pop> <from><![CDATA[#^/shipping/tracking#]]></from> <to>/track/index</to> </shipping_tracking_pop> </rewrite> </global> <crontab> <jobs> <more_track_kuaidi> <schedule><cron_expr>*/1 * * * *</cron_expr></schedule> <run><model>track/observer::syncTrackActive</model></run> </more_track_kuaidi> </jobs> </crontab> <frontend> <routers> <track> <use>standard</use> <args> <module>More_Track</module> <frontName>track</frontName> </args> </track> </routers> <layout> <updates> <more_track> <file>moretrack.xml</file> </more_track> </updates> </layout> <translate> <modules> <More_Track> <files> <default>More_Track.csv</default> </files> </More_Track> </modules> </translate> </frontend> <default> <shipping> <more_track> <track_multi>0</track_multi> </more_track> </shipping> </default> </config> [/xml]
二:点击sales_order_shipment/view/页面的 tracking/popup 按钮触发track controller
[php] <?php require(‘app/code/core/Mage/Shipping/controllers/TrackingController.php’); class More_Track_IndexController extends Mage_Shipping_TrackingController{ public function callbackAction(){ if(array_key_exists(‘param’, $_REQUEST) || Mage::getStoreConfig(‘shipping/more_track/track_test_data’)){ if(Mage::getStoreConfig(‘shipping/more_track/track_test_data’)){ //测试数据 $param = ‘{“status”:”polling”,”billstatus”:”got”,”message”:””,”lastResult”:{“message”:”ok”,”state”:”0″,”status”:”200″,”condition”:”F00″,”ischeck”:”0″,”com”:”yuantong”,”nu”:”13020111000006″,”data”:[{“context”:”上海分拨中心/装件入车扫描 “,”time”:”2012-08-28 16:33:19″,”ftime”:”2012-08-28 16:33:19″,”status”:”在途”,”areaCode”:”310000000000″,”areaName”:”上海市”,},{“context”:”上海分拨中心/下车扫描 “,”time”:”2012-08-27 23:22:42″,”ftime”:”2012-08-27 23:22:42″,”status”:”在途”,”areaCode”:”310000000000″,”areaName”:”上海市”,}]}}’; }else{ $param = $_REQUEST[‘param’]; } $formatedPushData = Zend_Json_Decoder::decode($param); if($formatedPushData[‘lastResult’][‘nu’]){ $_kuaidiData = Mage::getModel(‘track/kuaidi’) ->getCollection() ->addFieldToFilter(‘carrier_number’, array(‘eq’=>$formatedPushData[‘lastResult’][‘nu’])) ->getFirstItem()->getData(); $_kuaidiData[‘body’] = $param; $_kuaidiData[‘updated_at’] = time(); try{ Mage::getModel(‘track/kuaidi’)->setData($_kuaidiData)->save(); $returnMessage = array( ‘result’ => ‘true’, ‘returnCode’ => ‘200’, ‘message’ => ‘success’, ); }catch(Exception $e){ $returnMessage = array( ‘result’ => ‘false’, ‘returnCode’ => ‘500’, ‘message’ => $e->getMessage(), ); } $this->getResponse()->setBody(Mage::helper(‘core’)->jsonEncode($returnMessage)); } } } /** * Popup action * Shows tracking info if it’s present, otherwise redirects to 404 */ public function popupAction() { /* @var $shippingInfoModel Mage_Shipping_Model_Info */ $shippingInfoModel = Mage::getModel(‘shipping/info’)->loadByHash($this->getRequest()->getParam(‘hash’)); $AppKey = Mage::getStoreConfig(‘shipping/more_track/track_app’); $_order = Mage::getModel(‘sales/order’)->load($shippingInfoModel->getOrderId()); //foreach($_orderList as $_order){ //track $_tracks = Mage::getModel(‘sales/order_shipment_track’) ->getCollection() ->addFieldToFilter(‘order_id’, $_order->getId()); //iterate tarcks and check each of them, if not exists, append a new row of data and send a request to kuaidi100 api. opposite, do nothing. foreach($_tracks as $track){ $_track = $track->getData(); $_kuaidi = Mage::getModel(‘track/kuaidi’) ->getCollection() ->addFieldToFilter(‘carrier_number’, $_track[‘track_number’]); if(count($_kuaidi) === 0){ echo $_track[‘track_number’].’______’; //push a data to kuaidi100. $post_data = array(); $post_data[“schema”] = ‘json’ ; $post_data[“param”] = ‘{“company”:”‘.strtolower($_track[‘title’]).'”, “number”:”‘.$_track[‘track_number’].'”,”from”:””, “to”:”‘.sprintf(“%s%s%s”, Mage::helper(‘track’)->__($_order->getShippingAddress()->getRegion()), Mage::helper(‘track’)->__($_order->getShippingAddress()->getCity()), Mage::helper(‘track’)->__($_order->getShippingAddress()->getDistrict())).'”, “key”:”‘.$AppKey.'”, “parameters”:{“callbackurl”:”‘.Mage::getUrl(‘track/index/callback/’).'”,”resultv2″:”1″}}’; $url=’http://www.kuaidi100.com/poll’; $o=””; foreach ($post_data as $k=>$v) { $o.= “$k=”.urlencode($v).”&”; // } $post_data=substr($o,0,-1); $ch = curl_init(); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1);// curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_URL,$url); curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); $result = curl_exec($ch); // if($result){ $formatedResult = Zend_Json::decode($result); if($result[‘result’]){ $custom[‘trackdetail’] = ”; $kuaidi = Mage::getModel(‘track/kuaidi’);//->save(); $kuaidi->setData(‘carrier_number’, $_track[‘track_number’]); $kuaidi->setCreatedAt(time()); $kuaidi->setUpdatedAt(time()); $kuaidi->save(); } } curl_close($ch); } } //} parent::popupAction(); } } [/php]