企业对接Walmart平台API流程 On-request Reports API(二)

news2024/11/26 0:39:04

对接On-request Reports API

    • 1、对接指南
      • 1.1 报告生成时间
      • 1.2 报告保留期
      • 1.3 请求限制
      • 1.4 报告请求工作流
      • 如何申请报告
        • 第 1 步:申请取消报告
        • 第 2 步:获取报表可用性状态
        • 第 3 步:下载报告 URL
    • 2、代码实现
      • 2.1、获取访问API的token
      • 2.2、构建公共请求方法
      • 2.3 编写demo测试创建报告API

1、对接指南

1.1 报告生成时间

请求报告后,需要 15 到 45 分钟才能生成,然后可供下载。

1.2 报告保留期

您请求的报告将保留 30 天。您可以使用报告的请求 ID 请求 30 天的报告,无需请求新的报告。

1.3 请求限制

您每小时可以为每种报告类型请求一份报告。虽然您可以同时请求多种报告类型,但每小时只能为每种报告类型发出一次请求。

1.4 报告请求工作流

  • 使用 创建报告请求 API 创建报告请求。对于每个请求,系统都会创建一个requestId,卖家可以使用该 ID 来跟踪所请求报告的状态。
  • 使用报告请求状态 API 检查报告请求提交状态,该 API 返回有关报告状态的所有详细信息。
    报表状态为READY后,您现在可以使用下载报表 URL API 下载报表。
  • (可选): 您还可以使用获取所有报告请求 API 获取所有报告请求的列表。
  • (可选):如果使用创建订阅 API设置通知:当您收到报告已准备就绪的通知时,可以使用下载报表 URL API 检索它以供下载。
    在这里插入图片描述

如何申请报告

第 1 步:申请取消报告

若要请求项目报告,请调用创建报告请求 API。

例如,调用v3/reports/reportRequests?reportType=REPORT-TYPE&reportVersion=v1

REPORT-TYPE替换为您需要请求的报告类型。

指定所有必需参数的值:

reportType– 指定您要请求的报告(例如 reportType=CANCELLATION)。
reportVersion– 指定报告版本(例如 reportVersion=v1)。
成功后,API 调用将返回一个 requestId ,您可以使用它来了解报告是否已准备好下载,以及请求的状态(例如 RECEIVEDINPROGRESS)。它还返回requestSubmissionDate, UTC 格式的值:YYYY-MM-DDTHH:mm:ssZ

您还可以设置通知,以便在报告状态为 READY 时触发。要设置通知,请参阅通知。

第 2 步:获取报表可用性状态

若要了解报告是否已准备好下载,请调用报告请求状态 API 以检索报告请求状态。当状态为READY时,您可以下载报告。API 只能检索过去 30 天内创建的请求的详细信息。

例如,使用requestId进行调用。v3/reports/reportRequests?{requestId}

成功后,此调用将检索指定requestId的状态(例如 SUBMITTEDINPROGRESSREADYERROR)。

第 3 步:下载报告 URL

若要下载请求的报告,请调用下载报告 URL API”,并指定“由报告状态通知发送”或从报告请求状态 API 调用发送的“链接”。requestID

例如,调用/v3/reports/downloadReport?requestId={requestId}

成功后,您将收到用于下载报告的 URL 以及 URL 过期时间:

	downloadURL– 用于下载报告的 URL。
	downloadURLExpirationTime– 下载 URL 过期时间。

为避免错误,请务必检查以下情况是否不适用于您的请求:

请求已过期。在这种情况下,报告不再可用。
如果报告尚不可用,请检查状态是否为INPROGRESS
可能是系统错误或数据错误。
如果 无效。请确保您拥有正确的 requestId,或者它在 30 天后仍未过期。

2、代码实现

2.1、获取访问API的token

