Metoda post zwraca html

Metoda post zwraca html
BI
  • Rejestracja:ponad 9 lat
  • Ostatnio:około rok
  • Postów:47
0

Hej Wszystkim,

Potrzebuję zaimplementować płatność PayU w swojej aplikacji. Na stronce PayU podali przykład jak zrobić nową płatność przy użyciu REST API. Mianowicie metoda post powinna zwrócić adres url który może nas przekierować do strony płatności. Przykład ze strony przy użyciu curl działa świetnie:

Kopiuj
curl -X POST https://secure.snd.payu.com/api/v2_1/orders \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer d9a4536e-62ba-4f60-8017-6053211d3f47" \
    -d '{
        "notifyUrl": "https://your.eshop.com/notify",
        "customerIp": "127.0.0.1",
        "merchantPosId": "300746",
        "description": "RTV market",
        "currencyCode": "PLN",
        "totalAmount": "21000",
        "buyer": {
            "email": "john.doe@example.com",
            "phone": "654111654",
            "firstName": "John",
            "lastName": "Doe",
            "language": "pl"
        },
        "products": [
            {
                "name": "Wireless Mouse for Laptop",
                "unitPrice": "15000",
                "quantity": "1"
            },
            {
                "name": "HDMI cable",
                "unitPrice": "6000",
                "quantity": "1"
            }
        ]
    }'

Jednak kiedy próbuję zrobić to samo z poziomu Pythona:

Kopiuj
import requests
import json

payload = {
"notifyUrl": "https://your.eshop.com/notify",
"customerIp": "127.0.0.1",
"merchantPosId": "300746",
"description": "RTV market",
"currencyCode": "PLN",
"totalAmount": "21000",
"buyer": {
"email": "john.doe@example.com",
"phone": "654111654",
"firstName": "John",
"lastName": "Doe",
"language": "pl"
},
"products": [
{
"name": "Wireless Mouse for Laptop",
"unitPrice": "15000",
"quantity": "1"
},
{
"name": "HDMI cable",
"unitPrice": "6000",
"quantity": "1"
}
]
}
headers = {
    'Authorization': 'Bearer d9a4536e-62ba-4f60-8017-6053211d3f47',
    'Content-Type': 'application/json',
}

to_json= json.dumps(payload)
resp = requests.post('https://secure.snd.payu.com/api/v2_1/orders',  data=to_json, headers=headers)


print(resp.text)

Nie będę wklejał całej odpowiedzi bo jest ogromna, ale zamiast jsona dostaję plik html (?). Co zabawne kiedy robię metodę GET, wszystko jest jak być powinno.
Czy ktoś spotkał się z podobnym problemem?

ledi12
  • Rejestracja:prawie 6 lat
  • Ostatnio:około 2 miesiące
  • Lokalizacja:Wrocław
0

sproboj zamiast

Kopiuj
data 

uzyc

Kopiuj
json

Robię http response status cody w martwych ciągach
BI
  • Rejestracja:ponad 9 lat
  • Ostatnio:około rok
  • Postów:47
0

@ledi12: Po zmianie serwer odpowiada:

Kopiuj
{"status":{"statusCode":"ERROR_SYNTAX","code":"103","codeLiteral":"ERROR_SYNTAX","statusDesc":"Bad syntax"}}

Ale wygląda na to, że to dobry trop więc teraz będę próbował zmienić formatowania jsona

ledi12
No i wszystko jasne :) Gdzies mu sie json wysrywa.
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10085
0
bilborrd napisał(a):

@ledi12: Po zmianie serwer odpowiada:

Kopiuj
{"status":{"statusCode":"ERROR_SYNTAX","code":"103","codeLiteral":"ERROR_SYNTAX","statusDesc":"Bad syntax"}}

Ale wygląda na to, że to dobry trop więc teraz będę próbował zmienić formatowania jsona

Zamiast

Kopiuj
to_json= json.dumps(payload)
resp = requests.post('https://secure.snd.payu.com/api/v2_1/orders',  data=to_json, headers=headers)

zrób

Kopiuj
resp = requests.post('https://secure.snd.payu.com/api/v2_1/orders',  json=payload, headers=headers)
edytowany 1x, ostatnio: Riddle
BI
  • Rejestracja:ponad 9 lat
  • Ostatnio:około rok
  • Postów:47
