Metoda post zwraca html

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:

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": "[email protected]",
            "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:

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": "[email protected]",
"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?

0

sproboj zamiast

data 

uzyc

json
0

@ledi12: Po zmianie serwer odpowiada:

{"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

0
bilborrd napisał(a):

@ledi12: Po zmianie serwer odpowiada:

{"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

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

zrób

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

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

<!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
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:

<!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.

0

@TomRiddle: Niestety pusta strona w przeglądarce.

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ń."

1 użytkowników online, w tym zalogowanych: 0, gości: 1