Среда
Локальная: Сервер разработки Python/Django (проверка прошла успешно)
Производство: сервер AWS (проверка не удалась)
Секрет API: один и тот же секрет API Shopify в обеих средах
Примеры URL-адресов
Оба среды получают одинаковые URL-адреса:
Локальный (успешно):
Код: Выделить всё
https://local.test.com/api/install/?hmac=c1ffa63a47d4781b34dc820bcb96344d085d6b95ef642939b67c5b3f8f411b04&host=YWRtaW4uc2hvcGlmeS5jb20vc3RvcmUvYXBwaGVhbHRoY2hlY2s&shop=apphealthcheck.myshopify.com×tamp=1731044050 [example URL]
Код: Выделить всё
https://server.test.com/api/install/?hmac=c1ffa63a47d4781b34dc820bcb96344d085d6b95ef642939b67c5b3f8f411b04&host=YWRtaW4uc2hvcGlmeS5jb20vc3RvcmUvYXBwaGVhbHRoY2hlY2s&shop=apphealthcheck.myshopify.com×tamp=1731044050 [example URL]
Код: Выделить всё
[08/Nov/2024 05:32:34] "GET /api/install/?hmac=2b9feb2de99f3199f5a3f798452d88fb9769184aca436d38cd2f09b4436f207d&host=YWRtaW4uc2hvcGlmeS5jb20vc3RvcmUvYXBwaGVhbHRoY2hlY2s&shop=apphealthcheck.myshopify.com×tamp=1731043814 HTTP/1.1" 200 5
Validating hmac...
Query string: host=YWRtaW4uc2hvcGlmeS5jb20vc3RvcmUvYXBwaGVhbHRoY2hlY2s&shop=apphealthcheck.myshopify.com×tamp=1731043931
HMAC received: 2b9feb2de99f3199f5a3f798452d88fb9769184aca436d38cd2f09b4436f207d
HMAC calculated: d16e72b71df76ed89c9cf8952e138d8b3712e9c8bf36e7b9f1656bc5c3657699
Код: Выделить всё
def validate_hmac(**kwargs):
print("Validating hmac...")
api_secret = getattr(settings, 'SHOPIFY_API_SECRET', '')
hmac_val = kwargs.pop('hmac')
# Create query string
query_string = "&".join([f"{k}={kwargs[k]}" for k in sorted(kwargs)])
print(f"Query string: {query_string}")
print(f"HMAC received: {hmac_val}")
# Calculate HMAC
hmac_calc = hmac.new(api_secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256).hexdigest()
print(f"HMAC calculated: {hmac_calc}")
return hmac_calc == hmac_val
- Проверенные секреты API идентичны в обеих средах.
- Подтверждено, что параметры идентичны.
- Добавлено ведение журнала для отслеживания значений параметров.
Подробнее здесь: https://stackoverflow.com/questions/791 ... aws-server