Вызывая конечную точку с помощью метода CURL-Post и json поврежден - PullRequest
0 голосов
/ 25 февраля 2019

Я вызываю конечную точку с помощью CURL с помощью следующей команды:

curl -H "Content-Type: application/json"  -X POST  -d  '{"TransmissionID":"SO000001","CustomerSO":"SO000001","EndUserName":"Roi_Test","Hold":"","RequestedDate":"2019-02-24 15:00","Currency":"EUR","Address1":"Calle del Maestro Bagant","Address2":"","BuildingName":"","BuildingNumber":"1","Floor":"1","ContactPerson":"roi","City":"Valencia","CountryAbbriviation":"ES","Email":"aaa@joomi.co.il","Phone":"050-7680249","Zip":"46015","Remark":"","Incoterm":"DDP","Status":"","Item":["OrderLine":1,"ItemName":"cl111","ItemDescription":"Description","Quantity":"1.","PriceCurrency":"EUR","Price":"219.9","HSCode":"9900000003463","AWBNumber":"","CarrierName":"PostNL","CountryOfManufacturer":"CN","Base64String":""],"NumberOfSku":1,"NumberOfUnits":1}'  "http://server.com/Magicxpi4.6/MgWebRequester.dll?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-AREST_Incoming%%23IncomingFile"

, и полученный JSON выглядит следующим образом:

{TransmissionID:SO000001,CustomerSO:SO000001,EndUserName:Roi_Test,Hold:,RequestedDate:2019-02-24 15:00,Currency:EUR,Address1:Calle del Maestro Bagant,Address2:,BuildingName:,BuildingNumber:1,Floor:1,ContactPerson:roi,City:Valencia,CountryAbbriviation:ES,Email:aaa@joomi.co.il,Phone:050-7680249,Zip:46015,Remark:,Incoterm:DDP,Status:,Item:[OrderLine:1,ItemName:cl111,ItemDescription:Description,Quantity:1.,PriceCurrency:EUR,Price:219.9,HSCode:9900000003463,AWBNumber:,CarrierName:PostNL,CountryOfManufacturer:CN,Base64String:],NumberOfSku:1,NumberOfUnits:1}

Полученные данные выглядят какстрока не похожа на JSON, в полях и значениях отсутствуют "знаки ...

. Я уже пытался изменить одинарные / двойные кавычки, и это не сработало.

Есть идеикак решить это?

1 Ответ

0 голосов
/ 26 февраля 2019

вы отправляете поврежденный JSON, в частности

"Item": [
    "OrderLine": 1,
    "ItemName": "cl111",
    "ItemDescription": "Description",
    "Quantity": "1.",
    "PriceCurrency": "EUR",
    "Price": "219.9",
    "HSCode": "9900000003463",
    "AWBNumber": "",
    "CarrierName": "PostNL",
    "CountryOfManufacturer": "CN",
    "Base64String": ""
],

не является допустимым JSON.в PHP это будет допустимый массив, так как PHP допускает строковые ключи в массивах, а JSON (и JavaScript) - нет.но в JSON объекты могут иметь строковые ключи, поэтому ближе всего к допустимому json вы бы сделали "Item" объектом вместо массива, например это будет допустимый JSON:

{
    "TransmissionID": "SO000001",
    "CustomerSO": "SO000001",
    "EndUserName": "Roi_Test",
    "Hold": "",
    "RequestedDate": "2019-02-24 15:00",
    "Currency": "EUR",
    "Address1": "Calle del Maestro Bagant",
    "Address2": "",
    "BuildingName": "",
    "BuildingNumber": "1",
    "Floor": "1",
    "ContactPerson": "roi",
    "City": "Valencia",
    "CountryAbbriviation": "ES",
    "Email": "aaa@joomi.co.il",
    "Phone": "050-7680249",
    "Zip": "46015",
    "Remark": "",
    "Incoterm": "DDP",
    "Status": "",
    "Item": {
        "OrderLine": 1,
        "ItemName": "cl111",
        "ItemDescription": "Description",
        "Quantity": "1.",
        "PriceCurrency": "EUR",
        "Price": "219.9",
        "HSCode": "9900000003463",
        "AWBNumber": "",
        "CarrierName": "PostNL",
        "CountryOfManufacturer": "CN",
        "Base64String": ""
    },
    "NumberOfSku": 1,
    "NumberOfUnits": 1
}

Кстати, вы создаете вручную такие сложные jsons сложные jsons?я думаю, вам следует вместо этого переключиться на язык сценариев, чтобы сделать его более читабельным и обслуживаемым, например, вот как это сделать с помощью PHP-cli:

#!/usr/bin/env php
<?php
$ch = curl_init();
curl_setopt_array($ch, array(
    CURLOPT_URL => 'http://server.com/Magicxpi4.6/MgWebRequester.dll?appname=IFSCarolina_Prod&prgname=HTTP&arguments=-AREST_Incoming%%23IncomingFile',
    CURLOPT_HTTPHEADER => array(
        'Content-Type: application/json'
    ) ,
    CURLOPT_POST => 1,
    CURLOPT_POSTFIELDS => json_encode(array(
        'TransmissionID' => 'SO000001',
        'CustomerSO' => 'SO000001',
        'EndUserName' => 'Roi_Test',
        'Hold' => '',
        'RequestedDate' => '2019-02-24 15:00',
        'Currency' => 'EUR',
        'Address1' => 'Calle del Maestro Bagant',
        'Address2' => '',
        'BuildingName' => '',
        'BuildingNumber' => 1,
        'Floor' => 1,
        'ContactPerson' => 'roi',
        'City' => 'Valencia',
        'CountryAbbriviation' => 'ES',
        'Email' => 'aaa@joomi.co.il',
        'Phone' => '050-7680249',
        'Zip' => '46015',
        'Remark' => '',
        'Incoterm' => 'DDP',
        'Status' => '',
        'Item' => array(
            'OrderLine' => 1,
            'ItemName' => 'cl111',
            'ItemDescription' => 'Description',
            'Quantity' => '1.',
            'PriceCurrency' => 'EUR',
            'Price' => 219.9,
            'HSCode' => '9900000003463',
            'AWBNumber' => '',
            'CarrierName' => 'PostNL',
            'CountryOfManufacturer' => 'CN',
            'Base64String' => '',
        ) ,
        'NumberOfSku' => 1,
        'NumberOfUnits' => 1,
    )) ,
));
curl_exec($ch);
curl_close($ch);
  • 2 последние вещи«Количество» элемента в вашем JSON равно 1. - точка должна быть там, или это опечатка?
  • Я давно не касался API-интерфейса REST PayPal, но это напоминает мне API-интерфейс REST PayPal, и в этом API я полагаю, что Item должен быть массивом объектов, а непросто объект, если это то, что вы хотите, то это будет "Item":[{...}] (в JSON) или 'Item' => array(array(...)) (в PHP)
...