目录

  • 简介
  • 客户端的配置使用
  • 调用例子
    • 获取订单列表
    • 获取订单信息

简介

做跨境外贸的朋友应该都比较熟悉亚马逊了,我就不多介绍了。

亚马逊的卖家平台最近开通了新的API,即SP-API。最近由于一些业务逻辑,需要调用这个API,费了很多周折,在此进行记录。

以往,卖家中心提供的都是MWS接口,不过这个接口年头已久,跟不上时代的节奏了,因此亚马逊开发了新版的基于REST的接口。不得不说,REST接口要比原有的MWS接口好用的多,不过相应的也变得复杂了。

亚马逊开发者中心现在完全不提供MWS的接口的申请了,新入门的开发者必须调用新版的SP-API接口了。这对于我们这些调包侠造成了很大的困扰。

在完成我的业务逻辑时,我发现目前网上开源的python的sp-api的客户端还没有,而亚马逊也只提供了一个基本是全英文版的文档,在这里,因此我就自己动手搞了一个,目前客户端已上传至pypi,各位如有需要可以随意使用。不过如果目前的客户端难以满足您的业务逻辑,需要额外的技术支持,可以联系panhaoyu.site@outlook.com获取付费技术支持。

客户端的配置使用

客户端的使用比较简单,根随亚马逊的文档进行一系列的配置就可以使用了。需要说明的是,这个文档提供了中文版本,不过中文版本的很多翻译和网站实际是对应不上的,因此建议参考英文文档进行配置。这个文档介绍的比较详细了,此处不赘述了。

我的这个客户端的使用应该也是比较简单的,如下所示。只要输入进去相应的配置项,就可以启动了。
这个客户端的一大亮点是,可以支持类型提示,也可以直接解析亚马逊返回的JSON字符串。在采用PyCharm等现代IDE进行开发的时候,可以省去不少的麻烦。

from datetime import datetime
import sp_api_clients
endpoint = "https://sellingpartnerapi-eu.amazon.com"
marketplace_id = "A1F83G8C2ARO7P"refresh_token = ""
order_pk = 'xxx-xxxxxx-xxxxxxx'
role_arn = "arn:aws:iam::xxxxxxxxxxxx:role/wms_role"
aws_access_key = 'xxxxxxxxxxxx'
aws_secret_key = "xxxxx/xxxxxxxxxxxxxxxxxxxxx"
client_config = dict(role_arn=role_arn,endpoint=endpoint,marketplace_id=marketplace_id,refresh_token=refresh_token,aws_access_key=aws_access_key,aws_secret_key=aws_secret_key,
)
order_client = sp_api_clients.orders.OrdersClient(**client_config, use_cache=True)orders = order_client.getOrders(MarketplaceIds=[marketplace_id],CreatedAfter=datetime(2000, 1, 1).isoformat()).payload.Orders
assert len(orders) > 0
assert orders[0].AmazonOrderId == order_pk

调用例子

这里作为博客,我再补充几个API调用实例。这里提供我获取订单列表和获取订单详情的一些代码吧,直接在项目里copy出来的,可读性我就不保证了。

获取订单列表


def synchronize(self, days: int = 30):store = self.storelogger.info(f'Start synchronizing store {store.id}, auth={store.auth_id}, days={days}')orders_client = self.orders_clientmarket_place = self.market_placecreated_after = (datetime.now(tz=timezone.get_current_timezone()).date() - timedelta(days=days)).isoformat()market_place_ids = [p.market_place_id for p in market_places.get_by_endpoint(market_place.endpoint)]requested_orders: List[Order] = []part = orders_client.getOrders(MarketplaceIds=market_place_ids, CreatedAfter=created_after).payloadrequested_orders.extend(part.Orders)while part.NextToken is not None:part = orders_client.getOrders(MarketplaceIds=market_place_ids, CreatedAfter=created_after,NextToken=part.NextToken).payloadrequested_orders.extend(part.Orders)# TODO double-deck for loop is slow, pay for optimizationfor requested_order in requested_orders:order_form, created = OrderFormModel.objects.using(self.using).get_or_create(order_id=requested_order.AmazonOrderId, store=store)order_form: OrderFormModelorder_form.transaction_status = self.ORDER_STATUS_MAP[requested_order.OrderStatus]order_form.purchased_datetime = self.parse_datetime(requested_order.PurchaseDate)order_form.order_earliest_ship_datetime = self.parse_datetime(requested_order.EarliestShipDate)order_form.order_latest_ship_datetime = self.parse_datetime(requested_order.LatestShipDate)order_form.order_earliest_delivery_datetime = self.parse_datetime(requested_order.EarliestDeliveryDate)order_form.order_latest_delivery_datetime = self.parse_datetime(requested_order.LatestDeliveryDate)order_form.order_updated_datetime = timezone.now()requested_price = requested_order.OrderTotalif requested_price is not None:order_form.total_price_unit = self.CURRENCY_MAP.copy() \.setdefault(requested_price.CurrencyCode, OrderFormModel.Currency.UNKNOWN)order_form.total_price_value = float(requested_price.Amount)while True:try:self.synchronize_order_form(order_form)self.synchronize_finance(order_form)breakexcept Exception as e:logger.exception(e)order_form.save()

