繁体   English   中英

我正在尝试从 Shippo 创建一个测试标签,但是出现速率错误

[英]I am trying to create a test label from Shippo, however I get a rate error

但是我收到这个错误,我不知道它是什么意思:

致命错误:未捕获 Shippo_InvalidRequestError: {"rate": ["This field is required."]} 在 /home/****/shippo/lib/Shippo/ApiRequestor.php:100 堆栈跟踪:#0 /home/* ***/shippo/lib/Shippo/ApiRequestor.php(154): Shippo_ApiRequestor->handleApiError('{"rate": ["This...', 400, Array) #1 /home/****/ shippo/lib/Shippo/ApiRequestor.php(59): Shippo_ApiRequestor->_interpretResponse('{"rate": ["This...', 400) #2 /home/****/shippo/lib/Shippo/ ApiResource.php(107): Shippo_ApiRequestor->request('post', '/v1/transaction...', Array) #3 /home/****/shippo/lib/Shippo/Transaction.php(14) : Shippo_ApiResource::_scopedCreate('Shippo_Transact...', Array, NULL) #4 /home/****/public_html/.ship/print/done/index.php(65): Shippo_Transaction::create(Array) #5 {main} 在第 100 行的 /home/****/shippo/lib/Shippo/ApiRequestor.php 中抛出

我也收到了关于包裹字段的类似消息,所以我在 PHP 脚本中将包裹更改为包裹。 这是来自https://github.com/goshippo/shippo-php-client/blob/master/examples/basic-shipment.php的示例代码

我的代码:

<?php
require_once('****' . 'lib/Shippo.php');

Shippo::setApiKey('****');

// Example from_address array
// The complete refence for the address object is available here: https://goshippo.com/docs/reference#addresses
$from_address = array(
    'name' => 'Mr Hippo',
    'company' => 'Shippo',
    'street1' => '215 Clayton St.',
    'city' => 'San Francisco',
    'state' => 'CA',
    'zip' => '94117',
    'country' => 'US',
    'phone' => '+1 555 341 9393',
    'email' => 'mr-hippo@goshipppo.com',
);

// Example to_address array
// The complete refence for the address object is available here: https://goshippo.com/docs/reference#addresses
$to_address = array(
    'name' => 'Ms Hippo',
    'company' => 'San Diego Zoo',
    'street1' => '2920 Zoo Drive',
    'city' => 'San Diego',
    'state' => 'CA',
    'zip' => '92101',
    'country' => 'US',
    'phone' => '+1 555 341 9393',
    'email' => 'ms-hippo@goshipppo.com',
);

// Parcel information array
// The complete reference for parcel object is here: https://goshippo.com/docs/reference#parcels
$parcel = array(
    'length'=> '5',
    'width'=> '5',
    'height'=> '5',
    'distance_unit'=> 'in',
    'weight'=> '2',
    'mass_unit'=> 'lb',
);

// Example shipment object
// For complete reference to the shipment object: https://goshippo.com/docs/reference#shipments
// This object has async=false, indicating that the function will wait until all rates are generated before it returns.
// By default, Shippo handles responses asynchronously. However this will be depreciated soon. Learn more: https://goshippo.com/docs/async
$shipment = Shippo_Shipment::create(
array(
    'address_from'=> $from_address,
    'address_to'=> $to_address,
    'parcel'=> array($parcel),
    'async'=> false,
));

// Rates are stored in the `rates` array
// The details on the returned object are here: https://goshippo.com/docs/reference#rates
// Get the first rate in the rates results for demo purposes.
$rate = $shipment['rates'][0];

// Purchase the desired rate with a transaction request
// Set async=false, indicating that the function will wait until the carrier returns a shipping label before it returns
$transaction = Shippo_Transaction::create(array(
    'rate'=> $rate['object_id'],
    'async'=> false,
));

// Print the shipping label from label_url
// Get the tracking number from tracking_number
if ($transaction['status'] == 'SUCCESS'){
    echo "--> " . "Shipping label url: " . $transaction['label_url'] . "\n";
    echo "--> " . "Shipping tracking number: " . $transaction['tracking_number'] . "\n";
} else {
    echo "Transaction failed with messages:" . "\n";
    foreach ($transaction['messages'] as $message) {
        echo "--> " . $message . "\n";
    }
}
// For more tutorals of address validation, tracking, returns, refunds, and other functionality, check out our
// complete documentation: https://goshippo.com/docs/
?>

虽然我在这里不是 100% 确定,但您可能使用的是最新版本的 PHP 包装器,但没有最新版本的 Shippo API。

我建议去 Shippo 更新日志并查看那里的更改,然后决定是否要升级。

您的代码在那里失败的可能原因是(如果您使用的是旧版本的 API)您正在尝试从不存在的字段中检索值。 您应该寻找$rate = $shipment['rates_list'][0]

您会看到该字段在最新版本的 API 中发生了变化。

我遇到了这个问题。 我最终引用了一个不同的示例 /filter-by-delivery-time.php - 那里的差异显示了被调用的速率

$transaction = Shippo_Transaction::create(array(
    'rate'=> $eligible_rates[0]['object_id'],
    'async'=> false,
));

但这对我来说是错误信息不准确,实际上我的地址格式很糟糕。 不知道为什么要这样做

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM