heyuntao
2023-07-03 741672790a5dc06e2e078b29451458f779985c59
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
<?php
namespace app\api\logic\taoke\device;
 
use app\api\logic\taoke\Parser;
 
 
 
class Taobaolianmeng extends Parser
{
    protected $app_key,$config,$appSecret,$PID;
    protected $v = '';
    protected $sign_method = 'md5';
 
    protected $baseUrl = 'http://gw.api.taobao.com/router/rest';
 
    const request_url = [
        'material_url' => "taobao.tbk.dg.optimus.material", 
        'publisher_url'=>'taobao.tbk.sc.publisher.info.save'
    ];
 
    const shop_type = ["0"=>"淘宝","1"=>"天猫","3"=>"特价版"];
    
 
 
    public function __construct()
    {
        parent::__construct();
 
        $this->config = config('site.taobaolianmeng');
 
        $this->app_key = $this->config['app_key'];
 
        $this->appSecret = $this->config['appSecret'];
 
        $this->v = $this->config['v'];
 
        $this->PID = $this->config['PID'];
 
        $this->sign_method = $this->config['sign_method'];
 
        if(empty($this->app_key)) return fault('配置信息错误');
    }
 
 
    /**
     * 签名参数
     * @param $data
     * @return string
     */
    public function makeSign($params)
    {
       ksort($params);
       $sign_str = "";
       foreach($params as $key => $value){
         $sign_str.=$key.$value;
       }
       return strtoupper(md5($this->appSecret.$sign_str.$this->appSecret));
    }
 
    
    /**
     * 统一生成参数
     *
     * @param [type] $params
     * @return void
     */
    private function setParams($params = [])
    {
        $timer = date('Y-m-d H:m:s',time());
      
        //默认必传参数
        $data = [
            'app_key' => $this->app_key,
            'v' => $this->v,
            'timestamp' => $timer,
            'format' => 'json',
            'sign_method' => $this->sign_method,
        ];
 
        //加密的参数
        if ($params) {
            $data = array_merge($params, $data);
        }
        foreach($data as $key => $item){
            if(empty($item))unset($data[$key]);
        }
        $data['sign'] = $this->makeSign($data);
 
        return $data;
        
    }
 
    /**
     * 淘宝客-推广者-物料精选
     *
     * @param [type] $page
     * @param [type] $page_size
     * @param $material_id 6078猜你喜欢 4040备孕 4041-0至6个月 4042-7至12个月 4043-1至3岁 4044-4至6岁 4045-7至12岁
     * @return void
     */
    public function material($material_id,$deviceValue="",$deviceType="",$page,$page_size)
    {
        $adzone_id = explode('_',$this->PID);
        $params = $this->setParams(['device_value'=>$deviceValue,'device_type'=>$deviceType,'method'=>self::request_url['material_url'],'material_id'=>$material_id,'page_no'=>$page,'page_size'=>$page_size,'adzone_id'=>isset($adzone_id[3]) ? $adzone_id[3] : '']);
        $result = send_get($this->baseUrl,$params);
        if(empty($result) || !isset($result['tbk_dg_optimus_material_response']['result_list'])) fault('数据获取失败');
        $list = $result['tbk_dg_optimus_material_response']['result_list']['map_data'];
        if(!empty($list)){
            foreach($list as &$goods){
                $goods = self::initGoods($goods);
            }
        }
         return $list;
    }
 
 
    /**
     * 淘宝客-公用-私域用户备案 https://open.taobao.com/api.htm?docId=37988&docType=2
     *
     * @param [type] $session 用户登录授权成功后,TOP颁发给应用的授权信息
     * @return void
     */
    public function publisher($session)
    {
        $params = $this->setParams(['method'=>self::request_url['publisher_url'],'session'=>$session,'inviter_code'=>$this->config['inviter_code'],'info_type'=>1]);
        $result = send_get($this->baseUrl,$params);
        if(isset($result['error_response']['sub_msg']))fault($result['error_response']['sub_msg']);
        if(empty($result) || !isset($result['tbk_sc_publisher_info_save_response']['data'])) fault('数据获取失败');
        $info = isset($result['tbk_sc_publisher_info_save_response']['data']) ? $result['tbk_sc_publisher_info_save_response']['data'] : [];
        return $info;
    }
 
   
 
