1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/minibear2021-doudian

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

抖店 Python SDK

介绍

抖店 Python SDK.

Приглашаем разработчиков, связанных с «Озон», сканировать QR-код и присоединиться к QQ группе для обсуждения (номер группы: 799137292):

image

Подходит для

«Озон» Python SDK поддерживает как приложения для личного использования, так и инструменты для разработки. Подробные инструкции см. на официальном сайте.

Особенности

  1. Автоматическое обновление access_token.
  2. Поддержка локального кэширования access_token.
  3. Автоматическая сортировка бизнес-параметров, без предварительной обработки.
  4. Автоматическая проверка и анализ сообщений о push-уведомлениях.
  5. Поддержка среды песочницы для тестирования магазина.

Исходный код

github

gitee

Установка

$ pip install doudian

Использование

Подготовка

Подготовьте app key, app secret, shop id и другие параметры в соответствии с официальными документами.

Минимальный бэкенд

В файле examples.py показан бэкэнд с интерфейсом запроса списка заказов для членов клуба и обработки push-уведомлений. Сначала измените несколько параметров конфигурации в файле examples.py:

# App类型,SELF=самостоятельное приложение, TOOL=инструментальное приложение
APP_TYPE = AppType.SELF

# 应用key,длина 19 цифр
APP_KEY = '3409409348479354011'

# 应用密钥 字符串
APP_SECRET = '2ad2355c-01d0-11f8-91dc-05a8cd1054b1'

# 店铺ID,самостоятельное приложение обязательно.
SHOP_ID = '323423'

# token缓存文件
TOKEN_FILE = './323423.token'

# 日志记录器, записывает веб-запросы и детали обратных вызовов
logging.basicConfig(filename=os.path.join(os.getcwd(), 'demo.log'), level=logging.DEBUG, filemode='a', format='%(asctime)s - %(process)s - %(levelname)s: %(message)s')
LOGGER = logging.getLogger("demo")

# Прокси-сервер, None или {"https": "http://10.10.1.10:1080"}, подробности см. в https://docs.python-requests.org/zh_CN/latest/user/advanced.html
PROXY = None

# Режим песочницы для тестирования магазинов
TEST_MODE = False

Затем инициализируйте экземпляр DouDian и настройте подходящий интерфейс:

# Инициализация
doudian = DouDian(
    app_key=APP_KEY,
    app_secret=APP_SECRET,
    app_type=APP_TYPE,
    shop_id=SHOP_ID,
    token_file=TOKEN_FILE,
    logger=LOGGER,
    proxy=PROXY,
    test_mode=TEST_MODE
)

app = Flask(__name__)

@app.route('/brandList')
def brand_list():
    # В качестве примера возьмём получение авторизованных брендов магазина, обратитесь к официальному документу, чтобы правильно собрать путь и параметры, а затем вызвать, чтобы получить данные авторизованного бренда магазина.
    # https://op.jinritemai.com/docs/api-docs/13/54
    path = '/shop/brandList'
    params = {}
    result = doudian.request(path=path, params=params)
    return jsonify({'result': result if result else ''})

Проверьте правильность параметров, теперь вы можете запустить его с помощью интерпретатора Python:

$ python examples.py
 * Serving Flask app "examples" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)

Теперь перейдите по адресу http://127.0.0.1:5000/orderList, если всё работает правильно, вы увидите что-то вроде следующего JSON:

{
    "result":
    {
        "code":10000,
        "data":[],
        "err_no":0,
        "log_id":"20211203091350010194059098259B567F",
        "message":"success",
        "msg":"success",
        "sub_code":"",
        "sub_msg":""
    }
}

На этом этапе минимальный бэкенд завершён.

Если не удаётся выполнить этот шаг, обязательно тщательно проверьте все параметры инициализации. При необходимости войдите в фоновый режим «Озона» и сбросьте все параметры.

Далее настроим интерфейс для обработки push-уведомлений, чтобы получать и обрабатывать push-уведомления от «Озона».

