Avatar billede suulut_sdj Juniormester
09. oktober 2023 - 17:41 Der er 7 kommentarer og
1 løsning

array + object

Når jeg eksekverer $new får jeg følgende fejlbesked fra den server jeg eksekverer til:
httpStatusCode":400,"errors":["Invalid type. Expected Array but got Object. Path 'lines', line 1, position 337."],"logTime":"2023-10-09T17:33:32","schemaPath":"https://restapi.e-conomic.com/schema/orders.drafts.post.schema.json"}
alt fungerer undtage 'lines' som jeg har oprettet som et array som e-conomic rest foreskriver at det skal være:
https://restdocs.e-conomic.com/#post-orders-drafts

$new = [
'customer' =>
    ['customerNumber' => $customer->customerNumber],
  'currency' => $customer->currency,
  'date' => date("Y-m-d"),
  'delivery' => ['deliveryDate'=>'2023-10-11'],
  'layout' => ['layoutNumber' => 19],
  'paymentTerms' => [
  'paymentTermsNumber' => $customer- >
paymentTerms>paymentTermsNumber
],
'recipient' =>
  [   
    'name' => $customer->name,
    'address' => $customer->address,
    'zip' => $customer->zip,
    'city' => $customer->city,
    'vatZone' => ['vatZoneNumber' => $customer->vatZone->vatZoneNumber]
  ],
'lines' =>
array('description' => 'Basis Kursus', 'quantity' => 2,'unitNetPrice' =>
'4995','discountPercentage' => 25, 'unitCostPrice' => 0, 'totalNetAmount' =>
9990),
'notes' =>
  [
    'heading' => $heading,
    'textLine1' => $tidspunkt,
    'textLine2' => $kurser_id
  ]
];
Hvad gør jeg forkert her?
Avatar billede Henrik Hansen Forsker
10. oktober 2023 - 09:34 #1
Der bør vel ikke være en ] efter 'customerNumber' => $customer->customerNumber ??
Avatar billede Henrik Hansen Forsker
10. oktober 2023 - 09:47 #2
Den ekstra ] bør indsættes før 'recipient' =>, så passer array'et.
Men passer det så med resten af koden ??

$new =
[
'customer' =>
    [
    'customerNumber' => $customer->customerNumber,
    'currency' => $customer->currency,
    'date' => date("Y-m-d"),
    'delivery' =>
        [
        'deliveryDate'=>'2023-10-11'
        ],
    'layout' =>
        [
        'layoutNumber' => 19
        ],
    'paymentTerms' =>
        [
        'paymentTermsNumber' => $customer->paymentTerms>paymentTermsNumber
        ],
    ],
'recipient' =>
    [ 
    'name' => $customer->name,
    'address' => $customer->address,
    'zip' => $customer->zip,
    'city' => $customer->city,
    'vatZone' =>
        [
        'vatZoneNumber' => $customer->vatZone->vatZoneNumber
        ]
    ],
'lines' =>
    [
    'description' => 'Basis Kursus',
    'quantity' => 2,
    'unitNetPrice' => '4995',
    'discountPercentage' => 25,
    'unitCostPrice' => 0,
    'totalNetAmount' => 9990
    ],
'notes' =>
    [
    'heading' => $heading,
    'textLine1' => $tidspunkt,
    'textLine2' => $kurser_id
    ]
];
Avatar billede suulut_sdj Juniormester
10. oktober 2023 - 09:50 #3
Hej Henrik, mange tak for dit svar :-)
jeg har efterfølgende ændret koden til:
$data = array(
  "customer" => array("customerNumber" => $customer->customerNumber),
  currency" => $customer->currency,
  "date" => date("Y-m-d"),
  "delivery" => array("deliveryDate"=>"2023-10-11"),
  "layout" => array("layoutNumber" => 19),
  "paymentTerms" => array    (
  "paymentTermsNumber" => $customer->paymentTerms->paymentTermsNumber
    ),

"recipient" => array(
                                                                                                                                        "name" => $customer->name,
                                                                                                                                        "address" => $customer->address,
                                                                                                                                        "zip" => $customer->zip,
                                                                                                                                        "city" => $customer->city,
                                                                                                                                        "vatZone" => array("vatZoneNumber" => $customer->vatZone->vatZoneNumber)
                                                                                                                                        ),                                                   
                                                                                                           
"lines"=> array(
                                                                                                                                        "unit"=> array("unitNumber" => "1","name" => "stk"),
                                                                                                                                        "product" => array("productNumber" => "FH2E"),
                                                                                                                                        "description" => "Basis Kursus",
                                                                                                                                        "quantity" => "2",
                                                                                                                                        "unitNetPrice" => "4995",
                                                                                                                                        "discountPercentage" => "25",
                                                                                                                                        "unitCostPrice" => 0,
                                                                                                                                        "totalNetAmount" => 9990
                                                                                                                                        ),
                                                                                                           
"notes" => array(
                                                                                                                                        "heading" => $heading,
                                                                                                                                        "textLine1" => $tidspunkt,
                                                                                                                                        "textLine2" => $kurser_id
)                                                                                                                                      );
Men får samme svar at der forventes et Array og ikke et Object. :-(
Avatar billede Henrik Hansen Forsker
10. oktober 2023 - 09:59 #4
Det ser stadigvæk ud til at dit problem er i første del "customer" :
Skal "customerNumber" virkelig være et array, eller er det ikke bare et tal i "customer" arrayet?
Som du kan se neden under, så brækker jeg som regel koden op i blokke med indtrykket værdier, så synes jeg det er nemmere at spotte fejl ;)

