Хочу поделиться опытом автоматизации экспорта заказов из Aliexpress в несколько CRM. Приведенные примеры написаны на PHP, но библиотеки для работы с Aliexpress есть и для других языков. Структура запросов и ответов аналогична. Если перед вами стоит задача интеграции Aliexpress, надеюсь, эта статья будет вам полезна.
Итак, предположим, что у вас уже есть магазин на Aliexpress. И вы выбрали пункт меню «Разработчикам». На момент публикации наблюдались сбои в локализации консоли разработчика, возможно, они будут исправлены в будущем, но если в консоли не отображаются уже созданные приложения или вход в консоль из кабинета продавца не срабатывает, есть пара советов:
Заходите по ссылке https://seller.aliexpress.ru/login?return_url=https%3A%2F%2Fseller.aliexpress.ru Это исправит глюк с редиректом на китайскую версию консоли, в которой создать приложение невозможно
Перед входом, разлогиньтесь из под покупателя. Хотя вход будет произведен отдельно, консоль каким-то образом, может оказаться пустой. Т.е. вы войдете не под тем логином, под которым ожидали. Тот же глюк может быть позже, когда доступ для приложения может быть запрещён с ошибкой «main account not auth subAccount»
В консоли можно скачать SDK для разных языков и создать приложение. В результате у вас в распоряжении окажутся два из трех нужных для работы значения - App Key и App Secret. С третьим значением – access_token все немного сложнее. Тут необходимо небольшое пояснение. В терминах консоли значения называются App Key, App Secret и access_token, а в терминах SDK, по крайней мере PHP-версии, эти же значения называются appkey, secretKey и sessionKey. Ключ сессии, он же access_token можно получить двумя способами:
Применив редирект обратно на свой сервер. Т.е. вы пишите приложение для менеджера, который по мере необходимости импортирует заказы из Aliexpress в CRM. Каждый раз он будет переходить из приложения на сайт Aliexpress, нажимать кнопку предоставления полномочий и возвращаться в приложение. При возврате будет получен параметр code, который с помощью curl вызова на https://oauth.aliexpress.com/token можно будет обменять на access_token
Парсинг страницы после перехода по ссылке https://oauth.aliexpress.com/authorize. Ну или однократный вызов с ручным копированием access_token
Оба метода подробно описаны в документации. Там же упомянуто, что срок жизни access_token – 1 год. Но не тут то было. Приложение созданное в консоли остается в стадии «testing». А для нее срок жизни - 1 сутки. Чтобы опубликовать приложение, нужно отсканировать паспорт через приложение AliPay (российский загранпаспорт подошел). Но и это вам не поможет, т.к. следующий шаг – введение номера кредитной карты и телефона, которые, видимо, должны быть выданы в Китае, т.к. ни то ни другое ввести не удается. Обращение в техподдержу Aliexpress в марте 2020 год осталось без ответа.
Надеюсь в будущем локализация будет доведена до конца и публикация для россиян станет доступна. Таким образом для дальнейшей работы подходит первый способ с нажатием кнопки каждый раз при импорте заказов, но передо мной была поставлена задача - сделать автоматический импорт без участия менеджера.
Я упомяну парсинг с помощью Selenium в конце стать, т.к. проблема с жизнью access_token может перед вами не стоять или решиться исправлением международного механизма публикации приложения.
Думаю, стоит начать с импорта справочника товаров Ailexpress в промежуточную таблицу, чтобы присвоить им идентификаторы из CRM.
include "TopSdk.php";
date_default_timezone_set('Asia/Shanghai');
$c = new TopClient;
$c->appkey = 'xxxxxxxxxxx';
$c->secretKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxx';
$sessionKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
$i = 1;
$req = new AliexpressSolutionProductListGetRequest;
$aeop_a_e_product_list_query = new ItemListQuery;
$aeop_a_e_product_list_query->current_page=$i;
$aeop_a_e_product_list_query->product_status_type="onSelling";
$req->setAeopAEProductListQuery(json_encode($aeop_a_e_product_list_query));
$rez = $c->execute($req, $sessionKey);
var_dump($rez);
Получаем в $rez список товаров. Обратите внимание на счетчик $i. При первом запросе он будет равен 1, затем его нужно увеличивать, пока он не достигнет $rez->result->total_page и получать следующие страницы с товарами. Предлагаю вам ознакомиться с выводом скрипта. Первое что бросается в глаза – машинный перевод названий товаров на английский язык. Это можно исправить на следующем шаге. Или сориентироваться по ссылкам на фотографию. А если товаров не много и перевод однозначный, то английские названия вас тоже могут устроить. Выведем эти названия и id (если ответ на запрос разбивается на несколько страниц, роцедуру нужно повторить для каждой из них)
foreach($rez->result->aeop_a_e_product_display_d_t_o_list->item_display_dto as $item){
echo $item->product_id."\t".$item->subject."\n";
}
Если по каждой позиции предусмотрен выбор вариантов (размер, комплектация и т.д.), то нужно для каждого id вызвать метод, возвращающий эти варианты. Этим же методом можно получить оригинальное название товара на русском языке.
$req = new AliexpressSolutionProductInfoGetRequest;
$req->setProductId($id);
$rez = $c->execute($req, $sessionKey);
var_dump ($rez);
В выводе содержится, много полезной информации, мы возьмём только идентификатоы и строки характеристик.
foreach($rez->result->aeop_ae_product_s_k_us->global_aeop_ae_product_sku as $sku){
echo $sku ->id."\t".$sku ->sku_code."\n";
}
На этом этапе я столкнулся c небольшой проблемой. Надписи в категориях товаров, которые видит покупатель, не возвращаются через API и доступны только через личный кабинет. Я имею ввиду, надписи, которые появляются при наведении на картинку с подвидом товара или надписи, которые сами определяют подвид.
На скриншоте пример с обувью. В карточке товара покупатель видит размер, а в заказ падает часть строки характеристик, по этой части можно понять какой именно Product code выбран. Обычно это штрих код товара. Я предполагаю, что те, кто заводят товар в личном кабинете продавца, ведут учет подкатегорий товара и их соответствие Product code.
Я сделал первую сверку товаров и написал несколько простых страничек для пополнения и редактирования таблицы. Осталось получить список заказов и загрузить их в CRM.
$req = new AliexpressSolutionOrderGetRequest;
$param0 = new OrderQuery;
$param0->create_date_end="2221-12-31 12:12:12";
$param0->create_date_start="2021-03-30 12:12:12";
$param0->order_status_list = array("PLACE_ORDER_SUCCESS","IN_CANCEL","WAIT_SELLER_SEND_GOODS","SELLER_PART_SEND_GOODS","WAIT_BUYER_ACCEPT_GOODS","FUND_PROCESSING","IN_ISSUE","IN_FROZEN","WAIT_SELLER_EXAMINE_MONEY","RISK_CONTROL", "FINISH");
$param0->current_page=$i;
$req->setParam0(json_encode($param0));
$rez = $c->execute($req, $sessionKey);
Ответ, так же как и в случае со справочником товаров, разбивается на страницы. Обратите внимание на order_status_list. Он описан в документации, которую я упоминал. Насколько я понял, список в моем коде является полным, что может пригодиться, если вы захотите экспортировать заказы во всех статусах.
Информацию по каждому новому заказу нужно получать отдельно. Строки идентифицирующие покупателей как «RU shopper» и т.п., довольно бесполезны, поэтому полное имя лучше брать из блока доставки. Примерно половина покупателей пишет свои контакты транслитом и не полностью, однако в нашем распоряжении есть номер телефона. По нему можно найти покупателя в накопленной, до начала работы с Aliexpress, базе и привязать соответствующий заказ.
При следующем получении списка заказов, можно проверить оплату неоплаченных заказов. В таблице загруженных ранее заказов таких записей может быть много, но Aliexpress заказы которые долго были не оплачены, через какое-то время перестает отображать в консоли в статусе «ожидает оплаты». Думаю это связано с фиксацией цены. Менеджер, работающий около года с Aliexpress, сказал, что стоит проверять заказы, которым не более 20 дней.
$req = new AliexpressSolutionOrderInfoGetRequest;
$param1 = new OrderDetailQuery;
$param1->ext_info_bit_flag="11111";
$param1->order_id=$order;
$req->setParam1(json_encode($param1));
$rez = $c->execute($req, $sessionKey);
$n = str_replace("'","''",$rez->result->data->receipt_address->contact_person); // мягкий знак в ФИО
$p = $rez->result->data->receipt_address->phone_country . $rez->result->data->receipt_address->mobile_no;
//$p = normalize_phone($p) // здесь могут быть варианты с лишней восьмёркой и т.д.
$zi = $rez->result->data->receipt_address->zip;
$gor = $rez->result->data->receipt_address->city;
$pro = $rez->result->data->receipt_address->province;
$adr = $rez->result->data->receipt_address->detail_address;
if(isset ($rez->result->data->receipt_address->address2)) $adr .=$rez->result->data->receipt_address->address2;
foreach($rez->result->data->child_order_ext_info_list->global_aeop_tp_order_product_info_dto as $item){
$pid = $item->product_id;
$j=json_decode($item->sku);
$s = "";
if(isset ($j->sku[0])) {
$s = $j->sku[0]->pValueId;
}
$cn =$item->quantity;
$pr =$item->unit_price->amount ;
echo $pid."\t". $s." \t " .$cn ." \t ".$pr."\n";
}
Этот запрос возвращает данные и о скидке, если вы проводите в вашем магазине на Aliexpress промоакцию.
В заключении, хочу привести еще несколько фрагментов кода. По одному для каждой CRM с которыми мне доводилось работать. Я делаю это, чтобы вся информация по интеграции была в одном месте. Детальные разборы добавления заказов ищутся проще, чем информация по Aliexpress, но если кому-то нужно будет быстро сделать интеграцию, можно взять эти наработки.
Я взял их из своих проектов и отвязал от интеграций (в том числе Алиэкспресса). Каждый пример создает контакт, затем лид/сделку, привязывает к ней контакт и добавляет один товар. Я с удовольствием помогу вам c интеграцией за небольшую плату, если вы решите начать продажи на Алиэкспресс. Тем более, что приближается пора отпусков и дополнительные деньги не помешают ни мне, ни вам. Почта для связи tlx {cобака} list.ru. Есть большой опыт по интеграции фулфилментов, телефонии и прочего API c различными CRM и общий навык автоматизации.
amoCRM
$subdomain = "xxxxxxxxx";
function amo_call($access_token, $link, $data) {
$headers = [
'Authorization: Bearer ' . $access_token
];
$curl = curl_init(); //Сохраняем дескриптор сеанса cURL
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-oAuth-client/1.0');
curl_setopt($curl,CURLOPT_URL, $link);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST,'POST');
curl_setopt($curl,CURLOPT_POSTFIELDS,json_encode($data));
curl_setopt($curl,CURLOPT_HTTPHEADER, $headers);
curl_setopt($curl,CURLOPT_HEADER, false);
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, 2);
$out = curl_exec($curl); //Инициируем запрос к API и сохраняем ответ в переменную
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
$code = (int)$code;
$errors = [
400 => 'Bad request',
401 => 'Unauthorized',
403 => 'Forbidden',
404 => 'Not found',
500 => 'Internal server error',
502 => 'Bad gateway',
503 => 'Service unavailable',
];
try
{
if ($code < 200 || $code > 204) {
return -1;
}
}
catch(\Exception $e)
{
return -1;
}
$response = json_decode($out, true);
return $response;
}
/*
//Это упрощенный способ получения $access_token. Подробнее о получении, вермени жизни и обновлении, см. документацию
$link = 'https://' . $subdomain . '.amocrm.ru/oauth2/access_token'; //Формируем URL для запроса
$data = [
'client_id' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'client_secret' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'grant_type' => 'authorization_code',
'code' => 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
'redirect_uri' => 'http://xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,
];
$curl = curl_init(); //Сохраняем дескриптор сеанса cURL
curl_setopt($curl,CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl,CURLOPT_USERAGENT,'amoCRM-oAuth-client/1.0');
curl_setopt($curl,CURLOPT_URL, $link);
curl_setopt($curl,CURLOPT_HTTPHEADER,['Content-Type:application/json']);
curl_setopt($curl,CURLOPT_HEADER, false);
curl_setopt($curl,CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($curl,CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($curl,CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($curl,CURLOPT_SSL_VERIFYHOST, 2);
$out = curl_exec($curl); //Инициируем запрос к API и сохраняем ответ в переменную
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
curl_close($curl);
$code = (int)$code;
$errors = [
400 => 'Bad request',
401 => 'Unauthorized',
403 => 'Forbidden',
404 => 'Not found',
500 => 'Internal server error',
502 => 'Bad gateway',
503 => 'Service unavailable',
];
try
{
if ($code < 200 || $code > 204) {
throw new Exception(isset($errors[$code]) ? $errors[$code] : 'Undefined error', $code);
}
}
catch(\Exception $e)
{
die("Ошибка: ' . $e->getMessage() . PHP_EOL . 'Код ошибки: ' . $e->getCode());
}
$response = json_decode($out, true);
var_dump($response);
$access_token = $response['access_token']; //Access токен
$refresh_token = $response['refresh_token']; //Refresh токен
$token_type = $response['token_type']; //Тип токена
$expires_in = $response['expires_in']; //Через сколько действие токена истекает
*/
$access_token ="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
// создаем контакт. В рабочей версии лучше перед этим поискать контакт по номеру телефона. Методом /api/v4/contacts с параметром filter[custom_fields_values]
//тестовые данные
$p ="+79000000000";
$n= "Петр Петров";
$qnt = 1;
$ord = "xxxxxxxxxxxxxxxxx";
$link='https://'.$subdomain.'.amocrm.ru/api/v2/contacts';
$data = array (
'add' =>
array (
0 =>
array (
'name' => $n,
'custom_fields'=>array(
array(
'id' => '953127',
'values' => array(
array(
"value"=>$p,
"enum"=> "MOB"
),
),
),
),
) ,
) ,
) ;
$response = amo_call($access_token, $link, $data);
if ($response==-1) {
die("что-то пошло не так при добавлении контакта /n");
} else {
var_dump($response);
$cid = $response["_embedded"]["items"][0]["id"];
// создаем сделку с привязкой к найденному или созданному контакту
$pipeline_id = '4188580';
$lead_status_id = '39384853';
$lead_name ="Заказ из Aliexpress № " . $ord;
$link='https://'.$subdomain.'.amocrm.ru/api/v2/leads';
$data = array (
'add' =>
array (
0 =>
array (
'name' => $lead_name,
'status_id' => $lead_status_id, //id статуса
'pipeline_id' => $pipeline_id,
'contacts_id'=> array (
$cid
),
),
),
);
$response = amo_call($access_token, $link, $data);
if ($response==-1) {
die("что-то пошло не так при добавлении сделки /n");
} else {
$did = $response["_embedded"]["items"][0]["id"];
var_dump($response);
// добавляем товары в сделку
$link='https://'.$subdomain.'.amocrm.ru/api/v4/leads/'.$did.'/link';
$data = array (
0 =>array (
'to_entity_id' => 327219, //id товара можно посмореть методами api или в html коде страницы товара (не путать с артикулом)
'to_entity_type' =>'catalog_elements',
'metadata' => array(
"quantity" => $qnt,
"catalog_id" => 5321 // id каталога, виден в адресной строке при входе в каталог
),
),
);
$response = amo_call($access_token, $link, $data);
if ($response==-1) {
die("что-то пошло не так при добавлении товаров в сделку /n");
} else {
var_dump($response);
//сообщить об успешно выполнной операции
}
}
Bitrix24
function b24_call($queryUrl, $queryData) {
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_SSL_VERIFYPEER => 0,
CURLOPT_POST => 1,
CURLOPT_HEADER => 0,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_URL => $queryUrl,
CURLOPT_POSTFIELDS => $queryData,
));
$out = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($code < 200 || $code > 204) {
return -1;
}
curl_close($curl);
$response = json_decode($out, true);
return $response;
}
$p ="+79000000000";
$n= "Петр Петров";
$zi = "111111";
$pro = "Ньюйорская область";
$gor = "Ньюджерси";
$adr = "ул. Линкольна дом 1";
$qnt = 1;
$ord = "xxxxxxxxxxxxxxxxx";
//Перед созданием контакта лучше поискать его методом crm.contact.list с параметром array('filter' => array('PHONE' => $ph))
$queryUrl = 'https://xxxxxxxxxx.ru/rest/48/xxxxxxxxxxxxxxxxx/crm.contact.add.json';
$queryData = http_build_query(array(
'fields' => array(
"NAME"=> $n,
"PHONE" => array(array('VALUE' =>$p, 'VALUE_TYPE' => 'MOBILE')),
),
'params' => array("REGISTER_SONET_EVENT" => "N")
));
$response= b24_call($queryUrl, $queryData);
if ($response==-1) {
die("что-то пошло не так при добавлении контакта /n");
} else {
var_dump($response);
$cid = $response["result"];
echo "!".$cid."!\n";
$queryUrl = 'https://xxxxxxxxxx.ru/rest/48/xxxxxxxxxxxxxxxxx/crm.requisite.add.json';
$queryData = http_build_query(array(
'fields'=> array(
"PRESET_ID"=> 3,
"ENTITY_TYPE_ID"=> 3,
"ENTITY_ID"=> $cid,
"NAME"=>"Реквизит",
"ACTIVE"=>"Y",
"SORT"=>100
)
));
$response= b24_call($queryUrl, $queryData);
if ($response==-1) {
die("что-то пошло не так при добавлении реквизита /n");
} else {
var_dump($response);
$rid = $response["result"];
$queryUrl = 'https://xxxxxxxxxx.ru/rest/48/xxxxxxxxxxxxxxxxx/crm.address.add.json';
$queryData = http_build_query(array(
'fields'=> array(
"TYPE_ID"=> 1,
"ENTITY_TYPE_ID"=> 8,
"ENTITY_ID"=> $rid,
"POSTAL_CODE"=> "$zi",
"PROVINCE"=> "$pro",
"CITY"=> "$gor",
"ADDRESS_1"=> "$adr",
"COUNTRY"=> "Россия"
)
));
$response= b24_call($queryUrl, $queryData);
if ($response==-1) {
die("что-то пошло не так при добавлении адреса в реквизит /n");
} else {
var_dump($response);
$lead_name = "Заказ из Aliexpress № " . $ord;
$queryUrl = 'https://xxxxxxxxxx.ru/rest/48/xxxxxxxxxxxxxxxxx/crm.lead.add.json';
$queryData = http_build_query(array(
'fields' => array(
"TITLE" => $lead_name,
"TYPE_ID" => "GOODS",
"STAGE_ID" => "NEW",
"CONTACT_ID"=> $cid,
"CURRENCY_ID"=> "RUB",
),
'params' => array("REGISTER_SONET_EVENT" => "Y")
));
$response= b24_call($queryUrl, $queryData);
if ($response==-1) {
die("что-то пошло не так при добавлении сделки /n");
} else {
var_dump($response);
$did = $response["result"];
$items = array();
$items[] = array('PRODUCT_ID' => "2968", 'PRICE' => "1.00", 'QUANTITY' => $qnt);
$queryUrl = 'https://xxxxxxxxxx.ru/rest/48/xxxxxxxxxxxxxxxxx/crm.lead.productrows.set.json';
$queryData = http_build_query(array(
"id" => $did,
"rows"=>$items
));
$response= b24_call($queryUrl, $queryData);
if ($response==-1) {
die("что-то пошло не так при добавлении товаров в сделку /n");
} else {
var_dump($response);
//сообщить об успешно выполнной операции
}
}
}
}
}
RetailCRM
$crmKey = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
function retail_call($url, $postData) {
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_FAILONERROR, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_TIMEOUT, 30);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $postData);
$out = curl_exec($curl);
$code = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($code < 200 || $code > 204) {
return -1;
}
curl_close($curl);
$response = json_decode($out, true);
return $response;
}
$p ="+79000000000";
$n= "Петр Петров";
$zi = "111111";
$pro = "Ньюйорская область";
$gor = "Ньюджерси";
$adr = "ул. Линкольна дом 1";
$qnt = 1;
$ord = "xxxxxxxxxxxxxxxxx";
$url = 'https://xxxxxxxxxx..ru/api/v5/customers/create';
$postData = array(
'site' =>'xxxxxxxxxx.ru',
'customer' => json_encode(array(
'firstName' =>$n,
)),
'apiKey' => $crmKey,
);
$rez = retail_call($url, $postData);
var_dump($rez);
$cid = $rez["id"];
$url = 'https://xxxxxxxxxx.ru/api/v5/orders/create';
$postData = array(
'site' =>'xxxxxxxxxx.ru',
'order' => json_encode(array(
'customer'=> array(
'id' => $cid,
),
'items' => array(
array(
'quantity' => 6,
'offer'=> array(
'externalId' => 'xxxxxxxxxxx',
)
),
))),
'apiKey' => $crmKey,
);
$rez = retail_call($url, $postData);
var_dump($rez);
echo "\n".$rez["id"]."\n";
Selenium (для получения access_token)
from selenium import webdriver
from time import sleep
browser = webdriver.Firefox()
browser.get("https://seller.aliexpress.ru/")
sleep(5)
browser.switch_to.frame(browser.find_element_by_css_selector("iframe.iframe-with-loader_iframe__QQc_0"))
e = browser.find_element_by_id("fm-login-id")
e.send_keys("xxxxxx@xxxxxxxx.ru")
e = browser.find_element_by_id("fm-login-password")
e.send_keys("xxxxxxxxxxxxx")
e = browser.find_element_by_id("fm-login-submit")
e.click()
sleep(15)
browser.get("https://oauth.aliexpress.com/authorize?&response_type=token&client_id=XXXXXXXX&state=1212&view=web&sp=ae")
sleep(5)
try:
e = driver.find_element_by_id("sub")
e.click()
except Exception:
print('Session login')
sleep(5)
txt = "-1"
try:
e = driver.find_element_by_id("wrap")
txt = e.get_attribute('innerHTML')
except Exception:
print('Session login')
x = txt.split("access_token: ")
y = x[1].split("<br>")
print y[0]
tlx Автор
К обсуждению приглашаются anatolix и nerazzgadannaya, как работники Aliexpress. Может подскажите способ получения access_token больше чем на один день. И попутно спрошу. В карточке заказа есть поля «комиссия платформы» и «комиссия филиата» я не нашел способа получить эти значения через API и применяю парсинг через Selenium. Может подскажите способ через API?
nerazzgadannaya
К сожалению, access_token живет только сутки после выпуска (китайцы позиционируют его как токен на одну сессию), мы сами мучаемся при тестировании. Мы прямо сейчас пилим свое open API, куда постепенно потом будем переводить китайские ручки (которые на самом деле испанские, их делали для европейского али). Там будет страничка для выпуска токена, и он будет жить дольше,. По второму отвечу позже.
tlx Автор
Спасибо за отклик. А на счет публикации приложения. Есть возможность стать разработчиком приложения, т.е. верефицироваться на TaoBao с русской кредиткой и телефоном?
nerazzgadannaya
Оба известных нам способа регистрации в качестве разработчика описаны тут: business.aliexpress.ru/help/article/1060821398 и еще есть способ податься на тестовый isv аккаунт developers.aliexpress.com/en/doc.htm?spm=a219a.7386653.0.0.2c7d9b7117FilH&docId=108555&docType=1
Таобао это совсем отдельная платформа, которая работает внутри Китая, поэтому не совсем понимаю о какой верификации речь (есть ссылка?). Но точно могу сказать, что аккаунт Alipay можно создать и пополнить только с китайским id (я как-то сама пыталась зарегистрироваться, чтобы разработать чат-бота для DingTalk, китайский мессенджер, и российский ID не проходит)
tlx Автор
Как-то так я упираюсь в китайскую версию публикации приложения переходя по указанным шагам из русского Aliexpress.
nerazzgadannaya
Как минимум, с аккаунтом self-developer (не commercial) нельзя разрабатывать интеграции более, чем для одного магазина, вероятно проблема в этом. Надо податься на коммерческого разработчика. А вообще эта функция Publish не является частью использования АПИ для продавцов, лучше придерживаться штатных методов (регистрация, создание приложения business.aliexpress.ru/help/article/1060821398). Сейчас проверила на своих приложениях — у меня она вообще заблокирована
tlx Автор
Ок. Спасибо. Если что-то выясниться с доступностью занчений «комиссия платформы» и «комиссия филиата» через API не забудьте пожалуйста отписаться.