@app.route('/notify', methods=['POST'])
def notify():
    result = doudian.callback(request.headers, request.data)
    if result:
        tag = result.get('tag')
        if tag == '0':  # Проверка сообщения службы push-уведомлений «Озона», необходимо немедленно вернуть success
            return jsonify({'code': 0, 'msg': 'success'})
        if tag == '100':  # Сообщение о создании заказа, дополнительные типы сообщений см. в официальном документе.
            # TODO: Выполнить необходимую бизнес-обработку в соответствии с параметрами сообщения, вернуть успех в течение 5 секунд
            return jsonify({'code': 0, 'msg': 'success'})
        return jsonify({'code': 0, 'msg': 'success'})
    else:
        return jsonify({'code': 40041, 'message': 'Ошибка анализа данных push-уведомления'})

После настройки интерфейса для обработки push-уведомлений настройте URL-адрес в фоновом режиме «Озона», и сервер «Озона» автоматически отправит проверочное сообщение с тегом «0». После успешной проверки можно будет использовать службу push-уведомлений.

Общий интерфейс

request(path: str, params: dict)

Все вызовы API «Озона» выполняются через интерфейс doudian.request(). Этот интерфейс требует передачи параметров path и params. Значения параметров должны соответствовать официальному документу. Форма аналогична следующему коду, где params нужно передать только параметры запроса или бизнес-параметры, общие параметры передавать не нужно, SDK обработает их автоматически: image params.update({'page':1})

params.update({'size':50})

result = doudian.request(path=path, params=params)

### init_token(code: str)

Используется для инициализации или сброса access token. Обычно не требуется вызывать вручную. Вызов необходим только в следующих случаях:

* При инициализации DouDian приложением типа Tool (AppType.TOOL), если код не был передан.
* Когда приложению типа Tool (AppType.TOOL) или Self (AppType.SELF) необходимо принудительно сбросить access token.
* Если возникает исключение TokenError.

### callback(headers: dict, body: bytes)

Интерфейс для анализа и проверки сообщений, отправленных через Push-уведомления от Doudian. В интерфейс передаются заголовки headers и тело сообщения body без изменений. Затем они автоматически анализируются и проверяются.

```python
result = doudian.callback(request.headers, request.data)

build_auth_url(service_id: str, state: str)

Этот интерфейс используется для создания URL авторизации для приложений типа Tool. Сгенерированный URL отправляется продавцу для завершения процесса аутентификации и получения кода. Полученный код можно использовать для инициализации или сброса access token с помощью интерфейса init_token.

service_id = 'demo service id'
state = 'demo state'
result = doudian.build_auth_url(service_id=service_id, state=state)

Примеры использования этих интерфейсов можно найти в файле examples.py.

Параметры функций интерфейса

Соответствие типов параметров между документацией Doudian API и Python SDK:

Тип параметра в документации Doudian API Тип параметра в Python SDK
String str
Int64, Number int
object, Json, Struct dict: {}
List, JsonArray list: []
Bool bool: True, False

Возвращаемые значения функций интерфейса

Каждая функция интерфейса возвращает None или json.

Часто задаваемые вопросы

Проблемы с анализом и проверкой сообщений

Одной из проблем, с которой сталкиваются разработчики, является сбой при анализе и проверке сообщений. Это может быть связано с тем, что разные веб-фреймворки Python по-разному обрабатывают обратные вызовы. Если возникают проблемы с проверкой, убедитесь, что переданные заголовки headers и тело message body соответствуют ожидаемым типам и значениям.

Flask

Передайте request.headers и request.data напрямую.

result = doudian.callback(headers=request.headers, body=request.data)

Django

Django выполняет предварительную обработку заголовков. Используйте следующий подход.

headers = {}
headers.update({'app-id': request.META.get('HTTP_APP_ID')})
headers.update({'event-sign': request.META.get('HTTP_EVENT_SIGN')})
result = doudian.callback(headers=headers, body=request.body)

Tornado

Передайте request.headers и request.body напрямую.

result = doudian.callback(headers=request.headers, body=request.body)

Другие фреймворки

Следуйте описанным выше подходам, чтобы обеспечить соответствие переданных и полученных значений. Не преобразуйте данные в dict или string.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/minibear2021-doudian.git
git@api.gitlife.ru:oschina-mirror/minibear2021-doudian.git
oschina-mirror
minibear2021-doudian
minibear2021-doudian
master