1 Востаннє редагувалося Faraon (05.09.2017 15:52:21)

Тема: cURL - надсилання запитів

Привіт всім. Намагаюся реалізувати створення замовлення через апі почти росії
Вони привели приклад на пітоні, я намагаюся переписати на PHP. Тільки ось ніяк не виходить. Після того як я відправляю запит до їхнього апі я отримую помилку ( Bad Request )
org.springframework.http.converter.HttpMessageNotReadableException
Наскільки я зрозумів то я скоріж за все припускаюся помилки при формуванні запиту curl

$access_token = "*********";
$login_password = "*******";
$ch = curl_init();
$data1 = array(
    "address-type-to" => "Universal Brand",
    "area-to" => "string wsd dsad sa",
    "brand-name" => "название брэнда",
    "building-to" => "Строение",
    "comment" => "Номер заказа",
    "corpus-to" => "Корпус",
    "courier" => true,
    "dimension" => array(
        "height" =>  3,
        "length" =>  9,
        "width" =>  73
    ),
    "envelope-type" => "C4",
    "fragile" => true,
    "given-name" => "string",
    "hotel-to" => "string",
    "house-to" => "string",
    "index-to" => 0,
    "insr-value" => 0,
    "letter-to" => "string",
    "location-to" => "string",
    "mail-category" => "SIMPLE",
    "mail-direct" => 0,
    "mail-type" => "UNDEFINED",
    "mass" => 0,
    "middle-name" => "string",
    "num-address-type-to" => "string",
    "order-num" => "string",
    "payment" => 0,
    "payment-method" => "CASHLESS",
    "place-to" => "string",
    "postoffice-code" => "string",
    "recipient-name" => "string",
    "region-to" => "string",
    "room-to" => "string",
    "slash-to" => "string",
    "street-to" => "string",
    "surname" => "string",
    "tel-address" => 0,
    "with-order-of-notice" => true,
    "with-simple-notice" => true
);

$data = array();
array_push($data, $data1);
$data = json_encode($data);

curl_setopt($ch, CURLOPT_URL, "https://otpravka-api.pochta.ru/1.0/user/backlog");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
//curl_setopt( $ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
"Content-Type: application/json",
"Accept: application/json;charset=UTF-8",
"Authorization: AccessToken ".$access_token,
"X-User-Authorization: Basic ".$login_password,
"Content-Length: ".strlen($data)
));  
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
curl_exec($ch);
curl_close($ch);

Гляньте одним оком)))

2 Востаннє редагувалося Q-bart (05.09.2017 15:46:42)

Re: cURL - надсилання запитів

Цікаво, скільки пройде часу поки вас тут забанять  :D

Подякували: koala, Faraon, 221VOLT, ostap34PHP, leofun015

3

Re: cURL - надсилання запитів

Q-bart написав:

Цікаво, скільки пройде часу поки вас тут забанять  :D

?

4

Re: cURL - надсилання запитів

Faraon написав:
Q-bart написав:

Цікаво, скільки пройде часу поки вас тут забанять  :D

?

Чому ви дивуєтеся ? Ми не раді посиланням на російськомовні сайти, а сайтам з півнем на гербі - тим більше.

Подякували: Faraon, 221VOLT, cheappi386, ostap34PHP, leofun015

5

Re: cURL - надсилання запитів

VTrim написав:
Faraon написав:
Q-bart написав:

Цікаво, скільки пройде часу поки вас тут забанять  :D

?

Чому ви дивуєтеся ? Ми не раді посиланням на російськомовні сайти, а сайтам з півнем на гербі - тим більше.

Видалив)

6

Re: cURL - надсилання запитів

Faraon написав:
  curl_setopt($ch, CURLOPT_URL, "https://otpravka-api.pochta.ru/1.0/user/backlog");
Faraon написав:

Видалив)

Невдало.

Подякували: 221VOLT, ostap34PHP, leofun013

7

Re: cURL - надсилання запитів

Глянув одним оком, побачив курку, пішов далі...

Подякували: 221VOLT, ostap34PHP2

8

Re: cURL - надсилання запитів

А що на нього дивитись? Ми ж документації не бачимо.
Крім того, раджу взяти собі якийсь http-клієнт на php. Бо на це дивитися страшно.

Подякували: ping1

9 Востаннє редагувалося Faraon (06.09.2017 23:09:53)

