淘宝开放平台API

前两天按照淘宝API提供的demo代码改写成了类

由于公司的店铺比较多,而且淘宝做了授权改造,所有API都需要使用session

所以把一些关键参数存储在了数据库之中便于调用

字段类型属性Null缺省值额外执行操作
ID int(10) 是 NULL auto_increment 改变丢弃键名索引唯一
shop_nick varchar(32) 是 NULL  改变丢弃键名索引唯一
userid int(5) 是 NULL  改变丢弃键名索引唯一
appkey int(10) 是 NULL  改变丢弃键名索引唯一
appsecret varchar(50) 是 NULL  改变丢弃键名索引唯一
Session varchar(64) 是 NULL  改变丢弃键名索引唯一
LastUp int(10) 是 NULL  改变丢弃键名索引唯一

调用代码:

<?php
	$tb = new TBao(1);
	$method='taobao.items.onsale.get';
	$paramArr = array(	 
		/* API应用级输入参数 Start*/
		'fields'	=> 'num_iid,title,price,volume,list_time,num ,modified ,outer_id',
		'page_no' => '1',
		'page_size' => '40'
		/* API应用级输入参数 End*/
	);
	$result_item = $tb->get_info($method,$paramArr);
?>


 

接口类代码:

<?php

class TBao
{
	//一些基础配置项
	var $url = "http://gw.api.taobao.com/router/rest?";
	var $format = "xml";
	var $v = "2.0";
	var $sign_method = "md5";

	//关键参数
	private $AppKey;
	private $AppSecret;
	private $top_Session;
	var $UserID;
	var $ShopNick;
	var $method;

	function __construct($TB_id=0){
		$this->TBao($TB_id);
	}
	/**
	 * 根据店铺ID 构造该店铺的一些关键参数
	 */
	function TBao($TB_id=0){
		global $DB;
		$ss_sql = "select * from TB_session where ID='$TB_id' ";

		$DB->query($ss_sql);
		$DB->next_record();
		$this->AppKey= $DB->f("appkey");
		$this->AppSecret= $DB->f("appsecret");
		$this->top_Session= $DB->f("Session");
		$this->UserID= $DB->f("userid");
		$this->ShopNick= $DB->f("shop_nick");

	}

	/**
	 * 获取淘宝信息
	 */
	function get_info($method,$paramArr=array()){
		$this->method = $method;
		//组合参数  加入一些简单的数据验证
		$unix_time = time();
		if(date("T") == "UTC"){
			$unix_time += 28800;
		}
		$tid = isset($paramArr['tid'])?$paramArr['tid']:0;
		$paramArr['timestamp'] = date("Y-m-d H:i:s",$unix_time);
		$paramArr['format'] = $this->format;
		$paramArr['v'] = $this->v;
		$paramArr['sign_method'] = $this->sign_method;
		$paramArr['method'] = $method;
		$paramArr['app_key'] = $this->AppKey;
		if(!empty($this->top_Session)){
			$paramArr['session'] = $this->top_Session;
		}
		//生成签名
		$sign = $this->createSign($paramArr);

		//组织参数
		$strParam = $this->createStrParam($paramArr);
		$strParam .= 'sign='.$sign;

		//构造Url
		$urls = $this->url.$strParam;

		//连接超时自动重试
		$cnt=0;	
		while($cnt < 3 && ($tb_result=@$this->vita_get_url_content($urls))===FALSE) $cnt++;

		//解析数据
		if($this->format == "xml"){
			$result = $this->getXmlData($tb_result);
		}else{
			$result = json_decode($tb_result,true);
		}
		$result = $this->analyse_result($result,$tid);
		return $result;
	}

	/**
	 * 处理返回结果 如果有错误 怎么记录 及 处理
	 */
	 function analyse_result($data,$tid=0){
		//var_dump($data);
		if(isset($data['error_response'])){
			$error = $data['error_response'];
		}elseif(isset($data['code'])){
			$error = $data;
		}else{
			return $data;
		}
		//怎么处理这个错误结果  输出 记录 与反馈
		$error_msg = $error['msg'];
		$error_msg .= isset($error['sub_msg'])?$error['sub_msg']:"";
		$error_code = $error['code'];
		$error_code .= isset($error['sub_code'])?$error['sub_code']:"";
		$error = "错误码:".$error_code.";错误信息:".$error_msg;
		$this->tb_log(2,$tid,$error,0);
		$this->_halt($error."<br>");
	 }
	
