Как стать автором
Обновить

Комментарии 21

К обсуждению приглашаются anatolix и nerazzgadannaya, как работники Aliexpress. Может подскажите способ получения access_token больше чем на один день. И попутно спрошу. В карточке заказа есть поля «комиссия платформы» и «комиссия филиата» я не нашел способа получить эти значения через API и применяю парсинг через Selenium. Может подскажите способ через API?
К сожалению, access_token живет только сутки после выпуска (китайцы позиционируют его как токен на одну сессию), мы сами мучаемся при тестировании. Мы прямо сейчас пилим свое open API, куда постепенно потом будем переводить китайские ручки (которые на самом деле испанские, их делали для европейского али). Там будет страничка для выпуска токена, и он будет жить дольше,. По второму отвечу позже.
Спасибо за отклик. А на счет публикации приложения. Есть возможность стать разработчиком приложения, т.е. верефицироваться на TaoBao с русской кредиткой и телефоном?
Оба известных нам способа регистрации в качестве разработчика описаны тут: 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 не проходит)
image
Как-то так я упираюсь в китайскую версию публикации приложения переходя по указанным шагам из русского Aliexpress.
Как минимум, с аккаунтом self-developer (не commercial) нельзя разрабатывать интеграции более, чем для одного магазина, вероятно проблема в этом. Надо податься на коммерческого разработчика. А вообще эта функция Publish не является частью использования АПИ для продавцов, лучше придерживаться штатных методов (регистрация, создание приложения business.aliexpress.ru/help/article/1060821398). Сейчас проверила на своих приложениях — у меня она вообще заблокирована
Ок. Спасибо. Если что-то выясниться с доступностью занчений «комиссия платформы» и «комиссия филиата» через API не забудьте пожалуйста отписаться.
Вот так я считаю комиссию Алиэкспресса и комиссию партнерской программы:

Цикл по каждому товару в заказе:
for dto in data['child_order_list']['global_aeop_tp_child_order_dto']:
    g = Good()
    g.name = self.parse_name_from_attr(dto)

    g.sum = float(dto['init_order_amt']['amount'])
    g.quantity = int(dto['product_count'])
    g.price = float(dto['product_price']['amount'])

    if 'afflicate_fee_rate' in dto:
        # партнерская комиссия, рублей
        g.affiliate_commission = g.price * g.quantity * float(dto['afflicate_fee_rate'])

    if 'escrow_fee_rate' in dto:
        # комиссия Алиэкспресса
        g.ali_commission = g.price * g.quantity * float(dto['escrow_fee_rate'])

    if 'refund_info' in dto and dto['refund_info']:
        amt = dto['refund_info']['refund_cash_amt']
        # если был возврат товара
        g.refund = 1.0 * amt['cent'] / amt['cent_factor']


p.s. да, я знаю, что лучше в копейках считать

А вот здесь парсинг цвета товара:
    def parse_name_from_attr(self, dto):
        attr = json.loads(dto['product_attributes'])
        if 'sku' in attr:  # для тестов
            for a in attr['sku']:
                if 'selfDefineValue' in a:
                    return a['selfDefineValue']
                #if attr['pName'] == 'Color':
                #   if attr['pValue'] == 'White':
                #   elif attr['pValue'] == 'Blue':
                #   elif attr['pValue'] == 'YELLOW':

            for a in attr['sku']:
                if 'pName' in a and a['pName'] == 'Color':
                    if a['pValue'] == 'Black':
                        return 'Ватериус'
image
Тут я тупанул. «Affiliate» я поискал и сумму этой комисси тоже, а то что afflicate_fee_rate (пишется же подругому) — это то что нужно, только в процентах даже не подумал.
Спасибо.
Не работал с Bitrix24 и RetailCRM, но решение с курлами в amoCRM мне кажется очень странным. Есть же апишка для работы с amoCRM, будет поудобнее, чем курлами кидаться, как по мне
Можно посмотреть код либы. Есть вероятность, что внутри тот же CURL. Но, в целом согласен, если код библиотеки от самой платформы или по крайней мере не устарел и не тянет за собой сотни мегабайт зависимостей, бывает удобнее воспользоваться им.

