• Resolved rienco

    (@rienco)


    Wanneer ik een order verander naar de status ‘in de wacht’ of een andere status dan ‘voltooid’, krijg ik deze foutmelding:

    [07-Nov-2025 13:08:56 UTC] PHP Fatal error: Uncaught MyParcelNL\Pdk\Api\Exception\ApiException: Request failed. Status code: 422. Message: Invalid order note data provided (request_id: 1762520936.2487690def683cb5c) in /home/customer/www//public_html/wp-content/plugins/woocommerce-myparcel/vendor/myparcelnl/pdk/src/Api/Service/AbstractApiService.php:62
    Stack trace:
    #0 /home/customer/www/
    /public_html/wp-content/plugins/woocommerce-myparcel/vendor/myparcelnl/pdk/src/Fulfilment/Repository/OrderNotesRepository.php(22): MyParcelNL\Pdk\Api\Service\AbstractApiService->doRequest(Object(MyParcelNL\Pdk\Fulfilment\Request\PostOrderNotesRequest), 'MyParcelNL\Pdk\...')
    #1 /home/customer/www//public_html/wp-content/plugins/woocommerce-myparcel/vendor/myparcelnl/pdk/src/App/Action/Backend/Order/PostOrderNotesAction.php(53): MyParcelNL\Pdk\Fulfilment\Repository\OrderNotesRepository->postOrderNotes('1f0bbd35-641a-6...', Object(MyParcelNL\Pdk\Fulfilment\Collection\OrderNoteCollection))
    #2 /home/customer/www in /home/customer/www/
    /public_html/wp-content/plugins/woocommerce-myparcel/vendor/myparcelnl/pdk/src/Api/Service/AbstractApiService.php on line 62

    Log output:

    2025-11-07T13:23:43+00:00 ERROR [PDK]: Received an error response { "request": { "uri": "https:\/\/api.myparcel.nl\/fulfilment\/orders\/1f0bbd35-641a-6f14-924f-8fe1d2fa1ec1\/notes", "method": "POST", "headers": { "authorization": "***", "user-agent": "MyParcelNL-WooCommerce\/5.9.0 WooCommerce\/10.3.4 WordPress\/6.8.3 MyParcelNL-PDK\/2.63.0 php\/8.3.27" }, "body": { "data": { "order_notes": [] } } }, "response": { "code": 422, "body": { "message": "Invalid order note data provided (request_id: 1762521823.3763690df2df5bdff)", "request_id": "1762521823.3763690df2df5bdff", "status_code": 422, "errors": [ { "3800": { "fields": [ "order_notes" ], "human": [ "order_notes This collection should contain 1 element or more." ] }, "status": 422 } ] } } }

    Qua instellingen wordt de order verwerkt naar MyParcel als hij status ‘in de wacht’ heeft.