	//处理接口调用日志
	function tb_log(){
	}
	//获取session授权信息
	function get_sessionkey(){
	}

	//获取数据兼容file_get_contents与curl
	function vita_get_url_content($url) {
		if(function_exists('file_get_contents')) {
			$file_contents = file_get_contents($url);
		} else {
			$ch = curl_init();
			$timeout = 5; 
			curl_setopt ($ch, CURLOPT_URL, $url);
			curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
			curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
			$file_contents = curl_exec($ch);
			curl_close($ch);
		}
		return $file_contents;
	}
	
	//签名函数 
	function createSign ($paramArr) { 
	    $sign = $this->AppSecret; 
	    ksort($paramArr); 
	    foreach ($paramArr as $key => $val) { 
	       if ($key !='' && $val !='') { 
	           $sign .= $key.$val; 
	       } 
	    } 
	    $sign = strtoupper(md5($sign.$this->AppSecret));
	    return $sign; 
	}

	//组参函数 
	function createStrParam ($paramArr) { 
	    $strParam = ''; 
	    foreach ($paramArr as $key => $val) { 
	       if ($key != '' && $val !='') { 
	           $strParam .= $key.'='.urlencode($val).'&'; 
	       } 
	    } 
	    return $strParam; 
	} 

	//解析xml函数
	function getXmlData ($strXml) {
		$pos = strpos($strXml, 'xml');
		if ($pos) {
			$xmlCode=simplexml_load_string($strXml,'SimpleXMLElement');
			$arrayCode=$this->get_object_vars_final($xmlCode);
			return $arrayCode ;
		} else {
			return '';
		}
	}
	
	function get_object_vars_final($obj){
		if(is_object($obj)){
			$obj=get_object_vars($obj);
		}
		if(is_array($obj)){
			foreach ($obj as $key=>$value){
				$obj[$key]=$this->get_object_vars_final($value);
			}
		}
		return $obj;
	}
	//停止程序输出错误信息
	function _halt($msg=''){
		exit($msg);
	}
}

?>


淘宝session获取的程序

<?PHP
header("Content-type: text/html; charset=utf-8");
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT" ); 
header("Last-Modified: " . gmdate( "D, d M Y H:i:s" ) . "GMT" ); 
header("Cache-Control: no-cache, must-revalidate" ); 
header("Pragma: no-cache" );

$top_appkey = $_GET['top_appkey'];
$top_parameters = $_GET['top_parameters'];
$top_session = $_GET['top_session'];
$top_sign = $_GET['top_sign'];

if(empty($top_appkey)){
  $uid = $_GET['uid'];
 $uid_to_appkey = array('1'=>'123456');//123456为淘宝分配的AppKey
 die(header("Location:http://container.api.taobao.com/container?appkey=".$uid_to_appkey[$uid]."&encode=utf-8"));
}

$appkey_to_appsecret = array( '123456'=>'xxxxx');//xxxxx为淘宝分配的AppSecret

$app_secret = $appkey_to_appsecret[$top_appkey];

$unix_time = time();
if(date("T") == "UTC"){
 $unix_time += 28800;
}
//验证sign 是否一致 规则:base64(md5(top_appkey+top_parameters+top_session+app_secret))
$check_sign = base64_encode(md5($top_appkey.$top_parameters.$top_session.$app_secret,true));

if($top_sign != $check_sign){
 exit("非法访问");
}

//解析top_parameters 获取上下文参数
$parameters = hashmap(base64_decode($top_parameters));
echo "<pre>";
print_r($parameters);
//验证时间是否在5分钟之内(前后一共10分钟)
$check_time = round($parameters['ts']/1000);
if($check_time < $unix_time-300 || $check_time > $unix_time+300){
 //exit("时间不合法");
}

//将top_session存储至文件中便于使用 改为存入数据库!!!!
$sql = "update TB_session set Session ='$top_session' , LastUp = unix_timestamp() where appkey='$top_appkey'";
//echo $sql;
$DB->query($sql);
echo "失效时长:".$parameters['expires_in']."<br>";
echo $top_session."完毕";

 

 

//转化parameter的方法
function hashmap($data){
 $result = array();
 $t1 = explode("&",$data);
 if(!empty($t1) && isset($t1[0])){
  foreach($t1 as $item){
   $t2 = explode("=",$item);
   if(!empty($t2) && isset($t2[0])){
    $result[$t2[0]] = isset($t2[1])?$t2[1]:"";
   }
  }
 }
 return $result;
}

?>


 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值