Интеграция Sagepay (Opayo) с Django — Как создать ключ сеанса продавца

#django #curl #opayo

Вопрос:

Я пытаюсь интегрировать Opayo (SagePay) с Django, и у меня возникли проблемы с генерацией ключа сеанса торговца (MSK).

Из документов sagepays они говорят, что нужно использовать приведенный ниже запрос curl и что я должен получить ключ в ответе

 curl https://pi-test.sagepay.com/api/v1/merchant-session-keys 
-H "Authorization: Basic aEpZeHN3N0hMYmo0MGNCOHVkRVM4Q0RSRkxodUo4RzU0TzZyRHBVWHZFNmhZRHJyaWE6bzJpSFNyRnliWU1acG1XT1FNdWhzWFA1MlY0ZkJ0cHVTRHNocktEU1dzQlkxT2lONmh3ZDlLYjEyejRqNVVzNXU="  
-H "Content-type: application/json" 
-X POST 
-d '{
  "vendorName": "sandbox"
}'
 

Я попытался реализовать это в своем представлении Django со следующим кодом, но получил ответ 422 (Необработанный ответ сущности).

 import requests

def BasketView(request): 
    headers = {
        "Authorization": "Basic aEpZeHN3N0hMYmo0MGNCOHVkRVM4Q0RSRkxodUo4RzU0TzZyRHBVWHZFNmhZRHJyaWE6bzJpSFNyRnliWU1acG1XT1FNdWhzWFA1MlY0ZkJ0cHVTRHNocktEU1dzQlkxT2lONmh3ZDlLYjEyejRqNVVzNXU=",
        "Content-type": "application/json",
    }
    data = {"vendorName": "sandbox"}

    r = requests.post("https://pi-test.sagepay.com/api/v1/merchant-session-keys", headers=headers, params=data)
    print(r)

 

Есть какие-нибудь идеи, где я могу ошибаться в этом?

Ответ №1:

Вы передаете неправильный параметр requests.post() , который следует использовать json вместо params :

 r = requests.post(
    "https://pi-test.sagepay.com/api/v1/merchant-session-keys",
    headers=headers,
    json=data
)
 

При этом нет необходимости указывать Content-Type заголовок, он добавляется автоматически.

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

1. Большое тебе спасибо, Том, это сработало идеально. Я потратил половину дня, пытаясь решить эту проблему!