public static String getAccessToken(String appKey, String appSecret) {
        String authorization = getAuthorization(appKey, appSecret);
        Map<String, String> headers = new HashMap<>();
        headers.put("Authorization", authorization);
        headers.put("WM_SVC.NAME", "Shop name");
        headers.put("WM_QOS.CORRELATION_ID", IdUtil.randomUUID());
        HttpResponse response = HttpRequest
                .post("https://marketplace.walmartapis.com/v3/token")
                .addHeaders(headers)
                .body("grant_type=client_credentials", "application/x-www-form-urlencoded")
                .execute();
        JSONObject jsonObject = JSONUtil.parseObj(response.body());
        return jsonObject.getStr("access_token");
    }

2.2、构建公共请求方法

public static String request(Method method,
                                 String url,
                                 Map<String, Object> paramMap,
                                 String jsonBody) {

        String appkey = "xxxxxx-xxxxxxxx8cb";
        String appSecret = "AOqxxxxxxxxxxxxxxxxxxxxxxbo";
        String accessToken = getAccessToken(appkey, appSecret);

        //appkey和appSecret换成自己的
        Map<String, String> headers = getHeaders(method, accessToken);
        // get请求拼接参数
        if (paramMap != null && paramMap.size() > 0) {
            if (url.indexOf("?") > 0) {
                url = url + "&" + HttpUtil.toParams(paramMap);
            } else {
                url = url + "?" + HttpUtil.toParams(paramMap);
            }
        }
        HttpResponse resp;

        if (method == Method.POST) {
            resp = HttpRequest.post(url)
                    .addHeaders(headers)
                    .body(jsonBody)
                    .execute();

        } else if (method == Method.GET) {
            resp = HttpRequest.get(url)
                    .addHeaders(headers)
                    .execute();
        } else {
            String msg = "仅支持GET 和POST请求";
            log.error(msg);
            return msg;
        }

        if (HttpStatus.HTTP_OK == resp.getStatus()) {
            log.info("接口响应数据response.body():{}", resp.body());
            return resp.body();
        } else {
            log.error("调用Walmart API 错误");
            return "调用Walmart API 错误";
        }
    }

2.3 编写demo测试创建报告API

 public static void main(String[] args) {


        String url = "https://marketplace.walmartapis.com/v3/reports/reportRequests";
        Map<String, Object> param = new HashMap<>();
        param.put("reportType", "ITEM");
        param.put("reportVersion", "v4");
        //1、把你想要展示到报告中的字段都可以往里面写
        //字段网址:https://developer.walmart.com/doc/us/mp/us-mp-onrequestreports/
        List<String> columns = Arrays.asList("SKU", "Item ID", "Product Name",
                "Price", "Lifecycle Status", "Publish Status", "Status Change Reason",
                "Average Rating", "Shelf Name");
        //2、添加过滤条件,这里以过滤 Publish Status = PUBLISHED为例子
        JSONObject statusFilter = new JSONObject();
        statusFilter.set("type", "enumFilter")
                .set("columnName", "Publish Status")
                .set("values", new String[]{"PUBLISHED"});
        //2.1、如果要过滤其他条件自行添加。比如过滤 10<=price<=1000
        JSONObject priceFilter = new JSONObject();
        priceFilter.set("type", "rangeFilter")
                .set("columnName", "Price")
                .set("from", "10")
                .set("to", "1000");
        //2.2、把上面所有filter放到filters集合
        JSONArray rowsFilters = new JSONArray();
        rowsFilters.add(statusFilter);
        rowsFilters.add(priceFilter);
        //3、构建body参数,把字段和过滤条件加进来
        JSONObject jsonBody = new JSONObject();
        jsonBody.set("excludeColumns", columns);
        jsonBody.set("rowFilters", rowsFilters);
        log.info("请求参数:{}" + jsonBody);
        String response = request(Method.POST, url, param, JSONUtil.toJsonStr(jsonBody));
        log.info("response:{}", response);
    }

创建报告API调用成功,返回requestId
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1494218.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【记录】IDA|IDA设置text view为默认,并解决IDA7.6打开新固件卡顿的问题

版本&#xff1a;IDA Pro 7.6 Graph View&#xff08;控制流视图&#xff09;其实我真的看得很少&#xff0c;因为遇到分析难题时总是是因为间接调用&#xff0c;它根本分析不出来。但是一开IDA它就自动分析这个特别卡。所以今天想彻底解决一下&#xff0c;让默认打开为Text V…

day7-网络编程

1>基于UDP的网络聊天室 Ser.c #include <myhead.h> #define SER_IP "10.211.55.9" // 服务器IP #define SER_PORT 9999struct user {char usrName[20];struct sockaddr_in cin; }; int main(int argc, char const *argv[]) {// 1.创建用于监听的套接字int…

2024-3-6-数据库作业

作业&#xff1a;数据库操作的增、删、改完成 &#xff08;目前只能实现静态管理&#xff09; 源代码&#xff1a; #include <myhead.h> void do_add(sqlite3 *ppDb) {char *errmsg NULL;char sql[128] "insert into Worker values(1001,小张,15000);";//…

《中学综合素质》黄金卷(二)

2.对下图漫画描述不正确的是&#xff08;A &#xff09;。 A.忽视了平等待生 B.忽视了学生的个性发展 C.忽视了学生的差异性 D.违背了素质教育观 8.“任何组织或者个人不得隐匿、毁弃、非法删除未成年人的信件、日记、电子邮件或者其 他网络通讯内容”&#xff0c;对照《中华…

离散数学例题——3.计数和集合论(集合与二元关系)

幂集与子集数目 集合运算 集合的证明 集合构建符号证明 用集合成员表证明 用集合运算定律证明 无限集、等势、无限可数集和无限不可数集的基数 关系的定义、个数 关系的表示 关系的运算 使用矩阵运算实现关系的运算 关系的证明 关系的性质 自反性和反自反性&#xff08;矩阵对…

大唐杯学习笔记:Day5

1.1 小区搜索 搜索流程 PLMN选择 自动模式&#xff1a;UE根据NAS的请求或自主地向NAS报告可用的PLMN 手动模式&#xff1a;通过手动选择一个可用的VPLMN获取正常服务 频点选择 5G NR中,3GPP主要指定了两个频率范围,一个是6GHZ以下,另一个是毫米波,分别称之为FR1和FR2。 N…

CorelDRAW Graphics Suite2024订阅版费用与永久版的区别

CorelDRAW Graphics Suite的订阅版是一种按周期付费的软件使用模式&#xff0c;允许用户以一定的费用在一段时间内访问和使用CorelDRAW Graphics Suite的全部或部分功能。这种模式通常不涉及软件的所有权转让&#xff0c;而是提供使用权。 CDR2024绿色版下载链接: https://pan…

显示高考天数倒计时——vba实现

以下代码实现高考倒计时&#xff1a; Sub 高考倒计时() 高考日期 CDate("06,07," & Year(Date)) If Date > 高考日期 Then高考日期 CDate("06-07-" & Year(Date) 1) End If 年月日 Year(Date) & "年" & Month(Date) &am…

【OpenGL的着色器03】内置变量和函数(gl_Position等)

目录 一、说明 二、着色器的变量 2.1 着色器变量 2.2 着色器内置变量 三、最常见内置变量使用范例 3.1 常见着色器变量 3.2 示例1&#xff1a; gl_PointSize 3.3 示例2&#xff1a;gl_Position 3.4 gl_FragColor 3.5 渲染点片元坐标gl_PointCoord 3.6 gl_PointCoo…

如何阅读“计算机界三大计算思维神书”之一 ——SICP

《计算机程序的构造和解释》&#xff08;Structure and Interpretation of Computer Programs&#xff0c;简记为SICP&#xff09;是MIT的基础课教材&#xff0c;出版后引起计算机教育界的广泛关注&#xff0c;对推动全世界大学计算机科学技术教育的发展和成熟产生了很大影响。…