Viewing 8 replies - 1 through 8 (of 8 total)
  • Plugin Author Joeri van Veen

    (@joerimyparcel)

    Beste @rienco , bedankt voor het melden.

    Wij kunnen dit reproduceren, en zijn nu bezig met een fix.
    https://github.com/myparcelnl/pdk/pull/401

    Met vriendelijke groet,

    Joeri (MyParcel)

    Thread Starter rienco

    (@rienco)

    Hi Joeri,

    We hebben nog steeds gedeeltelijk dit probleem. Op het moment we de status wijzigen via een custom order status die via de backend besteloverzichtspagina aangepast kan worden geeft deze nog steeds dezelfde foutmelding. Dit is de code die we hiervoor gebruiken:

    <?php
    /**
    * Plugin Name: Custom Order Status Buttons
    * Description: Voeg twee aangepaste orderstatussen toe (Betaald en Afgerond, wacht op betaling) met snelle actieknoppen in het WooCommerce bestellingenoverzicht.
    * Author: Rienco | Teqz
    * Version: 1.0
    */

    if (!defined('ABSPATH')) exit;

    // 1. Registreer aangepaste statussen
    add_action('init', function() {
    register_post_status('wc-betaald', [
    'label' => 'Betaald',
    'public' => true,
    'show_in_admin_all_list' => true,
    'show_in_admin_status_list' => true,
    'label_count' => _n_noop('Betaald <span class="count">(%s)</span>', 'Betaald <span class="count">(%s)</span>'),
    ]);

    register_post_status('wc-afgerond-wacht-op', [
    'label' => 'Afgerond, wacht op betaling',
    'public' => true,
    'show_in_admin_all_list' => true,
    'show_in_admin_status_list' => true,
    'label_count' => _n_noop('Afgerond, wacht op betaling <span class="count">(%s)</span>', 'Afgerond, wacht op betaling <span class="count">(%s)</span>'),
    ]);
    });

    add_filter('wc_order_statuses', function($statuses) {
    $statuses['wc-betaald'] = 'Betaald';
    $statuses['wc-afgerond-wacht-op'] = 'Afgerond, wacht op betaling';
    return $statuses;
    });

    // 2. Voeg knoppen toe aan het bestellingenoverzicht
    add_filter('woocommerce_admin_order_actions', function($actions, $order) {
    if ($order->get_status() !== 'betaald') {
    $actions['mark_betaald'] = [
    'url' => wp_nonce_url(admin_url('admin-ajax.php?action=mark_order_status&status=betaald&order_id=' . $order->get_id()), 'mark_order_status'),
    'name' => __('Markeer als Betaald', 'custom-order-status-buttons'),
    'action' => 'mark_betaald',
    ];
    }
    if ($order->get_status() !== 'afgerond-wacht-op') {
    $actions['mark_afgerond_wacht_op'] = [
    'url' => wp_nonce_url(admin_url('admin-ajax.php?action=mark_order_status&status=afgerond-wacht-op&order_id=' . $order->get_id()), 'mark_order_status'),
    'name' => __('Afgerond, wacht op betaling', 'custom-order-status-buttons'),
    'action' => 'mark_afgerond_wacht_op',
    ];
    }
    return $actions;
    }, 20, 2);

    // 3. AJAX handler voor statuswijziging
    add_action('wp_ajax_mark_order_status', function() {
    if (!current_user_can('edit_shop_orders') || !check_admin_referer('mark_order_status')) {
    wp_die(__('Geen toegang', 'custom-order-status-buttons'));
    }

    $order_id = intval($_GET['order_id'] ?? 0);
    $status = sanitize_text_field($_GET['status'] ?? '');

    if (!$order_id || !$status) {
    wp_die(__('Ongeldige gegevens', 'custom-order-status-buttons'));
    }

    $order = wc_get_order($order_id);
    if (!$order) {
    wp_die(__('Order niet gevonden', 'custom-order-status-buttons'));
    }

    $order->update_status('wc-' . $status, __('Status handmatig gewijzigd via snelactie', 'custom-order-status-buttons'));
    wp_safe_redirect(wp_get_referer());
    exit;
    });

    // 4. Styling van de knoppen
    add_action('admin_head', function() {
    echo '<style>
    .wc-action-button.mark_betaald::after {
    content: "";
    color: #fff;
    background: #3bb54a;
    border-radius: 50%;
    display: inline-block;
    width: 20px !important;
    height: 20px !important;
    text-align: center;
    margin: 4px 2px !important;
    }
    .wc-action-button.mark_afgerond_wacht_op::after {
    content: "";
    color: #fff;
    background: #f9a825;
    border-radius: 50%;
    display: inline-block;
    width: 20px !important;
    height: 20px !important;
    text-align: center;
    margin: 4px 2px !important;
    }
    </style>';
    });
    Plugin Author Joeri van Veen

    (@joerimyparcel)

    Goedemorgen @rienco , bedankt voor het delen van de issue, en de code! Ik heb de code hier en als ik die twee knoppen gebruik alsmede automatische verwerking door onze plugin, dan krijg ik geen foutmelding en werkt het zoals (ik) verwacht.
    Zou je de volgende dingen kunnen bevestigen / aanvullen?
    – In de MyParcel plugin bij algemeen staat ‘order modus’ op ‘aan’
    – Wat is er gekozen bij ‘Automatisch verwerken’? (direct onder order modus)
    – Wat zijn de vier keuzes onder ‘Automatisering orderstatus’?
    – Wat is de volgorde _precies_ om dit te reproduceren? Aangezien het met order notities te maken heeft doe ik het volgende, maar daarbij moet ik aantekenen dat ik nu niet helemaal helder heb hoe het zou kunnen dat een order geplaatst is zonder een enkele notitie. 1. plaats order, 2. verwijder notitie(s), 3. kies de status waarbij MyParcel automatisch exporteert.

    Alvast bedankt voor de extra info. Als jullie een staging hebben waar ik op mag kijken om het te kunnen reproduceren / troubleshooten, dan heel graag de gegevens mailen naar support -at- myparcel.nl

    Thread Starter rienco

    (@rienco)

    Hoi Joeri,

    Bedankt voor je reactie

    • Ordermodus staat inderdaad aan
    • Bij Automatisch verwerken staat de status “In de wacht”
    • De vier keuzes zijn respectievelijk: Afgerond | Geen | Geen | Geen
    • Ik stuur jullie een link naar onze stagingomgeving.
    Plugin Author Joeri van Veen

    (@joerimyparcel)

    Beste @rienco , bedankt voor de medewerking. Inderdaad kreeg ik een fout op jullie staging. Maar ik zag ook dat daar versie 5.9.0 van onze plugin was geïnstalleerd. Toen ik de huidige versie installeerde (5.13.2) (de fix waarover het hier gaat zit in 5.13.1) kreeg ik geen foutmelding meer.

    Ik ben nog niet overtuigd dat het nu wel werkt, want ik zie dat er wel degelijk notities staan bij die order en ik kan de foutmelding niet zien (hij geeft een generieke error). Zou je kunnen controleren of het nu (met 5.13.2) op staging wel werkt zoals verwacht?

    Vriendelijke groet,
    Joeri

    Thread Starter rienco

    (@rienco)

    @joerimyparcel dit lijkt inderdaad te werken, waar kan ik deze versie vinden? WP geeft niet aan dat er een update beschikbaar is.

    Plugin Author Joeri van Veen

    (@joerimyparcel)

    Hi @rienco : de huidige versie staat op GitHub: https://github.com/myparcelnl/woocommerce/releases
    Deze zal op termijn ook in de store komen, zodat het updaten weer vanzelf gaat.

    Thread Starter rienco

    (@rienco)

    Bedankt, ook in de live omgeving lijkt het weer te werken.

Viewing 8 replies - 1 through 8 (of 8 total)

You must be logged in to reply to this topic.