【发布时间】:2017-04-05 19:53:28
【问题描述】:
从 MWS 订单 2011-01-01 迁移到 2013-09-01 API 我无法使用他们提供的示例 PHP 代码读取订单数据。
2011 版有不少帮助,但在 2013 版中没有,所以我尝试使用 2011 示例来读取响应,但我被卡住了。
ListOrdersSample.PHP 有:
invokeListOrders($service, $request);
/**
* Get List Orders Action Sample
* Gets competitive pricing and related information for a product identified by
* the MarketplaceId and ASIN.
*
* @param MarketplaceWebServiceOrders_Interface $service instance of MarketplaceWebServiceOrders_Interface
* @param mixed $request MarketplaceWebServiceOrders_Model_ListOrders or array of parameters
*/
function invokeListOrders(MarketplaceWebServiceOrders_Interface $service, $request)
{
try {
$response = $service->ListOrders($request);
echo ("Service Response\n");
echo ("============================================\n");
echo(" ListOrdersResponse\n");
if ($response->isSetListOrdersResult()) {
echo(" ListOrdersResult\n");
$listOrdersResult = $response->getListOrdersResult();
if ($listOrdersResult->isSetNextToken())
{
echo(" NextToken\n");
echo(" " . $listOrdersResult->getNextToken() . "\n");
}
if ($listOrdersResult->isSetCreatedBefore())
{
echo(" CreatedBefore\n");
echo(" " . $listOrdersResult->getCreatedBefore() . "\n");
}
if ($listOrdersResult->isSetLastUpdatedBefore())
{
echo(" LastUpdatedBefore\n");
echo(" " . $listOrdersResult->getLastUpdatedBefore() . "\n");
}
if ($listOrdersResult->isSetOrders()) {
echo(" Orders\n");
$orders = $listOrdersResult->getOrders();
//print_r($orders); //debug
//exit(); //debug
$orderList = $orders->getOrder(); //line 148
$orders 在(2011 版)中是这样的:
服务响应 ============================================== ======== ListOrdersResponse ListOrdersResult CreatedBefore 2017-04-05T18:53:56Z 订单 MarketplaceWebServiceOrders_Model_OrderList 对象 ( _fields:protected => Array ( Order => Array ( FieldValue => Array ( [0] => MarketplaceWebServiceOrders_Model_Order Object ( _fields:protected => Array (AmazonOrderId => Array (FieldValue => 026-3851269-0939511 FieldType => string) SellerOrderId => Array ( FieldValue => FieldType => string) PurchaseDate => Array (FieldValue => 2017-04-04T18:03:30Z FieldType => string ) LastUpdateDate => Array ( FieldValue => 2017-04-04T18:33:45Z FieldType => string ) OrderStatus => Array (FieldValue => Unshipped FieldType => OrderStatusEnum) FulfillmentChannel => Array (FieldValue => MFN FieldType => FulfillmentChannelEnum ) SalesChannel => Array ( FieldValue => Amazon.co.uk FieldType => string ) OrderChannel => Array ( FieldValue => FieldType => string ) ShipServiceLevel => Array (FieldValue => Std UK Dom_2 FieldType => string) ShippingAddress => Array (....
$orders 在(2013 版)中是这样的:
服务响应 ==================================================== ===========================ListOrdersResponse ListOrdersResult CreatedBefore 2017-04-05T18:35:36Z 订单数组 ( [0] => MarketplaceWebServiceOrders_Model_Order Object (_fields:protected => Array (AmazonOrderId => Array (FieldValue => 026-3851269-0939511 FieldType => string) SellerOrderId => Array (FieldValue => FieldType => string ) PurchaseDate => Array ( FieldValue => 2017-04-04T18:03:30Z FieldType => string ) LastUpdateDate => Array ( FieldValue => 2017-04-04T18:33:45Z 字段类型 => 字符串)订单状态 => 数组( FieldValue => Unshipped FieldType => string) FulfillmentChannel => 数组(FieldValue => MFN FieldType => string)SalesChannel => Array ( FieldValue => Amazon.co.uk FieldType => string) OrderChannel => 数组(字段值 => 字段类型 => 字符串) ShipServiceLevel => 数组 ( FieldValue => Std UK Dom_2 FieldType => string) ShippingAddress => 数组
使用 2013 版本时出现错误:
PHP 致命错误:在非对象上调用成员函数 getOrder() 在 /home/*****/public_html/****/ListOrdersSample.php 第 148 行
上面粘贴的最后一行代码是:
$orderList = $orders->getOrder();
2013 年的 $orders 看起来确实像一个包含对象的数组,但我不确定如何阅读它,因为我的编码对于数组和对象来说不是太强大。
拥有 $orderList 后,我应该能够继续使用示例代码并执行以下操作:
foreach ($orderList as $order) {
echo(" Order\n");
if ($order->isSetAmazonOrderId())
{
echo(" AmazonOrderId\n");
echo(" " . $order->getAmazonOrderId() . "\n");
}
但不幸的是,由于致命错误,我一直卡在第 148 行。
【问题讨论】:
标签: php amazon-mws