快递鸟物流查询接口封装成tp5模型
因为项目是基于tp5框架开发的,所以封装一下快递接口,好调用
<?php
namespace app\api\model;
use think\Model;
class ExpressApi extends Model
{
	
	//----------------------------------------------------------
	//快递鸟 http://www.kdniao.com/8
	//免费的即时查询 支持四家 申通、圆通、百世、天天
	//----------------------------------------------------------
	
	//配置
	public function config()
	{
		return [
			'EBusinessID'=>'你的用户ID', //你的用户ID
			'AppKey'=>'你的key', //你的key
			'ReqURL'=>'http://api.kdniao.com/Ebusiness/EbusinessOrderHandle.aspx'
		];
				
	}
	
	
	/**
	 * Json方式 查询订单物流轨迹
	 * $ShipperCode String 快递公司编码
	 * $LogisticCode String 物流单号
	 */
	public function getOrderTracesByJson($ShipperCode,$LogisticCode){
		//读取配置
		$config = $this->config();
		
		//请求参数
		$requestData= "{'OrderCode':'','ShipperCode':'".$ShipperCode."','LogisticCode':'".$LogisticCode."'}";
		
		$datas = array(
			'EBusinessID' => $config['EBusinessID'],
			'RequestType' => '1002',
			'RequestData' => urlencode($requestData) ,
			'DataType' => '2',
		);
		$datas['DataSign'] = $this->encrypt($requestData, $config['AppKey']);
		$result=$this->sendPost($config['ReqURL'], $datas);	
		
		//根据公司业务处理返回的信息......
		
		return $result;
	}
	
	
	/**
	 *  post提交数据 
	 * @param  string $url 请求Url
	 * @param  array $datas 提交的数据 
	 * @return url响应返回的html
	 */
	public function sendPost($url, $datas) {
		$temps = array();	
		foreach ($datas as $key => $value) {
			$temps[] = sprintf('%s=%s', $key, $value);		
		}	
		$post_data = implode('&', $temps);
		$url_info = parse_url($url);
		if(empty($url_info['port']))
		{
			$url_info['port']=80;	
		}
		$httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n";
		$httpheader.= "Host:" . $url_info['host'] . "\r\n";
		$httpheader.= "Content-Type:application/x-www-form-urlencoded\r\n";
		$httpheader.= "Content-Length:" . strlen($post_data) . "\r\n";
		$httpheader.= "Connection:close\r\n\r\n";
		$httpheader.= $post_data;
		$fd = fsockopen($url_info['host'], $url_info['port']);
		fwrite($fd, $httpheader);
		$gets = "";
		$headerFlag = true;
		while (!feof($fd)) {
			if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) {
				break;
			}
		}
		while (!feof($fd)) {
			$gets.= fread($fd, 128);
		}
		fclose($fd);  
		
		return $gets;
	}
	
	/**
	 * 电商Sign签名生成
	 * @param data 内容   
	 * @param appkey Appkey
	 * @return DataSign签名
	 */
	public function encrypt($data, $appkey) {
		return urlencode(base64_encode(md5($data.$appkey)));
	}
	
}