PHP获取淘宝联盟数据的完整指南:从授权到数据抓取
淘宝联盟数据的价值与获取前提
淘宝联盟(现更名为“淘宝联盟开放平台”)是阿里巴巴集团旗下的电商推广平台,开发者通过其API接口可以获取商品信息、推广链接、佣金数据等关键数据,用于搭建比价网站、导购平台、营销工具等应用。
要使用PHP获取淘宝联盟数据,需完成两个核心步骤:获取授权(Access Token);通过API接口调用数据,本文将结合官方文档与实际开发场景,详细讲解PHP实现流程。
准备工作:注册淘宝联盟开放平台账号
- 注册开发者账号
访问淘宝联盟开放平台,使用淘宝账号登录,完成开发者身份认证(个人或企业)。 - 创建应用
在“开发者中心”->“应用管理”中创建新应用,选择应用类型(如“网站应用”“移动应用”),获取App Key
和App Secret
——这两个参数是API调用的身份凭证,需妥善保管。 - 配置回调域名
在应用详情中设置“授权回调地址”(如https://yourdomain.com/callback.php
),该域名需与实际访问的域名完全一致(含协议、端口)。
核心步骤一:获取Access Token
淘宝联盟API采用OAuth 2.0授权模式,需通过“授权码”换取Access Token
,以下是PHP实现流程:
构建授权URL
用户需访问授权URL,同意授权后,淘宝联盟会重定向到回调地址并携带授权码(code
)。
<?php $appKey = '你的App Key'; $appSecret = '你的App Secret'; $redirectUri = urlencode('https://yourdomain.com/callback.php'); // 回调地址需与配置一致 $state = md5(uniqid(rand(), true)); // 防CSRF攻击的随机字符串 $authUrl = "https://oauth.taobao.com/authorize?response_type=code&client_id={$appKey}&redirect_uri={$redirectUri}&state={$state}"; header("Location: {$authUrl}"); // 跳转授权页面 ?>
通过授权码换取Access Token
用户授权后,淘宝联盟会回调redirectUri
,并附带code
和state
参数,在回调脚本中,用code
向淘宝联盟请求Access Token
。
<?php session_start(); if (!isset($_GET['code']) || $_GET['state'] !== $_SESSION['oauth_state']) { die('授权失败或state参数不匹配'); } $appKey = '你的App Key'; $appSecret = '你的App Secret'; $redirectUri = 'https://yourdomain.com/callback.php'; $code = $_GET['code']; // 请求Access Token $tokenUrl = 'https://oauth.taobao.com/token'; $params = [ 'grant_type' => 'authorization_code', 'client_id' => $appKey, 'client_secret' => $appSecret, 'redirect_uri' => $redirectUri, 'code' => $code, ]; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $tokenUrl); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params)); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $tokenData = json_decode($response, true); if (isset($tokenData['access_token'])) { $accessToken = $tokenData['access_token']; $refreshToken = $tokenData['refresh_token']; // 刷新令牌,用于过期后重新获取 $expiresIn = $tokenData['expires_in']; // Token有效期(秒) // 保存Token(建议存入数据库或Session) $_SESSION['taobao_access_token'] = $accessToken; echo "获取Token成功!"; } else { die("获取Token失败:" . $tokenData['error_description']); } ?>
核心步骤二:调用淘宝联盟API获取数据
获取Access Token
后,即可通过API接口获取商品、推广链接等数据,以下是常用接口的PHP示例:
获取商品列表(taobao.union.item.promotion.get)
该接口用于查询可推广的商品信息,支持关键词、类目、价格区间等筛选。
<?php $accessToken = $_SESSION['taobao_access_token']; // API请求参数(根据官方文档调整) $params = [ 'keyword' => '手机', // 搜索关键词 'page_size' => 20, // 每页数量 'page_no' => 1, // 页码 'fields' => 'title,price,pic_url,commission,shop_id', // 返回字段 ]; // 生成请求签名(需按官方规则拼接) $sign = generateSign($params, $appSecret); // 签名方法见下文 // 构造完整请求URL $apiUrl = 'https://eco.taobao.com/router/rest?method=taobao.union.item.promotion.get&app_key=' . $appKey . '&sign=' . $sign . '&' http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); if ($data['error_response']) { die("API调用失败:" . $data['error_response']['msg']); } // 输出商品数据 foreach ($data['taobao_union_item_promotion_get_response']['items']['item'] as $item) { echo "商品名称:" . $item['title'] . "<br>"; echo "价格:" . $item['price'] . "<br>"; echo "佣金:" . $item['commission'] . "<br>"; echo "商品链接:" . generatePromotionUrl($item['item_id'], $accessToken) . "<br><br>"; } // 生成推广链接(示例) function generatePromotionUrl($itemId, $accessToken) { $url = 'https://uland.taobao.com/coupon/eduction?itemId=' . $itemId . '&source=union'; return $url; } // 签名生成方法(需按官方文档规范) function generateSign($params, $appSecret) { ksort($params); // 按参数名ASCII码排序 $stringToSign = ''; foreach ($params as $key => $value) { if ($key != 'sign' && $value !== '') { $stringToSign .= $key . $value; } } $stringToSign .= $appSecret; // 添加App Secret return strtoupper(md5($stringToSign)); // MD5转大写 } ?>
获取佣金数据(taobao.union.trade.query)
该接口用于查询推广产生的订单佣金数据,需开通“数据银行”权限。
<?php $accessToken = $_SESSION['taobao_access_token']; $params = [ 'start_time' => date('Y-m-d H:i:s', strtotime('-7 days')), // 开始时间 'end_time' => date('Y-m-d H:i:s'), // 结束时间 'page_size' => 50, 'fields' => 'trade_id,pay_time,commission,trade_title', // 返回字段 ]; $sign = generateSign($params, $appSecret); $apiUrl = 'https://eco.taobao.com/router/rest?method=taobao.union.trade.query&app_key=' . $appKey . '&sign=' . $sign . '&' . http_build_query($params); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $apiUrl); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); if ($data['error_response']) { die("API调用失败:" . $data['error_response']['msg']); } // 输出佣金数据 foreach ($data['taobao_union_trade_query_response']['trades']['trade'] as $trade) { echo "订单号:" . $trade['trade_id'] . "<br>"; echo "支付时间:" . $trade['pay_time'] . "<br>"; echo "佣金:" . $trade['commission'] . "<br>"; echo "商品标题:" . $trade['trade_title'] . "<br><br>"; } ?>
注意事项与最佳实践
- API调用频率限制
淘宝联盟API对调用频率有限制(如商品查询接口默认5次/秒),需通过sleep()
或队列控制请求频率,避免触发限流。 - Access Token刷新
Access Token
有效期通常为3小时,过期后需使用refresh_token
重新获取,避免用户重复授权:$refreshToken = $tokenData['refresh
还没有评论,来说两句吧...