[BD] 下载并解析Amz订单

279 阅读1分钟
一.下载程序
<?php

namespace app\admin\controller;

use app\common\controller\Backend;
use app\admin\model\Store as StoreModel;
use SellingPartnerApi\Api\CatalogItemsV0Api;
use SellingPartnerApi\Configuration;
use SellingPartnerApi\Endpoint;
use SellingPartnerApi\Api\SellersV1Api as SellersApi;
use SellingPartnerApi\Api\OrdersV0Api;
use SellingPartnerApi\Api\TokensV20210301Api;
use SellingPartnerApi\Model\TokensV20210301\CreateRestrictedDataTokenRequest;

class Store extends Backend
{
    /**
     * Store模型对象
     * @var \app\admin\model\Store
     */
    protected $model = null;
    protected $preExcludeFields = ['id', 'create_time', 'update_time'];
    protected $quickSearchField = ['id', 'title'];

    public function initialize()
    {
        parent::initialize();
        $this->model = new \app\admin\model\Store;
    }

    public function getOrder()
    {
        $storeName = '店铺名';
        $storeModel = new StoreModel();
        $store = $storeModel->where("title", $storeName)->find()->toArray();
        
        $conf = [
            'access_key'    => $store['spapi_access_key'], 
            'access_secret' => $store['spapi_access_secret'],
            'role_arn'      => $store['spapi_role_arn'], 
            'refresh_token' => $store['spapi_refresh_token'],
            'client_id'     => $store['spapi_client_id'], 
            'client_secret' => $store['spapi_client_secret'],
            
            'endpoint'      => $store['spapi_endpoint'],
            'marketplaceId' => $store['spapi_marketplaceid'],
            'asin'          => 'ASIN01',  
            'order_id'      => '123-1234567-1234567', 
        ];

        switch ($conf['endpoint']) {
            case 'NA':
                $endpoint = Endpoint::NA;
                break;
            case 'EU':
                $endpoint = Endpoint::EU;
                break;
            case 'FE':
                $endpoint = Endpoint::FE;
                break;
        }

        $connect = new Configuration([
            "lwaClientId" => $conf['client_id'],
            "lwaClientSecret" => $conf['client_secret'],
            "lwaRefreshToken" => $conf['refresh_token'],
            "awsAccessKeyId" => $conf['access_key'],
            "awsSecretAccessKey" => $conf['access_secret'],
            "endpoint" => $endpoint,
            "roleArn" => $conf['role_arn'],
        ]);

        // $res = $this->getOrderByOrderSn($connect, $conf['order_id'], false);
        $list = $this->getOrders($connect, $conf, false, 2, '2023-05-01 00:00:00');
    }

    // 1.获取单个订单信息
    public function getOrderByOrderSn($connect, $orderSn, $is_fbm = true)
    {
        $apiInstance = new OrdersV0Api($connect);
       
        $data_elements = null;
        if ($is_fbm) {
            $data_elements = ['buyerInfo', 'shippingAddress']; //PII
        }

        try {
            $result = $apiInstance->getOrder($orderSn, $data_elements);
            $result = json_decode($result, true);
            dd($result);

        } catch (Exception $e) {
            echo 'Exception when calling OrdersV0Api->getOrder: ', $e->getMessage(), PHP_EOL;
        }
    }

