$v){ if($v!=='' && $v!==null) $s .= $k . noquote($v); } $s .= $secret; return strtoupper(md5($s)); } function getTemuOrders($from, $to, $country, $pageSize = 50){ $APP_KEY = '02cbeff8afd35247294810033b036cfe'; $APP_SECRET = '8ecfa21b55cddf66c66043cbb80756efc4ba6596'; $ACCESS_TOKEN_DE = 'eploouslfhwjwwzvz5okvmu29stwwdw9l3ullz8pv6y4raips8gouzwcqmv'; $ACCESS_TOKEN_PL = 'eplyaf6ogcpewjtzytw8q9ahvx7haqntzk8wsz7vokjusvpry93gy9cvn2c'; $ACCESS_TOKEN_FR = 'eplhrdwtdgjpfelzmyelnsifakqjzfza6rpa8neb7nqc8djxj11hlenl3u2'; $BASE_URL = 'https://openapi-b-eu.temu.com/openapi/router'; $REGION_ID = 162; // --- parse daty --- if (!is_int($from)) $from = strtotime($from); if (!is_int($to)) $to = strtotime($to); if (!$from || !$to) return []; if ($from > $to) { $tmp = $from; $from = $to; $to = $tmp; } $page = 1; $out = []; $seenAnyInRange = false; $guardPages = 500; while ($guardPages-- > 0) { $biz = array( "type" => "bg.order.list.v2.get", //"regionId" => $REGION_ID, "pageNumber" => $page, "pageSize" => $pageSize ); switch ($country) { case 'pl': $ACCESS_TOKEN = $ACCESS_TOKEN_PL; break; case 'fr': $ACCESS_TOKEN = $ACCESS_TOKEN_FR; break; default: $ACCESS_TOKEN = $ACCESS_TOKEN_DE; break; } $common = array( 'app_key' => $APP_KEY, 'access_token' => $ACCESS_TOKEN, 'data_type' => 'JSON', 'timestamp' => (int)floor(microtime(true)), ); $req = $biz + $common; $req['sign'] = sign_md5($req, $APP_SECRET); $payload = json_encode($req, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); $ch = curl_init(); curl_setopt_array($ch, array( CURLOPT_URL => $BASE_URL, CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => array('Content-Type: application/json'), CURLOPT_POSTFIELDS => $payload, CURLOPT_TIMEOUT => 30, )); $resp = curl_exec($ch); $http = curl_getinfo($ch, CURLINFO_HTTP_CODE); $cerr = curl_error($ch); curl_close($ch); if ($resp === false || $http !== 200) { break; } $data = json_decode($resp, true); if ($data['success'] == false) { var_dump('Błąd ładowania zamówień TEMU '.$country.': '.$data['errorMsg']); break; } if (!is_array($data) || !isset($data['result']['pageItems']) || !is_array($data['result']['pageItems']) || count($data['result']['pageItems']) === 0) { break; } $items = $data['result']['pageItems']; usort($items, function($a, $b){ $ta = isset($a['parentOrderMap']['parentOrderTime']) ? (int)$a['parentOrderMap']['parentOrderTime'] : 0; $tb = isset($b['parentOrderMap']['parentOrderTime']) ? (int)$b['parentOrderMap']['parentOrderTime'] : 0; if ($ta == $tb) return 0; return ($ta > $tb) ? -1 : 1; }); $maxTs = isset($items[0]['parentOrderMap']['parentOrderTime']) ? (int)$items[0]['parentOrderMap']['parentOrderTime'] : 0; $last = $items[count($items)-1]; $minTs = isset($last['parentOrderMap']['parentOrderTime']) ? (int)$last['parentOrderMap']['parentOrderTime'] : 0; foreach ($items as $row) { if (!isset($row['parentOrderMap']['parentOrderSn'])) continue; $ts = isset($row['parentOrderMap']['parentOrderTime']) ? (int)$row['parentOrderMap']['parentOrderTime'] : 0; if ($ts < $from || $ts > $to) continue; $pst = isset($row['parentOrderMap']['parentOrderStatus']) ? (int)$row['parentOrderMap']['parentOrderStatus'] : -1; if (!($pst === 4 || $pst === 5)) continue; $seenAnyInRange = true; $orderSn = $row['parentOrderMap']['parentOrderSn']; // check if order exitst $db = $GLOBALS['db']; $exists = $db->fetchByAssoc($db->query("SELECT id FROM ecmsales WHERE pdf_text LIKE '%$orderSn%'")); if (isset($exists['id'])) continue; $products = array(); if (isset($row['orderList']) && is_array($row['orderList'])) { foreach ($row['orderList'] as $ol) { if (!isset($ol['productList']) || !is_array($ol['productList'])) continue; foreach ($ol['productList'] as $p) { // hacks :) if ($p['extCode'] == 'FR00259_52_15g_amz_de-1') { $p['extCode'] = 'FR00259_52_15g_amz_de'; } if ($p['extCode'] == 'FR00138_1000_amz_de-1') { $p['extCode'] = 'FR00138_1000_amz_de'; } $products[] = array( 'extCode' => isset($p['extCode']) ? $p['extCode'] : null, 'soldFactor' => isset($p['soldFactor']) ? $p['soldFactor'] : null, ); } } } $out[] = array( 'orderNumber' => $orderSn, 'issueTime' => $ts, 'issueDate' => $ts ? date('Y-m-d H:i:s', $ts) : null, 'products' => $products, 'raw' => $row, ); } if ($minTs >= $from) { $page++; continue; } if ($maxTs < $from) { break; } if (!$seenAnyInRange) { $page++; continue; } break; } usort($out, function($a, $b){ if ($a['issueTime'] == $b['issueTime']) return 0; return ($a['issueTime'] > $b['issueTime']) ? -1 : 1; }); return $out; }