【ESP32 IDF】I2C层次结构、I2C协议

文章目录 前言一、I2C的结构层次1.1 怎样在两个设备之间传输数据1.2 I2C如何传输数据1.3 硬件框图1.4 软件层次 二、IIC协议2.1 硬件连接2.2 I2C 总线的概念2.3 传输数据类比2.3 I2C信号2.4 I2C数据的含义 总结 前言 I2C&#xff08;Inter-Integrated Circuit&#xff09;是一…

可访问性使命:Facebook构建无障碍社交空间

在当今数字化时代&#xff0c;社交媒体已成为人们日常生活的重要组成部分&#xff0c;而Facebook作为全球最大的社交平台之一&#xff0c;其使命不仅在于连接世界&#xff0c;还在于构建一个无障碍的社交空间&#xff0c;让每个人都能参与其中。本文将深入探讨Facebook在可访问…

Flask入门三(Flask-session的使用、数据库链接池、wtforms、Flask定制命令、Flask-Cache)

文章目录 一、Flask-session使用1.使用方式一2.使用方式二3.读RedisSessionInterface源码4.flask-session补充 二、数据库连接池1.flask中使用mysql2.上述问题解决 使用数据库连接池1.第三方数据库连接池2.操作数据库不带池版3.池版和非池版压测 三、wtforms四、Flask定制命令1…

2024作品集流行封面设计技巧

本期不是关于如何安排作品集&#xff0c;而是关于目前国内市场上流行的作品集封面风格有哪些&#xff1f;如何实现&#xff1f;今天给大家带来了 5 种作品集设计风格&#xff0c;毛玻璃、弥散光、3D、插画、其他&#xff0c;一起往下看吧&#xff01; 毛玻璃 目前许多设计师都…

map和set(一)——关联式容器的常用接口使用及区别

一、关联式容器 在初阶阶段&#xff0c;我们已经接触过STL中的部分容器&#xff0c;比如&#xff1a;vector、list、deque、forward_list(C11)等&#xff0c;这些容器统称为序列式容器&#xff0c;因为其底层为线性序列的数据结构&#xff0c;里面 、存储的是元素本身。 那什么…

基于ACM32 MCU的两轮车充电桩方案,打造高效安全的电池管理

随着城市化进程的加快、人们生活水平的提高和节能环保理念的普及&#xff0c;越来越多的人选择了电动车作为代步工具&#xff0c;而两轮电动车的出行半径较短&#xff0c;需要频繁充电&#xff0c;因此在城市中设置两轮车充电桩就非常有必要了。城市中的充电桩不仅能解决两轮车…

NFTScan :什么是 ERC-404?深入解读 NFT 协议的未来

上月初&#xff0c;ERC-404 成为最首要热门的话题&#xff0c;ERC-404 是由 Pandora 团队在 2 月初为创作者和开发者等开源的实验性代币标准&#xff0c;其混合 ERC-20 / ERC-721 实现&#xff0c;具有原生流动性和碎片化等特点。伴随着早期的发展&#xff0c;越来越多参与者开…

Java基于微信小程序的旅游出行必备小程序,附源码

博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;…

钡铼技术R40工业路由器连接智慧交通助力城市智慧化建设

随着信息技术与交通行业的深度融合&#xff0c;智慧交通作为智慧城市的重要组成部分&#xff0c;正在全球范围内加速推进。在此进程中&#xff0c;钡铼技术推出的R40工业路由器以其独特的4G WiFi一体化设计&#xff0c;成为连接智慧交通各环节&#xff0c;助力城市智慧化建设的…

一文看懂 | 机器视觉前景

机器视觉概述&#xff1a;机器视觉是人工智能发展中的一个重要分支&#xff0c;其主要目标是用机器替代人眼进行测量和判断。 机器视觉系统通过图像摄取装置将目标转换成图像信号&#xff0c;然后传送给专用的图像处理系统&#xff0c;最终得到目标的形态信息。 全球机器视觉…