PHP通过CURL方式调用淘宝客API

PHP通过CURL方式调用淘宝客API

       由于最近涉及到一个需求,需要调用淘宝客API,由于博主不想使用官方的SDK,想通过CURL方式调用淘宝客的API,这样也不会占用太多空间,同时也方便代码管理,最终参考了一篇文章,重新编写了一段代码片,在这里跟大家分享一下,

/**
 * 淘宝客模拟请求
 * Created by PhpStorm.
 * User: pc001
 * Date: 2020/7/13
 * Time: 16:26
 */

#获取时间
$startDay = date('Y-m-d');                       // 当天
$endDay = date('Y-m-d', strtotime("+7 day"));    // 最多7天
#组合请求数据
$params = array(
    'adzone_id' => '*********',                    //妈妈广告位Id     
    'item_id' => '********',                       //宝贝id
    'name' => '淘礼金红包',                        //淘礼金名称
    'per_face' => '1.0',                           //单个淘礼金面额
    'security_switch' => 'true',                   //安全开关    
    'send_start_time' => $startDay . " 00:00:00",  //发放开始时间
    'send_end_time' => $endDay . " 23:59:59",      //发放截止时间
    'total_num' => '1',                            //淘礼金总个数
    'use_start_time' => $startDay,                 //使用开始日期
    'use_end_time' => $endDay,                     //使用结束日期
    'use_end_time_mode' => '2',                    //结束日期的模式
    'user_total_win_num_limit' => '1',             //单用户累计中奖次数上限
    'method' => 'taobao.tbk.dg.vegas.tlj.create'   //淘宝客API名称
);
#调取接口
$result = tbkExecute($params);
echo json_encode($result);


/**
 * 淘宝客调用触发
 * @param $params
 * @return array
 */
function tbkExecute($params)
{
    #初始化配置
    $app_key = "******";            //应用的AppKey
    $app_secret = "******";         //应用的AppSecret
    $dataList = array();
    #组合基本请求结构
    $commonParams = array(
        'app_key' => $app_key,
        'timestamp' => date('Y-m-d H:i:s'),
        'format' => 'json',
        'sign_method' => 'md5',
        'v' => '2.0',
    );
    #获取sign
    $params = tbkSign(array_merge($commonParams, $params), $app_secret);
    #调取接口判断是否调用成功
    $data = tbkRequestGet($params);
    #失败返回
    if (isset($data['error_response'])) {
        $error = $data['error_response'];
        return array(
            'code' => 404,
            'msg' => $error,
            'data' => array()
        );
    }
    #成功返回
    $key = str_replace('.', '_',str_replace('taobao.', '', $params['method'])) . '_response';
    if (isset($data[$key])) {
        $dataList = $data[$key];
    }
    return array(
        'code' => 200,
        'msg' => "",
        'data' => $dataList
    );
}

/**
 * 淘宝客生成sign专用
 * @param $params
 * @param $app_secret
 * @return array
 */
function tbkSign($params, $app_secret)
{
    unset($params['sign']);
    $params = \array_filter($params, function ($v, $k) {
        return null != $v && '' != $v;
    }, ARRAY_FILTER_USE_BOTH);
    \ksort($params);
    $kvs = array();
    foreach ($params as $k => $v) {
        $kvs[] = $k . $v;
    }
    $params['sign'] = strtoupper(md5($app_secret . implode('', $kvs) . $app_secret));
    return $params;
}


/**
 * 淘宝客专用请求
 * @param array $data
 * @return mixed
 */
function tbkRequestGet($data = array())
{
    $gateway = "http://gw.api.taobao.com/router/rest";
    $url = $gateway . '?' . http_build_query($data);
    $result = null;
    #网络请求接口
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_FAILONERROR, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    //https 请求
    if (strlen($url) > 5 && strtolower(substr($url, 0, 5)) == "https") {
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    }
    $result = curl_exec($ch);
    curl_close($ch);
    return json_decode($result, true);
}

       这个代码片段是调用淘宝客淘礼金创建接口,请求参数可以参考淘宝客API文档请求参数部分,博主这里已经根据成功跟失败做了处理,根据上面的代码,调试是可以成功调用接口并返回成功。