166 lines
6.2 KiB
PHP
166 lines
6.2 KiB
PHP
|
|
<?php
|
||
|
|
function noquote($v){
|
||
|
|
$j = json_encode($v, JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES);
|
||
|
|
return (is_string($v) && $j[0]==='"' && substr($j,-1)==='"') ? substr($j,1,-1) : $j;
|
||
|
|
}
|
||
|
|
function sign_md5($p, $secret){
|
||
|
|
ksort($p, SORT_STRING);
|
||
|
|
$s = $secret;
|
||
|
|
foreach($p as $k=>$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;
|
||
|
|
}
|