获取订单信息


def synchronize_order_form(self, order_form: OrderFormModel):logger.info(f'Start synchronizing order {order_form.id}, id={order_form.order_id}')orders_client = self.orders_clientitem_client = self.item_clientmarket_place = self.market_placerequested_items: List[OrderItem] = []part = orders_client.getOrderItems(order_form.order_id).payloadrequested_items.extend(part.OrderItems)while part.NextToken is not None:part = orders_client.getOrderItems(order_form.order_id).payloadrequested_items.extend(part.OrderItems)for requested_item in requested_items:catalog_item = item_client.getCatalogItem(requested_item.ASIN, market_place.market_place_id).payloadtry:image_urls = [attr.SmallImage.URL for attr in catalog_item.AttributeSets]except (TypeError, AttributeError):image_urls = []CommodityModel.objects.using(self.using).create(order_form=order_form,name=requested_item.Title,  # 'Ledmasters Smoked Glass Pendant Light ... Industrial Ceiling'sku=requested_item.SellerSKU,  # 'iuu9iop455465'external_id=requested_item.ASIN,  # 'B01N7M3NWI'count=requested_item.ProductInfo.NumberOfItems,image_urls='\n'.join(image_urls),)

如果这个客户端难以满足您的业务逻辑,可以联系panhaoyu.site@outlook.com获取付费技术支持。

这篇文章同时发布于我自己的博客。

亚马逊 新版卖家中心 销售伙伴API SP-API SELLING-PARTNER-API Python SDK 客户端 接口调用相关推荐

  1. 亚马逊 新版卖家中心 销售伙伴API(amazon selling partner API)开发人员指南

    文章目录 关于本指南 术语 什么是销售合作伙伴 API? 主要特点 全球应用 销售合作伙伴 API 端点 市场 ID 值 注册为开发者 检查您注册为开发人员的请求的状态 创建和配置 IAM 策略和实体 ...

  2. 查看详细的退货信息!亚马逊在卖家中心推出新页面!

    亚马逊欧洲站发布公告称亚马逊在卖家中心推出了一个新页面,为卖家提供详细的退货信息,以下是公告内容: 我们在卖家中心推出了一个新页面,为卖家提供详细的退货信息. 现在卖家可以查看每个退货订单,其中包含有 ...

  3. 亚马逊云科技赋能合作伙伴 云销售逆流上行

    在不确定的经济环境中,美国拉斯维加斯迎来全球云计算"世界杯":亚马逊云科技re:Invent 2022大会.现场5万多,线上30多万全球云计算行业专家.企业用户和合作伙伴聚集一堂, ...

  4. 英国脱欧,亚马逊FBA卖家需要重视这些事

    品牌注意 随着英国脱欧对商标法的影响,欧盟商标将不再对英国有效,品牌所有者应在英国和欧盟IP办事处拥有单独的商标,以在整个英国和欧盟的Amazon Brand Registry中受到保护. 由于UK ...

  5. vc messagebox怎么选择选项_亚马逊VC卖家被迫转向第三方卖家,下一步要怎么做?...

    作为亚马逊供应商,本周一你是否有照常收到亚马逊采购订单? 据此前报道,亚马逊在最近突然停止了多家VC卖家订单.如果你也没收到订单,相信你现在内心肯定有非常多的疑惑:这到底是怎么回事?自己该怎么做?是不 ...

  6. 千牛怎么注销卖家店铺_新店铺怎么拥有亚马逊购物车?亚马逊小卖家如何尽快获得黄金购物车?...

    我做跨境电商也有六年的时间了,在电商这个行业也有自己的一些经验.经验也许没有其他大卖家丰富,但会将我知道的都进行分享.如果有不懂得亚马逊问题可以+我(V:772024802).我这里给大家安排一堂直播 ...

  7. 亚马逊新手卖家如何快速出单必掌握的运营技巧分享?

    对于一个新开店铺(或者说账号)来说,前90天是卖家运营的黄金时段,亚马逊会给予一定的流程扶持.因此,这段时间也被称之为"亚马逊黄金90天".本周亚马逊运营知识时间,船长BI将围绕& ...

  8. 亚马逊FBA卖家最赚钱的产品是什么?

    亚马逊是世界上最赚钱的线上平台之一,第三方条形码供应商Bar Codes Talk通过数据发现,亚马逊每小时平均收入超过过1,700万美元,占美国电子商务市场份额的50%,占全球电子商务市场的13%, ...

  9. 全球与中国亚马逊网络服务渠道合作伙伴市场现状及未来发展趋势

    本文研究全球及中国市场亚马逊网络服务渠道合作伙伴现状及未来发展趋势,侧重分析全球及中国市场的主要企业,同时对比北美.欧洲.中国.日本.东南亚和印度等地区的现状及未来发展趋势. 根据QYR(恒州博智)的 ...

最新文章

  1. matlab面向对象排序,MATLAB面向对象编程学习笔记(一)
  2. windows系统解决github.com访问超时
  3. 关于“让我们基于Node.js创建一个Web应用:记事本(三)”
  4. 怎么把向上滑动取消_美瞳滑片是什么意思?为什么会滑片?怎么解决?
  5. Wannafly2016-12-27 SPOJ-INTSUB 数学
  6. 骑马与砍杀服务器修复,骑马与砍杀21.3.1公共版和热修说明 修复联机模式
  7. 计算机应用基础离线考核,东师2016年秋季《计算机应用基础》期末考核离线作业...
  8. PyTorch——解决报错“RuntimeError: running_mean should contain *** elements not ***”
  9. 阿里云centos远程连接mysql
  10. PHP_框架储备资料
  11. jsp mysql连接池 回收_mysql连接池连接JSP
  12. android shell强制删除文件夹_手机文件夹都是英文,看不懂、又不敢删?教你如何辨别、释放内存...
  13. CentOS7 安装ffmpeg
  14. php yof框架特点_PHP编程语言的特点
  15. java orb 是什么_什么是ORB
  16. Mysql_DTL_数据库事务_03
  17. chatgpt平替,清华chatglm本地化部署教程(aigc大模型风口,校招找工作必备),包含weiui部署,api部署,对话框部署
  18. 联想微型计算机设置从u盘启动,联想笔记本设置u盘为第一启动项教程
  19. 快速查看Mac下软件的所有快捷键— CheatSheet
  20. Java swing的功能测试类库 FEST-Swing

热门文章

  1. css 块级元素与内联元素
  2. android 辅助服务自动右滑,我的手机启用辅助功能后怎么滑动屏幕,是什么盲人的什么功能,怎么取消?...
  3. 虽然计算机应用的范围越来越广,《高考语文一本通》最新版本(全国卷适用) 第一部分 语言文字运用...
  4. 音视频开发开发核心知识+新手入门必看基础知识
  5. 基于android的防抖音直播,基于vue+uniapp直播项目实现uni-app仿抖音/陌陌直播室功能...
  6. 基于iptables的SNAT+DNAT+docker服务器集群搭建
  7. 久远谦长python笔试_数据科学家_数据科学家招聘_数据科学家招聘久远谦长(北京)技术服务有限公司...
  8. html中字体移动怎么设置彩铃,电话彩铃怎么设置
  9. 盛世昊通:汽车行业资本入局不断,行业变局需考量
  10. 基于TCP或UDP协议的应用层协议