    // 2.获取订单列表
    public function getOrders($connect, $conf,  $is_fbm = true, $limit = 2, $stime)
    {
        $apiInstance = new OrdersV0Api($connect);
        $marketplace_ids = [$conf['marketplaceId']]; 
        $format = "Y-m-d\TH:i:s.\\0\\0\\0\\Z";
        $created_after = gmdate($format, strtotime($stime));

        try {
            if ($is_fbm) {
                $data_elements = ['buyerInfo', 'shippingAddress'];
                $fulfillment_channels = 'MFN';
            } else {
                $data_elements = null;
                $fulfillment_channels = 'AFN';
            }
            
            $result = $apiInstance->getOrders($marketplace_ids, $created_after, null, null, null, null, $fulfillment_channels, null, null, null, $limit, null, null, null, null, null, null, $data_elements);
            $result = json_decode($result, true);
            $list = $result['payload']['Orders'];
            foreach ($list as $key=>$item) {
                echo $item['AmazonOrderId'] . PHP_EOL;
                $result = $apiInstance->getOrderItems($item['AmazonOrderId']);
                // 将订单商品插入订单数组中
                $list[$key]['order_goods'] = $result['payload']['order_items'];

                // 可以遍历商品
                foreach ($list[$key]['order_goods'] as $k=>$v) {
                    //dd($v['item_tax']['currency_code']);
                }

            }
            echo '<pre>';
            var_dump(json_encode($list)); // 打印json结果
            exit;
           
        } catch (Exception $e) {
            echo 'Exception when calling OrdersV0Api->getOrders: ', $e->getMessage(), PHP_EOL;
        }
    }

二.订单数据格式
[
    {
        "AmazonOrderId": "123-1234567-1234567",
        "SellerOrderId": "123-1234567-1234567",
        "PurchaseDate": "2023-04-30T20:06:49Z",
        "LastUpdateDate": "2023-05-01T05:30:58Z",
        "OrderStatus": "Shipped",
        "FulfillmentChannel": "AFN",
        "SalesChannel": "Amazon.ca",
        "ShipServiceLevel": "Expedited",
        "OrderTotal": {
            "CurrencyCode": "CAD",
            "Amount": "88.88"
        },
        "NumberOfItemsShipped": 1,
        "NumberOfItemsUnshipped": 0,
        "PaymentMethod": "Other",
        "PaymentMethodDetails": [
            "Standard"
        ],
        "MarketplaceId": "A2EUQ1WTGCTBG2",
        "ShipmentServiceLevelCategory": "Expedited",
        "OrderType": "StandardOrder",
        "EarliestShipDate": "2023-05-01T06:59:59Z",
        "LatestShipDate": "2023-05-01T06:59:59Z",
        "IsBusinessOrder": false,
        "IsPrime": false,
        "IsPremiumOrder": false,
        "IsGlobalExpressEnabled": false,
        "IsReplacementOrder": false,
        "IsSoldByAB": false,
        "IsISPU": false,
        "IsAccessPointOrder": false,
        "ShippingAddress": {
            "City": "Toronto",
            "StateOrRegion": "Ontario",
            "PostalCode": "M4C 5S7",
            "CountryCode": "CA"
        },
        "BuyerInfo": {
            "BuyerEmail": "user@marketplace.amazon.ca"
        },
        "HasRegulatedItems": false,
        // 注意order_goods原本并不在此, 是通过 
        // $apiInstance->getOrderItems($AmazonOrderId), 获取后再放入的
        "order_goods": [
            {
                "ASIN": "ASIN001",
                "SellerSKU": "SKU001",
                "OrderItemId": "12345123451234",
                "Title": "goods title in amazon",
                "QuantityOrdered": 1,
                "QuantityShipped": 1,
                "ProductInfo": {
                    "NumberOfItems": 1
                },
                "ItemPrice": {
                    "CurrencyCode": "CAD",
                    "Amount": "88.88"
                },
                "ItemTax": {
                    "CurrencyCode": "CAD",
                    "Amount": "8.88"
                },
                "PromotionDiscount": {
                    "CurrencyCode": "CAD",
                    "Amount": "0.00"
                },
                "PromotionDiscountTax": {
                    "CurrencyCode": "CAD",
                    "Amount": "0.00"
                },
                "IsGift": false,
                "IsTransparency": false,
                "DeemedResellerCategory": "CA_TEST",
                "BuyerInfo": {}
            }
        ]
    },
    // 下面是其他订单
]