| @@ -307,17 +307,10 @@ | ||
| 307 | 307 | |
| 308 | 308 | try { |
| 309 | 309 | $response = $routeapp_client->create_shipment($trackingPayload['tracking_number'], $trackingPayload); |
| 310 | 310 | |
| 311 | - if (!is_wp_error($response) && | |
| 312 | - (wp_remote_retrieve_response_code($response) == 409 || | |
| 313 | - wp_remote_retrieve_response_code($response) == 201) | |
| 314 | - ) { | |
| 315 | - return true; | |
| 316 | - } | |
| 311 | + return Routeapp_WooCommerce_Common_Tracking_Provider::is_successful_shipment_create_response($response); | |
| 317 | 312 | |
| 318 | - return false; | |
| 319 | - | |
| 320 | 313 | } catch (Exception $exception) { |
| 321 | 314 | self::get_route_public_instance()->routeapp_log($exception, [ |
| 322 | 315 | 'endpoint' => 'shipments', |
| 323 | 316 | 'params' => $trackingPayload, |
| @@ -445,8 +438,9 @@ | ||
| 445 | 438 | try { |
| 446 | 439 | |
| 447 | 440 | $trackingPayloads = self::format_shipping_data_api($order->get_id()); |
| 448 | 441 | $tracking_numbers = array(); |
| 442 | + $create_failed = false; | |
| 449 | 443 | foreach ($trackingPayloads as $trackingPayload){ |
| 450 | 444 | $shipmentResponse = $routeapp_client->get_shipment($trackingPayload['tracking_number'], $order->get_id()); |
| 451 | 445 | $tracking_numbers[] = $trackingPayload['tracking_number']; |
| 452 | 446 | if (is_wp_error($shipmentResponse) || (isset($shipmentResponse['response']['code']) && $shipmentResponse['response']['code'] == 200)) { |
| @@ -452,9 +446,11 @@ | ||
| 452 | 446 | if (is_wp_error($shipmentResponse) || (isset($shipmentResponse['response']['code']) && $shipmentResponse['response']['code'] == 200)) { |
| 453 | 447 | continue; |
| 454 | 448 | } |
| 455 | 449 | |
| 456 | - self::resend_shipment($trackingPayload); | |
| 450 | + if ( ! self::resend_shipment($trackingPayload) ) { | |
| 451 | + $create_failed = true; | |
| 452 | + } | |
| 457 | 453 | } |
| 458 | 454 | |
| 459 | 455 | //save on post_meta the tracking ids |
| 460 | 456 | if (!empty($tracking_numbers)) { |
| @@ -461,9 +457,13 @@ | ||
| 461 | 457 | $tracking_numbers = implode(Routeapp_WooCommerce_Tracking_Provider::SEPARATOR_PIPE, $tracking_numbers); |
| 462 | 458 | self::update_post_meta_value($order->get_id(), 'routeapp_shipment_tracking_number', $tracking_numbers); |
| 463 | 459 | } |
| 464 | 460 | |
| 465 | - self::set_reconcile_shipping_triggered($order->get_id()); | |
| 461 | + // A 400 from create_shipment is not success — leave the cron | |
| 462 | + // flag unset so the next run can retry (EXT-425). | |
| 463 | + if ( ! $create_failed ) { | |
| 464 | + self::set_reconcile_shipping_triggered($order->get_id()); | |
| 465 | + } | |
| 466 | 466 | |
| 467 | 467 | } catch (Exception $exception) { |
| 468 | 468 | continue; |
| 469 | 469 | } |