0

@TomRiddle: Zrobiłem i niestety wróciłem do punktu wyjścia. Dalej odpowiada jakimś wielkim html. Początek wygląda tak:

Kopiuj
<!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="theme-color" content="#abd037"> <title>PayU</title> <link rel="shortcut icon" type="image/png" href="favicon.png"> <link rel="icon" type="image/png" href="favicon_192x192.png" sizes="192x192"> <link type="text/css" rel="stylesheet" media="all" href="css/all.93b3563345a2.css"> <script type="text/javascript"> window.config = {
            piwikUrl: "",
            masterpassUrl: "https://sandbox.masterpass.com/dyn/js/switch/integration/MasterPass.client.js",
            newMasterpassEnabled: true,
            visaCheckoutUrl: "https://sandbox-assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js",
            googlePayUrl: "https://pay.google.com/gp/p/js/pay.js",
            googlePayEnv: "TEST",
            googlePayMerchantId: "0",
            assetsUrl: "https://test.assets.payu.com",
            staticUrl: "https://static.payu.com"
        } </script> </head> <body> <div id="app"></div> <script async type="text/javascript" src="js/all.93b3563345a2.js"></script> <svg><symbol viewBox="0 0 38 25" id="a
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:około 10 godzin
  • Lokalizacja:Laska, z Polski
  • Postów:10085
0
bilborrd napisał(a):

@TomRiddle: Zrobiłem i niestety wróciłem do punktu wyjścia. Dalej odpowiada jakimś wielkim html. Początek wygląda tak:

Kopiuj
<!DOCTYPE html> <html> <head> <meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1"> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta name="theme-color" content="#abd037"> <title>PayU</title> <link rel="shortcut icon" type="image/png" href="favicon.png"> <link rel="icon" type="image/png" href="favicon_192x192.png" sizes="192x192"> <link type="text/css" rel="stylesheet" media="all" href="css/all.93b3563345a2.css"> <script type="text/javascript"> window.config = {
            piwikUrl: "",
            masterpassUrl: "https://sandbox.masterpass.com/dyn/js/switch/integration/MasterPass.client.js",
            newMasterpassEnabled: true,
            visaCheckoutUrl: "https://sandbox-assets.secure.checkout.visa.com/checkout-widget/resources/js/integration/v1/sdk.js",
            googlePayUrl: "https://pay.google.com/gp/p/js/pay.js",
            googlePayEnv: "TEST",
            googlePayMerchantId: "0",
            assetsUrl: "https://test.assets.payu.com",
            staticUrl: "https://static.payu.com"
        } </script> </head> <body> <div id="app"></div> <script async type="text/javascript" src="js/all.93b3563345a2.js"></script> <svg><symbol viewBox="0 0 38 25" id="a

Zapisz to albo otwórz ten HTML w przeglądarce i zobacz co tam jest napisane. Możliwe że jest tam ukryty jakiś błąd.

BI
  • Rejestracja:ponad 9 lat
  • Ostatnio:około rok
  • Postów:47
0

@TomRiddle: Niestety pusta strona w przeglądarce.

AF
  • Rejestracja:prawie 7 lat
  • Ostatnio:5 dni
  • Postów:172
0

Nie znam API PayU ale prawdopodobnie zostałeś przekierowany i dostałeś odpowiedź z nowego url. Zdebuguj skrypt i zajrzyj co jest pod resp.history - podejrzewam, że odpowiedź w JSONie z statusem 302.

Edit. Zajrzałem do dokumentacji. Jest dokładnie jak wyżej napisałem:
"Odpowiedź zwraca kod HTTP 302 oraz nagłówek Location ustawiony na redirectUri. Może być to powodem automatycznych przekierowań."

edytowany 1x, ostatnio: AsterFV
XA
  • Rejestracja:ponad 9 lat
  • Ostatnio:4 miesiące
  • Postów:42
0

Udało się to jakoś naprawić? mam to samo...
Natomiast ja dostaje kod 200 wraz z tym HTML'em, nie wazne czy postman'em czy requests'em, daje application/json nawet naglowek z accept zeby wymusic i nic :/

edytowany 1x, ostatnio: Xarenz

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.