    /**
     * 格式化商品信息
     *
     * @param [type] $goods
     * @return void
     */
    private static function initGoods($goods)
    {
        if(empty($goods)) return [];
        $init_goods = self::goodsField();
        $init_goods['id'] = isset($goods['item_id']) ? $goods['item_id'] : '';
        $init_goods['goodsId'] = isset($goods['item_id']) ? $goods['item_id'] : '';   //商品id
        $init_goods['itemLink'] = isset($goods['click_url']) ? $goods['click_url'] : '';        //商品链接
        $init_goods['title'] = isset($goods['title']) ? $goods['title'] : '';               //商品标题
        $init_goods["dtitle"] = isset($goods['short_title']) ? $goods['short_title'] : '';               //短标题 
        if(empty($init_goods['dtitle'])) $init_goods['dtitle'] = $init_goods['title'];
        $init_goods["actualPrice"] = isset($goods['zk_final_price']) ? bcsub($goods['zk_final_price'],$goods['coupon_amount'],2) : '';        //券后价
        $init_goods["originalPrice"] = isset($goods['reserve_price']) ? $goods['reserve_price'] : '';        //商品原价
        $init_goods["sellerId"] = isset($goods['seller_id']) ? $goods['seller_id'] : '';           //店铺Id
        $init_goods["shopName"] = isset($goods['shop_title']) ? $goods['shop_title'] : '';           //店铺名称
        $init_goods["couponPrice"] = isset($goods['coupon_amount']) ? $goods['coupon_amount'] : '';       //优惠券金额
        $init_goods["monthSales"] = isset($goods['volume']) ? format_number($goods['volume']) : 0;        //30天销量
        $init_goods["mainPic"] = isset($goods['pict_url']) ? $goods['pict_url'] : '';      //商品主图
        $init_goods["video"] = isset($goods['video']) ? $goods['video'] : '';              //商品视频
        $init_goods['couponLink'] = isset($goods['coupon_share_url']) ? $goods['coupon_share_url'] : '';          //优惠券链接
        $init_goods['couponEndTime'] = isset($goods['coupon_end_time']) && !empty($goods['coupon_end_time']) ? $goods['coupon_end_time'] : '';      //优惠券结束时间
        $init_goods['couponStartTime'] = isset($goods['coupon_start_time']) && !empty($goods['coupon_start_time']) ? $goods['coupon_start_time'] : '';      //优惠券开始时间 
        $init_goods['shopType'] = isset(self::shop_type[$goods['user_type']]) ? self::shop_type[$goods['user_type']] : "未知";            //店铺类型
        $init_goods['sourceType'] = "tb";
        if(isset($goods['user_type']) && $goods['user_type'] == 1)$init_goods['sourceType'] = "tm";
        if(isset($goods['shopType']) && $goods['user_type'] == 1)$init_goods['sourceType'] = "tm";
        $init_goods['desc'] = isset($goods['item_description']) ? $goods['item_description'] : '';  //推广文案
        !empty($goods['small_images']) && $init_goods['imgs'] = $goods['small_images']['string'];
        $init_goods['labelImg'] = self::initSourse($init_goods['sourceType']);
        $init_goods['isCollect'] = self::isCollect($init_goods);
        if(empty($init_goods['detailPics']))$init_goods['detailPics'] = $init_goods['mainPic'];
        $init_goods['fanli'] = self::rebate($init_goods['actualPrice'],$goods['commission_rate']/100);
        $init_goods['topFanli'] = self::rebate($init_goods['actualPrice'],$goods['commission_rate']/100,self::$topFanliRate);
        return $init_goods;
    }
    
    
}