Ну судя по коду в статье, в этом решении в курлах используется api/v2. Либа же ссылается на более актуальный api/v4. Да, в чем-то четвертая версия повторяет вторую, а где-то даже ссылается на нее, но мне кажется более правильным использовать либу с более новой и актуальной версией api

Кажется у меня что-то работает «не так», раз я не обновляю сессионный ключ уже полгода…
Я описал его получение у себя в ЖЖ:
sessionkey — Ключ, который мы должны получить после авторизации. Есть 2 пути его получения: авторизация через OAuth 2.0 или «браузер». Т.к. пока есть цель написать локальный Питон скрипт без сервера, выберем 2й вариант.
Откроем в браузере oauth.aliexpress.com/authorize?response_type=token&client_id=111111111&state=1212&view=web&sp=ae, где 111111111 — ваш appKey
Соглашаемся с Соглашением и видим access_token. Его и пишем в sessionkey.


Китайский SDK еще с 3м Питоном не работал, я переписал ядро.
По ссылке скрипт для получения заказов.

Вот так, например, я записываю трек номера Почты России в заказы на Алиэкспресс:

def send_track_id(order_id, track_id):
    """
    Отправка номера отправления в заказ на Алиэкспресс
    :param order_id: номер заказа
    :param track_id: номер отправления
    :return:
    """
    req = api.AliexpressSolutionOrderFulfillRequest(url, port)
    req.set_app_info(appinfo(ALIEXPRESS_APPKEY, ALIEXPRESS_SECRET))

    #req.description = 'Почта России в регионы'
    req.service_name = 'RUSSIAN_POST_RU_PROVINCE_RUB'  #'Почта России в регионы'
    req.tracking_website = 'https://www.pochta.ru/tracking'
    req.out_ref = str(order_id)
    req.send_type = 'all'
    req.logistics_no = str(track_id)

    try:
        resp = req.getResponse(ALIEXPRESS_SESSION_KEY)
        if resp['aliexpress_solution_order_fulfill_response']['result']['result_success']:
            return True
    except TopException as err:
        if err.errorcode == 15:
            if '该交易订单已填写发货通知' in err.submsg:
                raise Exception('Трек номер уже заполнен')
        raise err
nerazzgadannaya, прокоментируйте пожалуйста, как у человека токен живет полгода? Я делаю тоже самое и через сутки плучаю ошибку.
Вы про разные способы получения и сущности говорите, чтобы получить access_token через браузер, а не через сервер, как сказано выше, нужно перейди по ссылке oauth.aliexpress.com/authorize?response_type=token&client_id=APPKEY&state=1212&view=web&sp=ae, подставив в запрос апп ключ, принять соглашение и на экране будет access_token ibb.co/B6N638f
Я пробовал оба способа. Может конкретно на мне что-то не так срабатывает. Подождем, может еще кто-то отпишется.

Откуда-то что ли тупо скопировано и не просмотрев? Что это сначала

e = browser.find_element_by_id("fm-login-submit")

а потом

e = driver.find_element_by_id("wrap")

Не понял что вас смущает. Нужны доработки к коду? У вас тоже токен истекеает через сутки. После публикации моей статить этот глюк перестал воспоизводитсья у новых клиентов. Но я оставил текст как есть на случай если у кого-то тоже будет проблема (т.к. у старого токен так и оставался валидным только 24 часа, но этот магазин переехал на ИП с новым ИНН).

Р.S. sleep(5) как раз нужен чтобы дождаться пока появится блок "wrap" с токеном.

Т.е. вас как бы совсем не смущает, что определяем переменную.

browser = webdriver.Firefox()


и вдруг, откуда не возьмись, появляется driver.

Спасибо поправил. Видимо собирал из двух версий одну и просмотрел.

Вот тут видимо ещё

driver.switch_to.frame(browser.find_element_by_css_selector("iframe.iframe-with-loader_iframe__QQc_0"))

И последний print скобок нет. Но всё равно у меня это не работает...

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.