Re: cURL - надсилання запитів

Sensetivity написав:

А що на нього дивитись? Ми ж документації не бачимо.
Крім того, раджу взяти собі якийсь http-клієнт на php. Бо на це дивитися страшно.

головною документацією на їхньому сайті є цей приклад коду на пітоні:

import requests
import base64
import json

def to_base64(str):
    return base64.b64encode(str.encode()).decode("utf-8")

#properties
access_token    = "TestAccessToken"
login_password    = to_base64("login:password")
protocol     = "https://"
host         = "otpravka-api.pochta.ru"

request_headers = {
    "Content-Type": "application/json",
    "Accept": "application/json;charset=UTF-8",
    "Authorization": "AccessToken " + access_token,
    "X-User-Authorization": "Basic " + login_password
}

path = "/1.0/user/backlog"

new_orders = [
    {
        "brand-name": "Universal Brand",
        "address-type-to": "DEFAULT",
        "given-name": "Иван",
        "house-to": "37",
        "index-to": 117105,
        "mail-category": "ORDINARY",
        "mail-direct": 643,
        "mail-type": "POSTAL_PARCEL",
        "mass": 1000,
        "middle-name": "Иванович",
        "order-num": "001",
        "place-to": "г Москва",
        "postoffice-code": "101000",
        "region-to": "г Москва",
        "street-to": "ш Варшавское",
        "surname": "Иванов",
        "tel-address": 79459562067,
        "transport-type": "SURFACE",
        "dimension": {
            "height": 3,
            "length": 9,
            "width": 73
        },
        "fragile": "true"
    },
    {
        # По данному объекту ожидается ошибка при обработке: "code" : "ILLEGAL_MASS_EXCESS"
        # т.к. масса больше установленного ограничения

        "address-type-to": "DEFAULT",
        "given-name": "Сергей",
        "house-to": "13",
        "index-to": 630084,
        "mail-category": "ORDINARY",
        "mail-direct": 643,
        "mail-type": "POSTAL_PARCEL",
        "mass": 200000,
        "middle-name": "Владимирович",
        "order-num": "002",
        "place-to": "г Новосибирск",
        "postoffice-code": "101000",
        "region-to": "обл Новосибирская",
        "room-to": "99",
        "street-to": "проезд Газовый",
        "surname": "Сидоров",
        "tel-address": 79458712076,
        "transport-type": "SURFACE"
    }
]

url = protocol + host + path

response = requests.put(url, headers=request_headers, data=json.dumps(new_orders))
print("Status code: ", response.status_code)
print("Response body: ", response.text)

10

Re: cURL - надсилання запитів

Писав їм на почту, вони кажуть що в 99% випадків проблема в кодуванні, кодування має бути UTF-8. У мене наче і стоють UTF-8

"Accept: application/json;charset=UTF-8",

11

Re: cURL - надсилання запитів

То сніхвайте вашу мережеву активність, і дивіться яке насправді в вас кодування, чи якось іншим чином.

Подякували: Monolith1

12

Re: cURL - надсилання запитів

0xDADA11C7 написав:

То сніхвайте вашу мережеву активність, і дивіться яка насправді в вас кодування, чи якось іншим чином.

'сніхвайте'?

13

Re: cURL - надсилання запитів

Сніхвер або аналізатор трахвіку

Подякували: Monolith, LoganRoss, leofun013

14 Востаннє редагувалося quez (07.09.2017 10:21:53)

Re: cURL - надсилання запитів

Правильно "трахвхвіку"

Подякували: 0xDADA11C71

15

Re: cURL - надсилання запитів

Проблему вирішив. Помилку повертало тому що дані які я відправляв в масиві $data1 були не коректні, а саме було кілька лишних полів

Подякували: 0xDADA11C71

16

Re: cURL - надсилання запитів

Чому б вам не викласти відповідь?

17 Востаннє редагувалося Faraon (12.09.2017 18:32:40)

Re: cURL - надсилання запитів

0xDADA11C7 написав:

Чому б вам не викласти відповідь?

сам запит cURL описано вірно, а ось параметри які я передаю описані в документації від почти росії, тобто якщо хтось буде розробляти теж саме що я то він зобовязаний заглянути в доументацію і подивится які саме йому параметри потрібно передавати, так як там я кілька видів запитів.