基本思路:

1. 拉取sdk

2. createFeedDocument -> uploadFeedDocument -> createFeed

3. getOrder查看订单状态

实现过程:

1.github找到一个比较好用的sdk

进入项目目录,运行

composer require double-break/spapi-php

2.  执行流程,createFeedDocument -> uploadFeedDocument -> createFeed

直接上代码:

    public static function shipped($get, $post) {$brushData = empty($post['data']) ? array() : json_decode(stripslashes($post['data']), true);$token = empty($brushData['token']) ? [] : $brushData['token'];$xml = empty($brushData['xml']) ? '' : $brushData['xml'];$host = empty($brushData['host']) ? '' : $brushData['host'];if (empty($token)) {$result = array('state' => '301','info' => '缺少必要参数,token');}if (empty($brushData['platformOrder'])) {$result = array('state' => '302','info' => '缺少必要参数,platformOrder');}if (empty($host)) {$result = array('state' => '303','info' => '缺少必要参数,host');}if (empty($token['spRefreshToken']) || empty($token['spClientId']) || empty($token['spClientSecret']) ||empty($token['spAccessKeyId']) || empty($token['spSecretKey']) || empty($token['spRoleArn']) || empty($token['spRegion'])) {$result = array('state' => '304','info' => 'token缺少必要参数,spRefreshToken/spClientId/spClientSecret/spAccessKeyId/spSecretKey/spRoleArn/spRegion');}if (empty($xml)) {$result = array('state' => '305','info' => '标记内容为空');}if (!empty($result)) return $result;include ROOT_DIR . '/vendor/autoload.php';/** The Setup **/$config = ['http' => ['verify' => true,'debug' => false],'refresh_token' => $token['spRefreshToken'],'client_id' => $token['spClientId'],'client_secret' => $token['spClientSecret'],//STS: Keys of the IAM role which are needed to generate Secure Session// (a.k.a Secure token) for accessing and assuming the IAM role'access_key' => $token['spAccessKeyId'],'secret_key' => $token['spSecretKey'],'role_arn' => $token['spRoleArn'] ,//API: Actual configuration related to the SP API :)'region' => $token['spRegion'],'host' => $host];//Create token storage which will store the temporary tokens$tokenStorage = new DoubleBreak\Spapi\SimpleTokenStorage('./aws-tokens');//Create the request signer which will be automatically used to sign all of the//requests to the API$signer = new DoubleBreak\Spapi\Signer();//Create Credentials service and call getCredentials() to obtain//all the tokens needed under the hood$credentials = new DoubleBreak\Spapi\Credentials($tokenStorage, $signer, $config, $token['account']);$cred = $credentials->getCredentials();// content type of the feed data to be uploaded.$contentType = 'text/xml; charset=UTF-8';// create feed document$feedClient = new \DoubleBreak\Spapi\Api\Feeds($cred, $config);$response = $feedClient->createFeedDocument(["contentType" => $contentType]);$payload = $response;$result = (new \DoubleBreak\Spapi\Helper\Feeder())->uploadFeedDocument($payload,$contentType,$xml);if ($result === 'Done') {$body = ['feedType' => 'POST_ORDER_FULFILLMENT_DATA',"marketplaceIds" => [$token['marketplace_id']],"inputFeedDocumentId" => $payload['feedDocumentId']];$res = $feedClient->createFeed($body);if (!empty($res['feedId'])) {return array('state' => 200, 'info' => $res);}} else {return array('state' => 30, 'info' => 'xml文件上传失败');}}

3. 下一次标记时查询订单状态,若订单状态已经变成Shipped,则表示上一次标记成功,不再进行标记,否则重试。

查询订单方法:

    public static function getOrder($get, $post) {$brushData = empty($post['data']) ? array() : json_decode(stripslashes($post['data']), true);$token = empty($brushData['token']) ? [] : $brushData['token'];$host = empty($brushData['host']) ? '' : $brushData['host'];if (empty($token)) {$result = array('state' => '301','info' => '缺少必要参数,token');}if (empty($brushData['platformOrder'])) {$result = array('state' => '302','info' => '缺少必要参数,platformOrder');}if (empty($host)) {$result = array('state' => '303','info' => '缺少必要参数,host');}if (empty($token['spRefreshToken']) || empty($token['spClientId']) || empty($token['spClientSecret']) ||empty($token['spAccessKeyId']) || empty($token['spSecretKey']) || empty($token['spRoleArn']) || empty($token['spRegion'])) {$result = array('state' => '304','info' => 'token缺少必要参数,spRefreshToken/spClientId/spClientSecret/spAccessKeyId/spSecretKey/spRoleArn/spRegion');}if (!empty($result)) return $result;include ROOT_DIR . '/vendor/autoload.php';/** The Setup **/$config = ['http' => ['verify' => true,'debug' => false],'refresh_token' => $token['spRefreshToken'],'client_id' => $token['spClientId'],'client_secret' => $token['spClientSecret'],//STS: Keys of the IAM role which are needed to generate Secure Session// (a.k.a Secure token) for accessing and assuming the IAM role'access_key' => $token['spAccessKeyId'],'secret_key' => $token['spSecretKey'],'role_arn' => $token['spRoleArn'] ,//API: Actual configuration related to the SP API :)'region' => $token['spRegion'],'host' => $host];//Create token storage which will store the temporary tokens$tokenStorage = new DoubleBreak\Spapi\SimpleTokenStorage('./aws-tokens');//Create the request signer which will be automatically used to sign all of the//requests to the API$signer = new DoubleBreak\Spapi\Signer();//Create Credentials service and call getCredentials() to obtain//all the tokens needed under the hood$credentials = new DoubleBreak\Spapi\Credentials($tokenStorage, $signer, $config, $token['account']);$cred = $credentials->getCredentials();$orderClient = new DoubleBreak\Spapi\Api\Orders($cred, $config);$res = $orderClient->getOrder($brushData['platformOrder']);$result = ['state' => 200,'info' => $res];return $result;}

实现过程就是这么简单,希望能帮到有需要的人。

附加参数格式:

1. shipped方法传参的token参数:

{"account":"xxx","merchant_id":"xxx","marketplace_id":"xxx","shorthand_code":"DE","accountId":"xxx","authorizeState":1,"expireState":null,"spAccessKeyId":"xxx","spClientId":"xxx","spClientSecret":"a9059aff31f3fab2a96ed4fb851a0f9bfb04e859d2483266ca01c7781659b84f","spRefreshToken":"xxx","spRegion":"eu-west-1","spRoleArn":"arn:aws:iam::429211419775:role\/PlsSellingPartnerAPIRole","spSecretKey":"xxx"
}

2. xml模版:

<?xml version="1.0" encoding="UTF-8"?><AmazonEnvelope><Header><DocumentVersion>1.02</DocumentVersion><MerchantIdentifier></MerchantIdentifier></Header><MessageType>OrderFulfillment</MessageType><PurgeAndReplace>true</PurgeAndReplace><Message><MessageID>1</MessageID><OrderFulfillment><AmazonOrderID>305-0942001-3129934</AmazonOrderID><FulfillmentDate>2022-08-29T03:15:59.000Z</FulfillmentDate><FulfillmentData><CarrierName>GLS</CarrierName><ShippingMethod></ShippingMethod><ShipperTrackingNumber>103389001671</ShipperTrackingNumber></FulfillmentData><Item><AmazonOrderItemCode>33520471730635</AmazonOrderItemCode><Quantity>1</Quantity></Item></OrderFulfillment></Message></AmazonEnvelope>

3. 官方文档的流程 Feeds API v2021-06-30 Use Case Guide

4. sdk需要修改或替换的地方:
4.1》vendor/guzzlehttp/guzzle/src/functions.php 默认linux系统,可以改下同时支持window和linux运行

function debug_resource($value = null)
{if (is_resource($value)) {return $value;} elseif (defined('STDOUT')) {return STDOUT;}$agent = $_SERVER['HTTP_USER_AGENT'];if (strpos($agent, "Window") === false) {return fopen('php://output', 'w');} else {return fopen('php://stdout','w');}
}

4.2> vendor/double-break/spapi-php/src/Credentials.php
vendor/double-break/spapi-php/src/SimpleTokenStorage.php

两个文件适当修改以便支持多账号使用(原SDK只使用单独一个帐号使用), 我的方式是将写入和读取aws-tokens文件写成多维数组,用账号名为key值。

附加api返回格式:

1. createFeed请求的数据:
{"feedType":"POST_ORDER_FULFILLMENT_DATA","marketplaceIds":["ATVPDKIKX0DER"],"inputFeedDocumentId":"amzn1.tortuga.3.d1dbeb92-b475-46d4-946c-491f46724dc0.TJG1LXE67GBUR"}

2. createFeed返回的数据:
Array ( [feedId] => 204332019186 )

3. getFeed返回的结果:
Array ( [processingEndTime] => 2022-07-13T10:26:53+00:00 [processingStatus] => DONE [marketplaceIds] => Array ( [0] => ATVPDKIKX0DER ) [feedId] => 204332019186 [feedType] => POST_ORDER_FULFILLMENT_DATA [createdTime] => 2022-07-13T10:26:13+00:00 [processingStartTime] => 2022-07-13T10:26:28+00:00 [resultFeedDocumentId] => amzn1.tortuga.3.9f6c8425-58a5-4031-851c-65142aaafa75.T3JQMGCAVP75PJ )

4. getFeedDocument返回:
Array ( [feedDocumentId] => amzn1.tortuga.3.21b9cb2c-f796-4d59-b37a-2b7b60121f23.TFG3R55E0799T [url] => https://tortuga-prod-na.s3-external-1.amazonaws.com/%2FNinetyDays/amzn1.tortuga.3.2e5b624c-93ee-475b-baee-5754483f3a5c.T2YQZUNM2Y0QBM?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20220713T102852Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Credential=AKIA5U6MO6RAJ4ZS7WYA%2F20220713%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Signature=4e978cd0907b625e21c6b05c1b53cb3d912d3ed34244561d8fd73991147ce84a )

附加站点节点url配置:

array('CA' => array('region' => 'us-east-1','marketplace_id' => 'A2EUQ1WTGCTBG2','service_url_report' => 'https://sellingpartnerapi-na.amazon.com'), //加拿大'US' => array('region' => 'us-east-1','marketplace_id' => 'ATVPDKIKX0DER','service_url_report' => 'https://sellingpartnerapi-na.amazon.com'), //美国'MX' => array('region' => 'us-east-1','marketplace_id' => 'A1AM78C64UM0Y8','service_url_report' => 'https://sellingpartnerapi-na.amazon.com'), //墨西哥'BR' => array('region' => 'us-east-1','marketplace_id' => 'A2Q3Y263D00KWC','service_url_report' => 'https://sellingpartnerapi-na.amazon.com'), //巴西'ES' => array('region' => 'eu-west-1','marketplace_id' => 'A1RKKUPIHCS9HS','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //西班牙'UK' => array('region' => 'eu-west-1','marketplace_id' => 'A1F83G8C2ARO7P','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //英国'GB' => array('region' => 'eu-west-1','marketplace_id' => 'A1F83G8C2ARO7P','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //英国'FR' => array('region' => 'eu-west-1','marketplace_id' => 'A13V1IB3VIYZZH','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //法国'NL' => array('region' => 'eu-west-1','marketplace_id' => 'A1805IZSGTT6HS','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //荷兰'DE' => array('region' => 'eu-west-1','marketplace_id' => 'A1PA6795UKMFR9','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //德国'IT' => array('region' => 'eu-west-1','marketplace_id' => 'APJ6JRA9NG5V4','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //意大利'SE' => array('region' => 'eu-west-1','marketplace_id' => 'A2NODRKZP88ZB9','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //瑞典'PL' => array('region' => 'eu-west-1','marketplace_id' => 'A1C3SOZRARQ6R3','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //波兰'EG' => array('region' => 'eu-west-1','marketplace_id' => 'ARBP9OOSHTCHU','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //埃及'TR' => array('region' => 'eu-west-1','marketplace_id' => 'A33AVAJ2PDY3EV','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //土耳其'SA' => array('region' => 'eu-west-1','marketplace_id' => 'A17E79C6D8DWNP','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //沙特阿拉伯'AE' => array('region' => 'eu-west-1','marketplace_id' => 'A2VIGQ35RCS4UG','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //阿拉伯联合酋长国'IN' => array('region' => 'eu-west-1','marketplace_id' => 'A21TJRUUN4KGV','service_url_report' => 'https://sellingpartnerapi-eu.amazon.com'), //印度'SG' => array('region' => 'us-west-2','marketplace_id' => 'A19VAU5U5O7RUS','service_url_report' => 'https://sellingpartnerapi-fe.amazon.com'), //新加坡'AU' => array('region' => 'us-west-2','marketplace_id' => 'A39IBJ37TRP1C6','service_url_report' => 'https://sellingpartnerapi-fe.amazon.com'), //澳大利亚'JP' => array('region' => 'us-west-2','marketplace_id' => 'A1VC38T7YXB528','service_url_report' => 'https://sellingpartnerapi-fe.amazon.com') //日本),

亚马逊SP-API自发货标记发货对接相关推荐

  1. 对接亚马逊 ads api( Amazon Advertising API) 第三章:对接 Sponsored Products

    目录 官方下载报告 demo 需求 对接 Sponsored Products 的 reports 报告 1. 获取 profileId 2. 请求 report 3. 获取 report 4. 获取 ...

  2. 亚马逊常用API接口,亚马逊国际获得AMAZON商品详情 API 返回值说明

    为了进行电商平台亚马逊的API开发,首先我们需要做下面几件事情. 1)开发者注册一个账号 2)然后为每个淘宝应用注册一个应用程序键(App Key) . 3)下载亚马逊API的SDK并掌握基本的API ...

  3. 亚马逊商品详情API接口-(item_get-获得AMAZON商品详情接口),亚马逊详情API接口

    一.亚马逊商品详情API接口-(item_get-获得AMAZON商品详情接口),亚马逊详情API接口可以获取到商品价格,商品库存,商品销量,商品ID,商品图片,商品sku属性,sku详情,sku图片 ...

  4. Oracle 抄袭亚马逊的 API 是侵权吗?

    那么,Oracle 侵犯了亚马逊的版权吗? 作者 | CHARLES DUAN 译者 | 弯月,责编 | Elle 出品 | CSDN(ID:CSDNnews) 以下为译文: 美国最高法院将在今年初审 ...

  5. 亚马逊广告api v2版php扩展库

    概述 easy-amazon-advertising easy-amazon-advertising 是一个开源的非官方的亚马逊广告业务sdk. 环境需求 easy-amazon-advertisin ...

  6. 星淘惠跨境:亚马逊SP广告是什么?SP广告有什么作用

    亚马逊卖家通过会采用广告投放进行推广,因为卖家需要通过广告获得更高的流量以及销量.亚马逊SP广告就是按点击付费的广告. 亚马逊广告的作用有哪些? 提升关键词排名 卖家可通过广告累积出单量,出单量积累到 ...

  7. 对接亚马逊 ads api( Amazon Advertising API) 第一章:申请授权

    目录 1.申请亚马逊开发者账号 1.1.登录/注册,进入页面,并点击右上角的登录 1.2.登录或者注册亚马逊开发者账号 1.3.新建security profile 1.3.1.在菜单栏找到 logi ...

  8. 关于亚马逊MWS API 看这一篇就够了

    关于亚马逊MWS API 看这一篇就够了 文章目录 关于亚马逊MWS API 看这一篇就够了 献给那些刚接触亚马逊MWS API的小白们 一.什么是MWS API 1.MWS API能为我们做什么 2 ...

  9. 亚马逊Amazon SP-API注册申请和授权对接开发和亚马逊SP-API开发人员注册资料的注意事项,PII申请的事项

    关于亚马逊Amazon SP-API注册申请和授权对接开发和亚马逊SP-API开发人员注册资料的注意事项, 以及PII申请的事项,我简单聊几句吧. 不聊注册过程什么的,网上这类文章太多了,只说几个关键 ...

  10. 跨境电商亚马逊erp规避跟卖自发货铺货,数据更安全

    现在越来越多的跨境电商用户想拥有一套属于自己的自发货铺货ERP系统,但是众所周知,开发一套的成本太高,而且找不到很专业的技术员去开发,那么,我们提供的ERP私有化部署,成本低,你需要的投入的是一个服务 ...

最新文章

  1. CentOS6.5下做DNS服务器
  2. 如何训练大学生的工程实战能力
  3. ibatis解决sql注入问题 .
  4. python中os.path.isdir()等函数的作用及用法
  5. 你发这些什么目的_吸引女生冷知识:朋友圈发照片的“潜规则”,男生要懂
  6. 重温C++之“strcpy_s与strcpy的比较”
  7. 魅族15无法连接计算机,还在为数据丢失而烦恼?魅族15告诉你什么叫做碎屏无忧...
  8. 2017.8.5 One-Dimensional 思考记录
  9. java annotations详解_Java Annotations详解
  10. Mybatis中#{}与${}的使用
  11. 南华大学计算机专业导师排名,南华大学研究生导师介绍:左国平-中公研招网...
  12. html reset 无效,HTML中的input type=reset标签失效(不起作用)的可能原因。
  13. 如何在win7下安装XP系统?
  14. 李彦宏对话IMF总裁拉加德:缓解B端焦虑,要看AI这道主菜味道如何
  15. Java调用有道翻译API包括APPID/密钥地址注册
  16. 北航计算机学院复试专业课科目,2018北航自招复试经历总结
  17. 1、ubuntu 安装docker
  18. 抖音企业号源码部署搭建
  19. python计算化学浓度_python 计算化学
  20. 08.区块链的应用有什么?区块链将带来什么变革?

热门文章

  1. 阿里云-云开发平台存储篇——给应用接上后端存储能力
  2. ubuntu16.04+Tesla P100+cuda+anaconda+cudnn+tensorflow:从0开始安装
  3. 转载:云计算必将极大影响未来--云泉
  4. android基本布局-TableLayout_表格布局
  5. 计算机网络波动大,网络不稳定怎么办,小编教你电脑网络不稳定怎么办
  6. 兔子与狐狸c语言,狐狸和兔子
  7. 如何开发app软件?程序员揭秘你还没听过的1种方法
  8. java imageio_Java使用imageio 读写图像
  9. Reporting报表开发知识汇总[个人原创]
  10. yum命令 启用仓库_技术|如何列出在 Linux 上已启用/激活的仓库