$data = array(
    "customer" => array(
        "customerNumber" => $customer->customerNumber,
        "currency" => $customer->currency,
        "date" => date("Y-m-d"),
        "delivery" => array("deliveryDate"=>"2023-10-11"),
        "layout" => array("layoutNumber" => 19),
        "paymentTerms" => array(
            "paymentTermsNumber" => $customer->paymentTerms->paymentTermsNumber
        )
    ),

    "recipient" => array(
        "name" => $customer->name,
        "address" => $customer->address,
        "zip" => $customer->zip,
        "city" => $customer->city,
        "vatZone" => array("vatZoneNumber" => $customer->vatZone->vatZoneNumber)
    ),                                                 

    "lines"=> array(
        "unit"=> array(
            "unitNumber" => "1",
            "name" => "stk"
        ),
        "product" => array(
            "productNumber" => "FH2E"
        ),
        "description" => "Basis Kursus",
        "quantity" => "2",
        "unitNetPrice" => "4995",
        "discountPercentage" => "25",
        "unitCostPrice" => 0,
        "totalNetAmount" => 9990
    ),

    "notes" => array(
        "heading" => $heading,
        "textLine1" => $tidspunkt,
        "textLine2" => $kurser_id
    )
);
Avatar billede Henrik Hansen Forsker
10. oktober 2023 - 10:12 #5
Din var til currency var vist problemet - den manglede en " foran :)
Prøv i øvrigt: https://www.cleancss.com/php-beautify/

