使用 Shippo 和 PHP 制作运输标签

Posted

技术标签:

【中文标题】使用 Shippo 和 PHP 制作运输标签【英文标题】:Using Shippo and PHP to produce shipping labels 【发布时间】:2015-05-24 15:29:05 【问题描述】:

除了生成标签之外,我几乎让它完美地工作了。

我有这个代码来生成费率,效果很好:

//Wait for rates to be generated
$attempts = 0;
while (($shipment["object_status"] == "QUEUED" || $shipment["object_status"] == "WAITING") && $attempts < 10)

    $shipment = Shippo_Shipment::retrieve($shipment["object_id"]);
    $attempts +=1;


//Get all rates for shipment.
$rates = Shippo_Shipment::get_shipping_rates(array('id'=> $shipment["object_id"]));

$json = json_decode($rates, true);
foreach ($json["results"] as $key)

    $amount = $key["amount"];
    $servicelevel = $key["servicelevel_name"];
    $objid = $key["object_id"];

在查看每个结果时,我将它们分配给不同服务级别的变量,并允许用户选择他们想要使用的运输方式。我将$objid 传递到下一页以使用以下代码生成标签:

//Write the object_id to a variable
$var = $shiparray[1];
$transaction = Shippo_Transaction::create(array('rate'=>$var));
echo $transaction["object_status"] ."<br>";
// Wait for carrier to create shipping label
$attempts = 0;
while (($transaction["object_status"] == "QUEUED" || $transaction["object_status"] == "WAITING") && $attempts < 10)

    $transaction = Shippo_Transaction::retrieve($transaction["object_id"]);
    $attempts += 1;

echo $transaction["object_status"] ."<br>";
// Retrieve label url and tracking number or error message
if ($transaction["object_status"] == "SUCCESS")

    echo($transaction["label_url"]);
    echo("\n");
    echo($transaction["tracking_number"]);

else

    echo( $transaction["messages"] );

不过,这只会产生错误。我是否传递了错误的值来生成标签?我应该使用为货件生成的价值而不是费率吗?

【问题讨论】:

嗨,迈克,能否请您提供错误消息和整个交易 JSON 响应?这对于调试代码非常有帮助。谢谢!西蒙 感谢您的回复。 echo( $transaction["messages"] ); 产生的错误只说数组。 JSON 响应真的很长,所以我把它贴在这里:link 任何帮助表示赞赏。我以前从未使用过这样的东西,并且非常期待学习如何做到这一点。 【参考方案1】:

这是七宝的西蒙。您发布的链接实际上是 Rates 响应,而不是 Transaction(它是许多 Rates 的数组,因此是长度)。

我已快速检查了您的帐户,对于您最近的交易尝试,有一条错误消息“无法购买费率,因为 Shippo 帐户没有有效的结算设置。”。这是因为您的 Shippo 用户帐户没有任何信用卡信息,但您正在尝试购买生产中的标签。

您可以在此处输入有效的信用卡https://goshippo.com/user/billing/。保存您的信用卡后,该请求应该可以正常工作!

如果您有任何其他问题,请告诉我,我们很乐意为您提供帮助!

【讨论】:

嗨,西蒙。感谢您的回复。我刚刚查看了运营商页面,FedEx 设置为测试,其他设置为非活动。还有其他地方可以将其设置为测试吗?我确实将它暂时移至生产环境以测试速率,因为我在测试中得到不一致的结果,并希望确保它返回正确的结果。我将运营商设置回测试,以便确保标签部分有效。感谢您的帮助。 是的,我看到 FedEx 现在处于测试模式。以前,USPS 必须已激活。自从您将 FedEx 设置为测试模式后,您是否进行了另一次测试?如果是这样,您收到了哪些错误/成功消息? 嗨,西蒙。我在测试环境。我输入了以下几行并从每行得到以下响应:echo $transaction["object_id"] return 1fb8d19af1ee467caf6ddbcf12541c0f; echo $transaction["object_status"] 返回错误;并且 echo( $transaction["messages"] ) 返回数组。 嗨,迈克 - 刚刚看到打折的 Shippo USPS 帐户仍在生产中。我已经为你完全禁用了它。你能再试一次吗?如果更简单,请随时通过 goshippo.com 上的 simon 直接与我联系。 我刚刚又试了一次,结果相同。我注意到的一件事是,在运营商下,Parcelforce 在测试模式下处于活动状态。我尝试停用它,但没有选项可以执行此操作。你可以为我禁用它,或者我该怎么做?唯一应该活跃的是联邦快递。谢谢。

以上是关于使用 Shippo 和 PHP 制作运输标签的主要内容,如果未能解决你的问题,请参考以下文章

php 在运输包装中引入供应商名称和标准标签

Shippo API 导入错误

php [UPS运输方式]将UPS作为特定运输类别的运输选项

Unity里面如何制作一条模拟真正运输带的活动(像坦克那个带一样会一个跟一个走)

直接从 HTTP 响应打印

如何使用 PHP 禁用 PayPal 运输选项