$data = array(
    "customer" => array("customerNumber" => $customer->customerNumber),
    "currency" => $customer->currency,
    "date" => date("Y-m-d"),
    "delivery" => array("deliveryDate" => "2023-10-11"),
    "layout" => array("layoutNumber" => 19),
    "paymentTerms" => array(
        "paymentTermsNumber" => $customer->paymentTerms->paymentTermsNumber
    ),

    "recipient" => array(
        "name" => $customer->name,
        "address" => $customer->address,
        "zip" => $customer->zip,
        "city" => $customer->city,
        "vatZone" => array("vatZoneNumber" => $customer->vatZone->vatZoneNumber)
    ),

    "lines" => array(
        "unit" => array("unitNumber" => "1", "name" => "stk"),
        "product" => array("productNumber" => "FH2E"),
        "description" => "Basis Kursus",
        "quantity" => "2",
        "unitNetPrice" => "4995",
        "discountPercentage" => "25",
        "unitCostPrice" => 0,
        "totalNetAmount" => 9990
    ),

    "notes" => array(
        "heading" => $heading,
        "textLine1" => $tidspunkt,
        "textLine2" => $kurser_id
    )
);
Avatar billede suulut_sdj Juniormester
10. oktober 2023 - 10:20 #6
Hej Henrik
Tak for for måden med blokkene, det giver et godt overblik.
Det er kun CustomerNumber som indgår i arryet.
Hvis jeg fjerner "lines" så bliver ordren oprettet præcis som den skal. Når jeg har "lines" med får jeg fejlen
Her er javascript koden som economic har på deres udvikler side.
Som du kan se har jeg opdelt det efter disse foreskrifter(Det er ikke alle linjer som skal være med):
var order = {
    "date": "2018-03-01",
    "currency": "DKK",
    "exchangeRate": 100,
    "netAmount": 10.00,
    "netAmountInBaseCurrency": 0.00,
    "grossAmount": 12.50,
    "marginInBaseCurrency": -46.93,
    "marginPercentage": 0.0,
    "vatAmount": 2.50,
    "roundingAmount": 0.00,
    "costPriceInBaseCurrency": 46.93,
    "paymentTerms": {
        "paymentTermsNumber": 1,
        "daysOfCredit": 14,
        "name": "Lobende maned 14 dage",
        "paymentTermsType": "invoiceMonth"
    },
    "customer": {
        "customerNumber": 1
    },
    "recipient": {
        "name": "Toj & Co Grossisten",
        "address": "Vejlevej 21",
        "zip": "7000",
        "city": "Fredericia",
        "vatZone": {
            "name": "Domestic",
            "vatZoneNumber": 1,
            "enabledForCustomer": true,
            "enabledForSupplier": true
        }
    },
    "delivery": {
        "address": "Hovedvejen 1",
        "zip": "2300",
        "city": "Kbh S",
        "country": "Denmark",
        "deliveryDate": "2014-09-14"
    },
    "references": {
        "other": "aaaa"
    },
    "layout": {
        "layoutNumber": 5
    },
    "lines": [
        {
            "unit": {
                "unitNumber": 2,
                "name": "Tim"
            },
            "product": {
                "productNumber": "50"
            },
            "quantity": 1.00,
            "unitNetPrice": 10.00,
            "discountPercentage": 0.00,
            "unitCostPrice": 46.93,
            "totalNetAmount": 10.00,
            "marginInBaseCurrency": -46.93,
            "marginPercentage": 0.0
        },
        {
            "unit": {
                "unitNumber": 1,
                "name": "stk."
            },
            "product": {
                "productNumber": "50"
            },
            "quantity": 1.00,
            "unitNetPrice": 10.00,
            "discountPercentage": 0.00,
            "unitCostPrice": 46.93,
            "totalNetAmount": 10.00,
            "marginInBaseCurrency": -46.93,
            "marginPercentage": 0.0
        },
        {
            "unit": {
                "unitNumber": 4
            },
            "product": {
                "productNumber": "50"
            },
            "quantity": 1.00,
            "unitNetPrice": 10.00,
            "discountPercentage": 0.00,
            "unitCostPrice": 46.93,
            "totalNetAmount": 10.00,
            "marginInBaseCurrency": -46.93,
            "marginPercentage": 0.0
        }
    ]
};
Avatar billede Henrik Hansen Forsker
10. oktober 2023 - 14:12 #7
En simpel måde at konvertere denne JSON til et PHP-Array: Erstat alle ": med " => og alle { med [, samt alle } med ]
Så skulle du have den korrekte php-kode, hvor du kan sætte dine værdier ind i.
$var = ["noget" => 1]  er det samme som $var = array("noget" => 1), og skulle virke med mindre du kører en gammel php-version.

<?php
// Object til test:
$customer = (object) [
    'customerNumber' => 1,
    'currency' => 'DKK',
    'name' => 'Test',
    'address' => 'Testvej 1',
    'zip' => '1234',
    'city' => 'Testby',
    'address' => 'Testvej 1',
    'paymentTerms' => (object)['paymentTermsNumber' => 123],
    'vatZone' => (object)['vatZoneNumber' => 123],
    'delivery' => (object)[
        "address" => "Hovedvejen 1",
        "zip" => "2300",
        "city" => "Kbh S",
        "country" => "Denmark",
        "deliveryDate" => "2014-09-14"
    ]
];

$order = [
    "date" => date('Y-m-d'),
    "currency" => $customer->currency,
    "exchangeRate" => 100,
    "netAmount" => 10.00,
    "netAmountInBaseCurrency" => 0.00,
    "grossAmount" => 12.50,
    "marginInBaseCurrency" => -46.93,
    "marginPercentage" => 0.0,
    "vatAmount" => 2.50,
    "roundingAmount" => 0.00,
    "costPriceInBaseCurrency" => 46.93,
    "paymentTerms" => [
        "paymentTermsNumber" => $customer->paymentTerms->paymentTermsNumber,
        "daysOfCredit" => 14,
        "name" => "Lobende maned 14 dage",
        "paymentTermsType" => "invoiceMonth"
    ],
    "customer" => [
        "customerNumber" => $customer->customerNumber
    ],
    "recipient" => [
        "name" => $customer->name,
        "address" => $customer->address,
        "zip" => $customer->zip,
        "city" => $customer->city,
        "vatZone" => [
            "name" => "Domestic",
            "vatZoneNumber" => $customer->vatZone->vatZoneNumber,
            "enabledForCustomer" => true,
            "enabledForSupplier" => true
        ]
    ],
    "delivery" => [
        "address" => $customer->delivery->address,
        "zip" => $customer->delivery->zip,
        "city" => $customer->delivery->city,
        "country" => $customer->delivery->country,
        "deliveryDate" => $customer->delivery->deliveryDate
    ],
    "references" => [
        "other" => "aaaa"
    ],
    "layout" => [
        "layoutNumber" => 5
    ],
];

$lines = [];
// Tilføj ny linje
$lines[] = [
    "unit" => [
        "unitNumber" => 2,
        "name" => "Tim"
    ],
    "product" => [
        "productNumber" => "50"
    ],
    "quantity" => 1.00,
    "unitNetPrice" => 10.00,
    "discountPercentage" => 0.00,
    "unitCostPrice" => 46.93,
    "totalNetAmount" => 10.00,
    "marginInBaseCurrency" => -46.93,
    "marginPercentage" => 0.0
];
// Tilføj ny linje
$lines[] = [
    "unit" => [
        "unitNumber" => 1,
        "name" => "stk."
    ],
    "product" => [
        "productNumber" => "50"
    ],
    "quantity" => 1.00,
    "unitNetPrice" => 10.00,
    "discountPercentage" => 0.00,
    "unitCostPrice" => 46.93,
    "totalNetAmount" => 10.00,
    "marginInBaseCurrency" => -46.93,
    "marginPercentage" => 0.0
];
// Tilføj ny linje
$lines[] = [
    "unit" => [
        "unitNumber" => 4
    ],
    "product" => [
        "productNumber" => "50"
    ],
    "quantity" => 1.00,
    "unitNetPrice" => 10.00,
    "discountPercentage" => 0.00,
    "unitCostPrice" => 46.93,
    "totalNetAmount" => 10.00,
    "marginInBaseCurrency" => -46.93,
    "marginPercentage" => 0.0
];
// Indsæt alle linjer i order
array_push($order, $lines);

// Test indhold af $order
echo "<pre><br>";
echo var_export($order);
echo "<hr>";
echo json_encode($order);
echo "</pre><br>";
echo "https://jsonformatter.org/";
Avatar billede suulut_sdj Juniormester
26. oktober 2023 - 14:28 #8
Hej Henrik tak for hjælpen :-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester