<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>获取数据 on 牛逼财税</title>
        <link>https://nbcaishui.com/tags/%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE/</link>
        <description>Recent content in 获取数据 on 牛逼财税</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <lastBuildDate>Fri, 24 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nbcaishui.com/tags/%E8%8E%B7%E5%8F%96%E6%95%B0%E6%8D%AE/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>从&#34;每天打开后台截图&#34;到&#34;一键生成日报&#34;：我如何用 OZON API 重构跨境电商的数据获取流程</title>
        <link>https://nbcaishui.com/p/%E4%BB%8E%E6%AF%8F%E5%A4%A9%E6%89%93%E5%BC%80%E5%90%8E%E5%8F%B0%E6%88%AA%E5%9B%BE%E5%88%B0%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E6%97%A5%E6%8A%A5%E6%88%91%E5%A6%82%E4%BD%95%E7%94%A8-ozon-api-%E9%87%8D%E6%9E%84%E8%B7%A8%E5%A2%83%E7%94%B5%E5%95%86%E7%9A%84%E6%95%B0%E6%8D%AE%E8%8E%B7%E5%8F%96%E6%B5%81%E7%A8%8B/</link>
        <pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://nbcaishui.com/p/%E4%BB%8E%E6%AF%8F%E5%A4%A9%E6%89%93%E5%BC%80%E5%90%8E%E5%8F%B0%E6%88%AA%E5%9B%BE%E5%88%B0%E4%B8%80%E9%94%AE%E7%94%9F%E6%88%90%E6%97%A5%E6%8A%A5%E6%88%91%E5%A6%82%E4%BD%95%E7%94%A8-ozon-api-%E9%87%8D%E6%9E%84%E8%B7%A8%E5%A2%83%E7%94%B5%E5%95%86%E7%9A%84%E6%95%B0%E6%8D%AE%E8%8E%B7%E5%8F%96%E6%B5%81%E7%A8%8B/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;做跨境电商的人都懂：每天早上第一件事，就是登录 OZON 后台，一个店铺一个店铺地看昨天的数据——销售额、退款、广告费、有效订单、取消订单……几家店铺切换下来，半小时过去了，Excel 上还没写一个字。&lt;/p&gt;
&lt;p&gt;于是我花了一点时间，把这件事彻底自动化了。本文记录整个过程，既是技术复盘，也是对&amp;quot;数据获取&amp;quot;这件事本身的一些思考。&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一问题的起点后台数据到底有多散&#34;&gt;一、问题的起点：后台数据到底有多&amp;quot;散&amp;quot;
&lt;/h2&gt;&lt;p&gt;在 OZON 卖家后台，看一天的经营数据，要跳转至少 4 个不同的页面：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;需要的数据&lt;/th&gt;
          &lt;th&gt;后台路径&lt;/th&gt;
          &lt;th&gt;痛点&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;订单金额、订单量&lt;/td&gt;
          &lt;td&gt;订单管理 → 分别看 FBO 和 FBS&lt;/td&gt;
          &lt;td&gt;FBO（OZON仓发货）、FBS（自发货）是两套独立列表&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;取消订单&lt;/td&gt;
          &lt;td&gt;同上，需筛选状态&lt;/td&gt;
          &lt;td&gt;要手动勾选&amp;quot;已取消&amp;quot;才能看到&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;退款金额&lt;/td&gt;
          &lt;td&gt;财务 → 经营状况 → 退款&lt;/td&gt;
          &lt;td&gt;和订单是完全独立的口径&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;广告花费&lt;/td&gt;
          &lt;td&gt;广告后台（独立系统，独立登录）&lt;/td&gt;
          &lt;td&gt;账号体系都和卖家后台分开&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;产品销售明细&lt;/td&gt;
          &lt;td&gt;分析 → 按 SKU 看&lt;/td&gt;
          &lt;td&gt;还要自己导出、筛掉销售额为 0 的&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;关键认知&lt;/strong&gt;：OZON 的销售数据和广告数据，是&lt;strong&gt;两套完全独立的 API 体系&lt;/strong&gt;，连鉴权方式都不一样。这是整个事情第一个需要跨过的门槛。&lt;/p&gt;
&lt;p&gt;如果店铺数量是 5 个，上面的动作要重复 5 次。如果还要汇总&amp;quot;近 7 天&amp;quot;做趋势分析——那基本上一上午就废了。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二网页后台-vs-api同样的数据两种获取方式&#34;&gt;二、网页后台 vs API：同样的数据，两种获取方式
&lt;/h2&gt;&lt;p&gt;这是全文的核心对比。我把整个数据获取流程拆成 4 块，逐块对比。&lt;/p&gt;
&lt;h3 id=&#34;对比-1销售订单金额&#34;&gt;对比 1：销售订单金额
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;网页后台做法&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;登录卖家后台&lt;/li&gt;
&lt;li&gt;进入&amp;quot;订单 → FBO&amp;quot;，筛选昨天的下单时间，记录订单金额&lt;/li&gt;
&lt;li&gt;进入&amp;quot;订单 → FBS&amp;quot;，同样筛选昨天，记录订单金额&lt;/li&gt;
&lt;li&gt;把状态为&amp;quot;已取消&amp;quot;的单子手动剔除&lt;/li&gt;
&lt;li&gt;把上面两块加起来&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;API 做法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;FBO 和 FBS 是两个独立的接口，但参数结构几乎一样：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 拉取 FBS 订单，按莫斯科时区过滤，自动翻页&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_fetch_fbs_orders&lt;/span&gt;(store, day):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    result, offset &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [], &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        resp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;post(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api-seller.ozon.ru/v3/posting/fbs/list&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;seller_headers(store),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            json&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dir&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;asc&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;filter&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;since&amp;#34;&lt;/span&gt;: day &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;T00:00:00+03:00&amp;#34;&lt;/span&gt;,  &lt;span style=&#34;color:#75715e&#34;&gt;# 莫斯科时间 +03:00&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;to&amp;#34;&lt;/span&gt;:    day &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;T23:59:59+03:00&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;limit&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;offset&amp;#34;&lt;/span&gt;: offset,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }, timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        postings &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;json()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;result&amp;#34;&lt;/span&gt;, {})&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;postings&amp;#34;&lt;/span&gt;, [])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        result &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; postings
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; len(postings) &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;:   &lt;span style=&#34;color:#75715e&#34;&gt;# 不足一页，说明拉完了&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        offset &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;50&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; result
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;拿到数据后，用状态码筛掉取消的订单，剩下的累加金额就是&amp;quot;有效订单金额&amp;quot;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;CANCELLED &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cancelled&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;cancelled_employer&amp;#34;&lt;/span&gt;}  &lt;span style=&#34;color:#75715e&#34;&gt;# 两种取消状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;valid &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [p &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; p &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; all_orders &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; p&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;not&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; CANCELLED]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;result_a &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; sum(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    float(item[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;price&amp;#34;&lt;/span&gt;]) &lt;span style=&#34;color:#f92672&#34;&gt;*&lt;/span&gt; int(item[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;quantity&amp;#34;&lt;/span&gt;])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; p &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; valid
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; item &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; p&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;products&amp;#34;&lt;/span&gt;, [])
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;几个非写不可的注释&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;时间必须用莫斯科时间&lt;/strong&gt;（UTC+3），否则跨零点的订单会错位到另一天。OZON 后台显示的就是莫斯科时间。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;FBS 和 FBO 是两套接口&lt;/strong&gt;：&lt;code&gt;/v3/posting/fbs/list&lt;/code&gt; 和 &lt;code&gt;/v2/posting/fbo/list&lt;/code&gt;，连 API 版本号都不一样。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;分页用 offset 推进&lt;/strong&gt;，每页最多 50 条，直到返回不足 50 条才算拉完。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;对比-2退款金额&#34;&gt;对比 2：退款金额
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;网页后台做法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;进入&amp;quot;财务 → 经营状况 → 退款&amp;quot;，记录昨天的退款金额。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;API 做法&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;退款这里有个坑：&lt;strong&gt;它不在订单接口里，而在财务流水接口里&lt;/strong&gt;，而且需要按 &lt;code&gt;transaction_type: &amp;quot;returns&amp;quot;&lt;/code&gt; 过滤：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_fetch_returns_amount&lt;/span&gt;(store, day):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    total, page &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;0.0&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;while&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;True&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        resp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;post(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api-seller.ozon.ru/v3/finance/transaction/list&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;seller_headers(store),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            json&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;filter&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;date&amp;#34;&lt;/span&gt;: {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;from&amp;#34;&lt;/span&gt;: day &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;T00:00:00.000Z&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;to&amp;#34;&lt;/span&gt;:   day &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;T23:59:59.000Z&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;operation_type&amp;#34;&lt;/span&gt;: [],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;transaction_type&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;returns&amp;#34;&lt;/span&gt;  &lt;span style=&#34;color:#75715e&#34;&gt;# 关键：只要退款&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                },
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;page&amp;#34;&lt;/span&gt;: page, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;page_size&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            }, timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        result &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;json()&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;result&amp;#34;&lt;/span&gt;, {})
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; op &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; result&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;operations&amp;#34;&lt;/span&gt;, []):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            total &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; op&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;accruals_for_sale&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; page &lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;=&lt;/span&gt; result&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;page_count&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#66d9ef&#34;&gt;break&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        page &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; abs(round(total, &lt;span style=&#34;color:#ae81ff&#34;&gt;2&lt;/span&gt;))  &lt;span style=&#34;color:#75715e&#34;&gt;# 退款是负数，取绝对值&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;几个非写不可的注释&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;退款金额字段是 &lt;code&gt;accruals_for_sale&lt;/code&gt;，返回的是&lt;strong&gt;负数&lt;/strong&gt;（账上扣减），所以最后要 &lt;code&gt;abs()&lt;/code&gt;。&lt;/li&gt;
&lt;li&gt;这个接口的时间用的是 &lt;strong&gt;UTC 格式&lt;/strong&gt;（&lt;code&gt;.000Z&lt;/code&gt;），和订单接口的莫斯科时间格式不同。&lt;strong&gt;同一个 API 家族，不同接口的时间格式居然不一致&lt;/strong&gt;，这是 OZON API 最反直觉的地方之一。&lt;/li&gt;
&lt;li&gt;分页用 &lt;code&gt;page&lt;/code&gt; 和 &lt;code&gt;page_size&lt;/code&gt;，和订单接口的 &lt;code&gt;offset/limit&lt;/code&gt; 也不一样。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;对比-3广告数据&#34;&gt;对比 3：广告数据
&lt;/h3&gt;&lt;p&gt;这块最复杂，因为&lt;strong&gt;广告是另一套完全独立的 API&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;维度&lt;/th&gt;
          &lt;th&gt;销售 API&lt;/th&gt;
          &lt;th&gt;广告 API&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;域名&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;api-seller.ozon.ru&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;api-performance.ozon.ru&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;鉴权方式&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;Client-Id&lt;/code&gt; + &lt;code&gt;Api-Key&lt;/code&gt; 直接塞 header&lt;/td&gt;
          &lt;td&gt;OAuth2，先拿 token 再请求&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;数据格式&lt;/td&gt;
          &lt;td&gt;JSON&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;CSV&lt;/strong&gt;（分号分隔，逗号做小数点）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;账号体系&lt;/td&gt;
          &lt;td&gt;卖家账号&lt;/td&gt;
          &lt;td&gt;广告主账号（独立申请）&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;网页后台做法&lt;/strong&gt;：登录广告后台（另一套登录态），进入&amp;quot;推广 → 推广分析→选择日期&amp;quot;，直接记录当天的广告消费或者导出 CSV，手动整理。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;API 做法&lt;/strong&gt;：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 第一步：拿 access_token&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;get_perf_token&lt;/span&gt;(store):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    resp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;post(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api-performance.ozon.ru/api/client/token&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        json&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;client_id&amp;#34;&lt;/span&gt;:     store[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;perf_id&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;client_secret&amp;#34;&lt;/span&gt;: store[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;perf_secret&amp;#34;&lt;/span&gt;],
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;            &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;grant_type&amp;#34;&lt;/span&gt;:    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;client_credentials&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        }, timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;json()[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;access_token&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 第二步：用 token 拿数据，注意返回的是 CSV&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;def&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;_fetch_ad_detail&lt;/span&gt;(store, date_from, date_to):
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    token &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; get_perf_token(store)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    resp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api-performance.ozon.ru/api/client/statistics/daily&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;f&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Bearer &lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;{&lt;/span&gt;token&lt;span style=&#34;color:#e6db74&#34;&gt;}&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        params&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dateFrom&amp;#34;&lt;/span&gt;: date_from, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dateTo&amp;#34;&lt;/span&gt;: date_to}, timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# CSV 用分号分隔，小数点是逗号（俄欧习惯）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    df &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; pd&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;read_csv(StringIO(resp&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;text&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;strip()),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                     sep&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;;&amp;#34;&lt;/span&gt;, decimal&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt;, encoding&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;utf-8&amp;#34;&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    df&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;columns &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;活动ID&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;活动名称&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;日期&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;展示量&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;点击量&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;                  &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广告费(RUB)&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广告订单量&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;广告销售额(RUB)&amp;#34;&lt;/span&gt;]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 关键：OZON 会在 CSV 末尾自动附加一行&amp;#34;合计行&amp;#34;，活动ID 为空&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#75715e&#34;&gt;# 如果不过滤掉，所有金额都会被重复计算一遍&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    df &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; df[df[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;活动ID&amp;#34;&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;notna() &lt;span style=&#34;color:#f92672&#34;&gt;&amp;amp;&lt;/span&gt; (df[&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;活动ID&amp;#34;&lt;/span&gt;]&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;astype(str)&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;str&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;strip() &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;&amp;#34;&lt;/span&gt;)]
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; df
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;几个踩过的坑&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;俄语区 CSV 用分号做分隔符、逗号做小数点&lt;/strong&gt;，所以 &lt;code&gt;pd.read_csv&lt;/code&gt; 必须同时传 &lt;code&gt;sep=&amp;quot;;&amp;quot;&lt;/code&gt; 和 &lt;code&gt;decimal=&amp;quot;,&amp;quot;&lt;/code&gt;，否则数字全错。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CSV 末尾会自动附加一行合计行&lt;/strong&gt;（活动 ID 为空），第一次没注意，广告费直接翻倍。&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;归因机制&lt;/strong&gt;：用户先点击了广告 A，又点击了广告 B，最后下单了——OZON 会把这笔销售额&lt;strong&gt;同时计入 A 和 B&lt;/strong&gt;。所以广告销售额加总可能大于实际订单额，这不是 bug，是平台的归因策略。&lt;/li&gt;
&lt;li&gt;通过 API 拿到的广告费，和网页端看到的可能会差几卢布，是尾数精度差异造成的，对经营决策没有影响。&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;对比-4产品级销售明细&#34;&gt;对比 4：产品级销售明细
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;网页后台做法&lt;/strong&gt;：进入&amp;quot;分析 → 我的商品销售&amp;quot;，选日期，导出 Excel，手动剔除销售额为 0 的行。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;API 做法&lt;/strong&gt;：走 &lt;code&gt;/v1/analytics/data&lt;/code&gt;，这是一个很通用的 OLAP 风格接口，可以指定维度（&lt;code&gt;dimension&lt;/code&gt;）和指标（&lt;code&gt;metrics&lt;/code&gt;）：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;post(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://api-seller.ozon.ru/v1/analytics/data&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;seller_headers(store),
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    json&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;date_from&amp;#34;&lt;/span&gt;: day, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;date_to&amp;#34;&lt;/span&gt;: day,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;metrics&amp;#34;&lt;/span&gt;:   [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;revenue&amp;#34;&lt;/span&gt;, &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ordered_units&amp;#34;&lt;/span&gt;],  &lt;span style=&#34;color:#75715e&#34;&gt;# 想要什么指标&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dimension&amp;#34;&lt;/span&gt;: [&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;sku&amp;#34;&lt;/span&gt;],                        &lt;span style=&#34;color:#75715e&#34;&gt;# 按什么维度切&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;limit&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;1000&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }, timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这个接口设计得最好——&lt;strong&gt;一个接口搞定所有维度组合&lt;/strong&gt;，想按 SKU 切就按 SKU，想按类目切就按类目。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三最难的一个问题1-号下单2-号取消怎么办&#34;&gt;三、最难的一个问题：1 号下单、2 号取消怎么办？
&lt;/h2&gt;&lt;p&gt;这是整个项目里&lt;strong&gt;最容易被忽略、也最容易让数据失真&lt;/strong&gt;的一个问题。&lt;/p&gt;
&lt;p&gt;想象这个场景：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;11 月 1 日&lt;/strong&gt; 客户下单，金额 1000 卢布&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;11 月 2 日&lt;/strong&gt; 客户取消订单&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;如果每天跑日报，只拉&amp;quot;当天下单的订单&amp;quot;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;11 月 1 日的日报：1000 卢布订单 ✅ 没问题&lt;/li&gt;
&lt;li&gt;11 月 2 日的日报：0 单（这天没人下单）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;可是 1 号那条数据&lt;/strong&gt;永远是&amp;quot;有效订单&amp;quot;，永远不会更新成&amp;quot;已取消&amp;quot; ❌&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;换句话说，&lt;strong&gt;按下单日拉数据 + 当天下单当天判定状态 = 永远捕捉不到跨天取消&lt;/strong&gt;。&lt;/p&gt;
&lt;h3 id=&#34;解决方案每周一次重新统计--用实时状态&#34;&gt;解决方案：每周一次重新统计 + 用实时状态
&lt;/h3&gt;&lt;p&gt;我写了两个脚本：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;ozon_day.py&lt;/code&gt;（日报）&lt;/strong&gt;：每天早上跑一次，生成昨天的日报。这是快报，用来快速感知。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;ozon_week.py&lt;/code&gt;（周报）&lt;/strong&gt;：拉取最近 7 天的&lt;strong&gt;所有订单&lt;/strong&gt;，但判定状态时用的是&lt;strong&gt;API 返回的当前状态&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;关键代码：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 一次拉取 7 天窗口内的订单&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fbs_orders &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; _fetch_fbs(store, date_from, date_to)  &lt;span style=&#34;color:#75715e&#34;&gt;# date_from=7天前, date_to=昨天&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;fbo_orders &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; _fetch_fbo(store, date_from, date_to)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 按下单日分桶，但用&amp;#34;当前状态&amp;#34;判定是否取消&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; p &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; all_orders:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    d &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; _order_day(p)  &lt;span style=&#34;color:#75715e&#34;&gt;# 下单日期（莫斯科时间）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; p&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;status&amp;#34;&lt;/span&gt;) &lt;span style=&#34;color:#f92672&#34;&gt;in&lt;/span&gt; CANCELLED:  &lt;span style=&#34;color:#75715e&#34;&gt;# 这里是实时状态，不是历史快照&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        cancel_cnt[d] &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; &lt;span style=&#34;color:#ae81ff&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;else&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        valid_amt[d] &lt;span style=&#34;color:#f92672&#34;&gt;+=&lt;/span&gt; _posting_amount(p)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这样一来：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;11 月 1 日下单、11 月 2 日取消的那条订单，&lt;strong&gt;在 11 月 2 日跑周报时&lt;/strong&gt;，会被归到&amp;quot;11 月 1 日 → 已取消&amp;quot;。&lt;/li&gt;
&lt;li&gt;1 号的&amp;quot;有效订单金额&amp;quot;会被正确地&lt;strong&gt;向下修正&lt;/strong&gt; 1000 卢布。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;这是网页后台也做不到的事情&lt;/strong&gt;——后台要么给你看&amp;quot;按下单日的静态数据&amp;quot;，要么给你看&amp;quot;按处理日的流水&amp;quot;，没有&amp;quot;按下单日 + 最新状态&amp;quot;这个视角。&lt;/p&gt;
&lt;p&gt;当然也还是有边界——如果订单是 8 天前下的、今天才取消，周报就覆盖不到了。但对实际经营来说，一周窗口已经足够。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四两种方式的数据差异&#34;&gt;四、两种方式的数据差异：
&lt;/h2&gt;&lt;p&gt;这是全文最该被收藏的部分。&lt;strong&gt;同样的&amp;quot;昨天销售额&amp;quot;，后台看到的和 API 拿到的，可能对不上&lt;/strong&gt;。原因：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;差异点&lt;/th&gt;
          &lt;th&gt;说明&lt;/th&gt;
          &lt;th&gt;影响&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;时间口径&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;FBS 看 &lt;code&gt;in_process_at&lt;/code&gt;，FBO 看 &lt;code&gt;created_at&lt;/code&gt;；财务流水用 UTC&lt;/td&gt;
          &lt;td&gt;跨零点的订单可能归属不同日期&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;广告费尾数&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;API 返回的数值精度和网页端显示的截断方式不同&lt;/td&gt;
          &lt;td&gt;差几卢布，不影响决策&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;广告归因&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;一单可能被多个广告计入销售额&lt;/td&gt;
          &lt;td&gt;广告销售额之和 &amp;gt; 实际销售额（正常现象）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;退款归属&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;退款按【财务模块-店铺经营状况】&amp;ldquo;扣款日&amp;quot;归属，不是按&amp;quot;原订单日&amp;rdquo;&lt;/td&gt;
          &lt;td&gt;和订单金额不是严格同一批单子的&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;取消订单&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;日报只能看到&amp;quot;当天下单当天取消&amp;quot;，周报能看&amp;quot;当天下单 N 天内取消&amp;quot;&lt;/td&gt;
          &lt;td&gt;日报的取消数会偏低，周报更准&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;导出明细&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;OZON 导出的销售明细 CSV &lt;strong&gt;默认包含已取消订单&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;如果直接求和，会虚高，需要筛选掉已取消订单&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;总结&lt;/strong&gt;：API 能拿到比后台&lt;strong&gt;更完整、更灵活&lt;/strong&gt;的数据，但代价是你要自己搞清楚每个字段的口径。后台看似简单，其实平台替你做了很多隐式的口径选择——而这些选择并不总是符合你的经营视角。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五产出两个-excel&#34;&gt;五、产出：两个 Excel
&lt;/h2&gt;&lt;p&gt;日报脚本跑完后，生成一个 Excel 文件，包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;汇总&lt;/strong&gt;：每个店铺一行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;销售明细&lt;/strong&gt;：店铺 × 日期× SKU&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;广告明细&lt;/strong&gt;：按广告活动拆分，带 ROI 和广告费占比&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;周报脚本跑完后，生成一个 Excel 文件，包含：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;汇总&lt;/strong&gt;：每个店铺一行，近 7 天合计&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;每日明细&lt;/strong&gt;：店铺 × 日期，每天一行&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;销售明细&lt;/strong&gt;：按 SKU 拆分&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;广告明细&lt;/strong&gt;：按广告活动拆分，带 ROI 和广告费占比&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;每天早上我只需要&lt;strong&gt;双击一下 py 文件&lt;/strong&gt;，几分钟后打开 Excel 就能看到所有店铺的完整经营情况。&lt;/p&gt;
&lt;p&gt;原来需要2小时的手工操作，现在变成了 5-10 分钟。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;六写在最后为什么这件事值得做&#34;&gt;六、写在最后：为什么这件事值得做
&lt;/h2&gt;&lt;p&gt;网页后台是平台帮你做好的&amp;quot;一个视角&amp;quot;，它足够好，但不一定是&lt;strong&gt;你最需要的那个视角&lt;/strong&gt;。 API 是原材料，你可以按自己的口径重新组装数据。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;后台不会帮你自动合并20个店铺的数据，API 会。&lt;/li&gt;
&lt;li&gt;后台不会帮你做&amp;quot;按下单日 + 最新状态&amp;quot;的口径，API 会。&lt;/li&gt;
&lt;li&gt;后台不会帮你把销售和广告并列对比算 ROI，API 会。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这也是我之后会继续挖的方向——不是把脚本写得多花哨，而是把每一个&amp;quot;重复动作&amp;quot;还原成它背后的数据问题，然后用最直接的方式解决它。&lt;/p&gt;
&lt;hr&gt;
&lt;blockquote&gt;
&lt;p&gt;本文涉及的接口包括：OZON 卖家 API（订单、财务、分析）和 OZON 广告 API（统计）。 所有接口的鉴权信息、店铺配置被抽离到独立的 &lt;code&gt;ozon_config.py&lt;/code&gt;，主脚本只负责逻辑。&lt;/p&gt;&lt;/blockquote&gt;
</description>
        </item>
        <item>
        <title>在 Wildberries 卖货，你以为的&#34;销售额&#34;可能是假的——一次关于价格、佣金和单号的深度拆解</title>
        <link>https://nbcaishui.com/p/%E5%9C%A8-wildberries-%E5%8D%96%E8%B4%A7%E4%BD%A0%E4%BB%A5%E4%B8%BA%E7%9A%84%E9%94%80%E5%94%AE%E9%A2%9D%E5%8F%AF%E8%83%BD%E6%98%AF%E5%81%87%E7%9A%84%E4%B8%80%E6%AC%A1%E5%85%B3%E4%BA%8E%E4%BB%B7%E6%A0%BC%E4%BD%A3%E9%87%91%E5%92%8C%E5%8D%95%E5%8F%B7%E7%9A%84%E6%B7%B1%E5%BA%A6%E6%8B%86%E8%A7%A3/</link>
        <pubDate>Fri, 24 Apr 2026 00:00:00 +0000</pubDate>
        
        <guid>https://nbcaishui.com/p/%E5%9C%A8-wildberries-%E5%8D%96%E8%B4%A7%E4%BD%A0%E4%BB%A5%E4%B8%BA%E7%9A%84%E9%94%80%E5%94%AE%E9%A2%9D%E5%8F%AF%E8%83%BD%E6%98%AF%E5%81%87%E7%9A%84%E4%B8%80%E6%AC%A1%E5%85%B3%E4%BA%8E%E4%BB%B7%E6%A0%BC%E4%BD%A3%E9%87%91%E5%92%8C%E5%8D%95%E5%8F%B7%E7%9A%84%E6%B7%B1%E5%BA%A6%E6%8B%86%E8%A7%A3/</guid>
        <description>&lt;blockquote&gt;
&lt;p&gt;同一笔订单，后台显示买家付了 5129 卢布，API 返回的价格是 6983 卢布，最后打到账上的却是 5330.99 卢布。&lt;/p&gt;
&lt;p&gt;三个数字，三种口径，到底该信哪个？&lt;/p&gt;
&lt;p&gt;这篇就把这事一次讲透。&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;一开门见山wb-的数据有一层滤镜&#34;&gt;一、开门见山：WB 的数据有一层&amp;quot;滤镜&amp;quot;
&lt;/h2&gt;&lt;p&gt;Wildberries（下称 WB）是俄罗斯最大的电商平台之一。我对接它的 API 做日报自动化的时候，撞上一个在 OZON 从没遇到过的问题——&lt;strong&gt;后台显示的数字，和 API 返回的数字，差了一千多卢布&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;不是精度问题，不是尾数差，是&lt;strong&gt;真真切切差了一大截&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;搞懂这事，得先过两个坎：&lt;strong&gt;单号搞不清对不上账&lt;/strong&gt;、&lt;strong&gt;价格和佣金的结算机制反直觉&lt;/strong&gt;。下面一个一个来。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;二第一个坑wb-有三种订单号搞混就对不上账&#34;&gt;二、第一个坑：WB 有三种&amp;quot;订单号&amp;quot;，搞混就对不上账
&lt;/h2&gt;&lt;p&gt;这个坑隐蔽但特别致命——&lt;strong&gt;你拿代码拉出来的订单号，往 WB 后台一搜，搜不到&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;为什么？因为 WB 系统里其实有三个不同用途的&amp;quot;单号&amp;quot;，各管各的。&lt;/p&gt;
&lt;h3 id=&#34;1-gnumber--买家购物车的订单号&#34;&gt;1. gNumber — 买家购物车的订单号
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;什么意思&lt;/strong&gt;：买家一次购物车结算出来的号（Номер заказа покупателя）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：一个买家一次买 3 件你的衣服，API 里会是 &lt;strong&gt;3 条数据，但 gNumber 是同一个&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用途&lt;/strong&gt;：主要是客服跟买家对话时用&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;坑&lt;/strong&gt;：&lt;strong&gt;在 WB 后台（FBS 发货台、财务明细）里基本搜不到&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;2-备货任务号номер-сборочного-задания-网页发货用的号&#34;&gt;2. 备货任务号（Номер сборочного задания）— 网页发货用的号
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;什么意思&lt;/strong&gt;：每一件实体商品对应的打包单号，长得像 &lt;code&gt;1234567-8901&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;特点&lt;/strong&gt;：你在 &lt;strong&gt;FBS（Маркетплейс）列表&lt;/strong&gt;里天天看到的就是它&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;坑&lt;/strong&gt;：&lt;strong&gt;&lt;code&gt;/orders&lt;/code&gt; 统计接口里压根没这个字段&lt;/strong&gt;——那个接口是财务口径，不管仓储&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;3-srid--系统底层唯一-id最关键&#34;&gt;3. Srid — 系统底层唯一 ID（最关键）
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;什么意思&lt;/strong&gt;：WB 系统底层的绝对唯一 ID&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;在哪看&lt;/strong&gt;：只在**财务明细表（Детализация）**里才有专门一列&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;用途&lt;/strong&gt;：&lt;strong&gt;要把 Python 拉的日报和周末下载的财务明细表做 VLOOKUP 对账，只有 Srid 能对上，别的号都不行&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;一张表总结&lt;/strong&gt;：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;单号&lt;/th&gt;
          &lt;th&gt;哪里能看到&lt;/th&gt;
          &lt;th&gt;干嘛用&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;gNumber&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;/orders&lt;/code&gt; 接口、客服场景&lt;/td&gt;
          &lt;td&gt;跟买家对账&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;备货任务号&lt;/td&gt;
          &lt;td&gt;FBS 网页列表&lt;/td&gt;
          &lt;td&gt;打包发货&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;Srid&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;财务明细表&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;对账、追到钱&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;我自己踩的坑&lt;/strong&gt;：第一版日报脚本用了 API 返回的 gNumber 当&amp;quot;订单号&amp;quot;存 Excel。第二周想对账，把这些号一个一个扔进 WB 后台——&lt;strong&gt;全部搜不到&lt;/strong&gt;。那一刻人都麻了。后来才反应过来，WB 的单号&lt;strong&gt;不是&amp;quot;一号走天下&amp;quot;，而是&amp;quot;一件货在不同环节有不同身份证&amp;quot;&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;修正方案&lt;/strong&gt;：日报里三个号都留着，对账用 Srid，发货用备货任务号，对买家用 gNumber。不浪费一个字段。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;三第二个坑你以为的销售额到底是哪个价&#34;&gt;三、第二个坑：你以为的&amp;quot;销售额&amp;quot;到底是哪个价？
&lt;/h2&gt;&lt;p&gt;这块最有意思——&lt;strong&gt;WB 的价格口径有三层&lt;/strong&gt;，网页给你看的、API 返回的、最后打到账上的，是&lt;strong&gt;三个完全不同的数&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;拿一台 NOTE 13 PRO 手机的真实订单做例子。&lt;/p&gt;
&lt;h3 id=&#34;三个价谁是谁&#34;&gt;三个价：谁是谁
&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;① 你自己定的价&lt;/strong&gt;（&lt;code&gt;Цена розничная с учетом скидки&lt;/code&gt;）：&lt;strong&gt;6983.03 ₽&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;你在后台设置的价（扣掉你自己给的折扣之后）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WB 认为这笔生意是按这个价成交的&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;API 里的 &lt;code&gt;priceWithDisc&lt;/code&gt; 字段就是它&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;② 买家实际付的钱&lt;/strong&gt;（&lt;code&gt;Вайлдберриз реализовал Товар&lt;/code&gt;）：&lt;strong&gt;5129.00 ₽&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;买家真掏出来的钱&lt;/li&gt;
&lt;li&gt;网页端&amp;quot;买家支付额&amp;quot;显示的就是这个&lt;/li&gt;
&lt;li&gt;API 里的 &lt;code&gt;finishedPrice&lt;/code&gt; 对应它&lt;/li&gt;
&lt;li&gt;比 ① 少了 &lt;strong&gt;1854.03 ₽&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;③ 差额去哪了？SPP 平台补贴&lt;/strong&gt;：&lt;strong&gt;1854.03 ₽&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;买家之所以少付，是因为 &lt;strong&gt;WB 自己给他贴了这 1854 卢布&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;重点来了：&lt;strong&gt;这 1854 卢布 WB 会补给你&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;换句话说：&lt;strong&gt;买家觉得自己薅到羊毛，但你没亏&lt;/strong&gt;。WB 自掏腰包承担了差价。&lt;/p&gt;
&lt;h3 id=&#34;佣金怎么扣不是直接扣钱而是改佣金率&#34;&gt;佣金怎么扣：不是直接扣钱，而是&amp;quot;改佣金率&amp;quot;
&lt;/h3&gt;&lt;p&gt;这是 WB 结算最骚的地方——它&lt;strong&gt;不直接从你账上扣 1854&lt;/strong&gt;，而是&lt;strong&gt;降低对你收的佣金比例&lt;/strong&gt;来实现这个补贴：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;项目&lt;/th&gt;
          &lt;th&gt;数值&lt;/th&gt;
          &lt;th&gt;说明&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;原始佣金率（&lt;code&gt;Размер кВВ, %&lt;/code&gt;）&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;26.55%&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;合同上说好的类目佣金&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;实际执行佣金率（&lt;code&gt;Итоговый кВВ, %&lt;/code&gt;）&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;20.72%&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;因为 WB 补贴，帮你往下调了&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;佣金金额&lt;/td&gt;
          &lt;td&gt;&lt;code&gt;6983.03 × 20.72% = 1446.88 ₽&lt;/code&gt;&lt;/td&gt;
          &lt;td&gt;按 ① 号价算，不是按 ②&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;银行收款手续费（&lt;code&gt;Комиссия за эквайринг&lt;/code&gt;）&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;205.16 ₽&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;买家刷卡，银行拿的钱&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;最后到手多少&lt;/strong&gt;（&lt;code&gt;Вознаграждение за реализованный товар&lt;/code&gt;）：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;你的定价 (6983.03) − 佣金 (1446.88) − 银行手续费 (205.16) = 5330.99 ₽
&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&#34;为啥你到手的钱533099比买家付的钱5129还多&#34;&gt;为啥你到手的钱（5330.99）比买家付的钱（5129）还多？
&lt;/h3&gt;&lt;p&gt;这是整套机制最反直觉的地方。答案：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;WB 承认这单是按 6983 成交的&lt;/strong&gt;（按 ① 号价算佣金）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;买家只掏了 5129&lt;/strong&gt;（② 比 ① 少了 1854）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WB 通过砍佣金率，把那 1854 里的大部分又塞回到你账上&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;所以你账上进的钱 &lt;strong&gt;5330.99 &amp;gt; 买家付的 5129&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;平台宁愿少收你佣金、甚至贴钱&lt;/strong&gt;，也要让买家觉得&amp;quot;在 WB 买东西就是便宜&amp;quot;。对平台来说这不是亏损，是获客成本。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;四亚马逊ozon的平台补贴是怎么样的&#34;&gt;四、亚马逊、ozon的平台补贴是怎么样的？
&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;几乎每个主流平台都有类似机制，但实现方式天差地别。&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;三个平台放一张表里对比：&lt;/p&gt;
&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;维度&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;Wildberries（SPP）&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;OZON（折扣积分）&lt;/strong&gt;&lt;/th&gt;
          &lt;th&gt;&lt;strong&gt;Amazon（Discount Provided by Amazon）&lt;/strong&gt;&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;谁决定打折&lt;/td&gt;
          &lt;td&gt;平台自动&lt;/td&gt;
          &lt;td&gt;平台自动&lt;/td&gt;
          &lt;td&gt;平台自动&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;差额谁出&lt;/td&gt;
          &lt;td&gt;平台（通过降低佣金率）&lt;/td&gt;
          &lt;td&gt;平台（通过发&amp;quot;积分&amp;quot;抵佣金）&lt;/td&gt;
          &lt;td&gt;平台全额出&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;卖家要不要主动参加&lt;/td&gt;
          &lt;td&gt;默认就参加，很难退&lt;/td&gt;
          &lt;td&gt;默认参加，可申请退出&lt;/td&gt;
          &lt;td&gt;自动参加，可 opt-out（&lt;strong&gt;但不可逆&lt;/strong&gt;）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;卖家最终按啥结算&lt;/td&gt;
          &lt;td&gt;按你的&amp;quot;定价&amp;quot;结算&lt;/td&gt;
          &lt;td&gt;按你的&amp;quot;定价&amp;quot;算，差额用积分抵佣金&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;按你的&amp;quot;原始挂牌价&amp;quot;全额拿到钱&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;佣金基数&lt;/td&gt;
          &lt;td&gt;你的定价（高）&lt;/td&gt;
          &lt;td&gt;你的定价（高）&lt;/td&gt;
          &lt;td&gt;全价（高）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;报表里能不能看到补贴&lt;/td&gt;
          &lt;td&gt;能，但要自己拿两个佣金率反推&lt;/td&gt;
          &lt;td&gt;能，有专门&amp;quot;折扣积分&amp;quot;字段&lt;/td&gt;
          &lt;td&gt;能，财务报表里有 &amp;ldquo;Amazon funded&amp;rdquo;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;对卖家数据的&lt;strong&gt;误导程度&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;&lt;strong&gt;最高&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;中等&lt;/td&gt;
          &lt;td&gt;较低&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id=&#34;ozon也有叫折扣积分баллы-за-скидки&#34;&gt;OZON：也有，叫&amp;quot;折扣积分&amp;quot;（Баллы за скидки）
&lt;/h3&gt;&lt;p&gt;OZON 的逻辑和 WB 的 SPP 非常像，但&lt;strong&gt;摊得比 WB 明白&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;平台给买家打折 100 卢布 → OZON 按 1:1 给卖家发 100 个&amp;quot;积分&amp;quot;&lt;/li&gt;
&lt;li&gt;这些积分&lt;strong&gt;专门用来抵扣 OZON 要收的佣金&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;积分最多能覆盖佣金的 99%&lt;/li&gt;
&lt;li&gt;不能跨结算周期用，用不完就归零&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;跟 WB 的本质区别&lt;/strong&gt;：WB 直接改写佣金率，让你看到的佣金数字就是最终数字；OZON 是&lt;strong&gt;先按正常佣金扣你的钱，再用积分补回来&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;所以 OZON 的财务报表里有一列清清楚楚的&amp;quot;&lt;strong&gt;折扣积分&lt;/strong&gt;&amp;quot;，卖家一眼就能反应过来&amp;quot;这笔钱是平台帮我出的&amp;quot;。WB 就没这列，你得自己算。&lt;/p&gt;
&lt;h3 id=&#34;amazon也有而且最痛快&#34;&gt;Amazon：也有，而且最痛快
&lt;/h3&gt;&lt;p&gt;先说清楚，Amazon 有&lt;strong&gt;两套完全不同&lt;/strong&gt;的机制，别搞混了：&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;① 卖家自己发的 coupon / promotion&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;卖家自己掏钱&lt;/strong&gt;。卖家设折扣价，买家少付的钱全部从卖家结算额里扣&lt;/li&gt;
&lt;li&gt;Amazon 还额外收 coupon 手续费（2025 年 6 月改革后是 &lt;strong&gt;$5 固定费 + 2.5% 销售额抽成&lt;/strong&gt;，之前是每次兑换收 $0.60）&lt;/li&gt;
&lt;li&gt;就是一般说的&amp;quot;Amazon 促销&amp;quot;，跟 WB SPP 没关系&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;② Discount Provided by Amazon（平台出钱打折）&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;这个才是类比 WB SPP 的东西&lt;/li&gt;
&lt;li&gt;卖家照样按原挂牌价拿到全额货款，Amazon 自己承担折扣那部分&lt;/li&gt;
&lt;li&gt;佣金按全价算，不会因为打了折就少收&lt;/li&gt;
&lt;li&gt;所有卖家默认自动加入，可以账户级别 opt-out，但一旦退出就不能再回来&lt;/li&gt;
&lt;li&gt;Amazon 自己选哪些商品降价、降多少，卖家事先可能都不知道&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Amazon 这套和 WB SPP 的不同在于&lt;/strong&gt;：&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;更痛快&lt;/strong&gt;——直接按全价给你结算，没有&amp;quot;先扣再补&amp;quot;的复杂流程&lt;/li&gt;
&lt;li&gt;但可能踩到卖家跟上游品牌方的 MAP（最低广告价）协议，因为 Amazon 擅自降价可能破坏你和品牌商之间的价格政策&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id=&#34;总结&#34;&gt;总结
&lt;/h3&gt;&lt;blockquote&gt;
&lt;p&gt;OZON 是&amp;quot;账面上清清楚楚告诉你&amp;rsquo;这部分我帮你出了&amp;rsquo;&amp;quot;。 Amazon 是&amp;quot;&lt;strong&gt;直接给你全款&lt;/strong&gt;，我自己消化差价&amp;quot;。 WB 是&amp;quot;&lt;strong&gt;把补贴藏进佣金率里&lt;/strong&gt;，自己算去&amp;quot;。&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;WB 的 SPP &lt;strong&gt;最阴&lt;/strong&gt;。不是阴在&amp;quot;存在补贴&amp;quot;——补贴本身对卖家是好事——而是阴在&lt;strong&gt;它没有任何一个字段直接告诉你补贴了多少&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;你看到的全是计算结果，没有计算过程。原始佣金率 26.55% 和实际佣金率 20.72% 摆在那，你得自己反应过来&amp;quot;哦，这俩差了 5.83%，乘以定价 6983，就是……不对，还得加上银行手续费的变化，还得考虑……&amp;quot;——&lt;strong&gt;大多数卖家根本算不清这笔账&lt;/strong&gt;，看到&amp;quot;买家只付了 5129&amp;quot;就以为自己亏了。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;五网页端-vs-api同样的订单差异在哪&#34;&gt;五、网页端 vs API：同样的订单，差异在哪
&lt;/h2&gt;&lt;h3 id=&#34;网页端能看到什么&#34;&gt;网页端能看到什么
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;买家支付额（5129）&lt;/li&gt;
&lt;li&gt;订单状态、发货信息&lt;/li&gt;
&lt;li&gt;佣金总额（汇总的，不拆）&lt;/li&gt;
&lt;li&gt;简化版财务摘要&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;api-能多看到什么&#34;&gt;API 能多看到什么
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;① 你的定价 6983&lt;/strong&gt;（真实成交额，佣金基数）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;③ SPP 补贴相关字段&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;原始佣金率 vs 实际佣金率的差&lt;/li&gt;
&lt;li&gt;每一笔银行手续费&lt;/li&gt;
&lt;li&gt;Srid——对账必备&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;差异对照表&#34;&gt;差异对照表
&lt;/h3&gt;&lt;table&gt;
  &lt;thead&gt;
      &lt;tr&gt;
          &lt;th&gt;维度&lt;/th&gt;
          &lt;th&gt;网页后台&lt;/th&gt;
          &lt;th&gt;API&lt;/th&gt;
      &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;&amp;ldquo;销售额&amp;quot;显示&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;买家支付价（5129），&lt;strong&gt;看着偏低&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;定价（6983），&lt;strong&gt;真实成交额&lt;/strong&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;佣金&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;只给总额&lt;/td&gt;
          &lt;td&gt;原始率 + 实际率 + 差额都有&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;SPP 补贴&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;某个栏目汇总&lt;/td&gt;
          &lt;td&gt;明细字段可见&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;单号&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;备货任务号（能搜）&lt;/td&gt;
          &lt;td&gt;gNumber（搜不到）&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;对账能力&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;弱，字段不够&lt;/td&gt;
          &lt;td&gt;强，有 Srid&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
          &lt;td&gt;&lt;strong&gt;数据延迟&lt;/strong&gt;&lt;/td&gt;
          &lt;td&gt;有平台加工延迟&lt;/td&gt;
          &lt;td&gt;接近实时&lt;/td&gt;
      &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;核心差异一句话&lt;/strong&gt;：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;网页端给你的是&amp;quot;买家视角&amp;rdquo;（他付了多少），API 给你的是&amp;quot;结算视角&amp;quot;（这单值多少钱）。&lt;/strong&gt; 只看网页端，容易把每一单都当成&amp;quot;少赚了&amp;quot;，吓自己。&lt;/p&gt;&lt;/blockquote&gt;
&lt;hr&gt;
&lt;h2 id=&#34;六怎么跟老板汇报三个数字讲清楚&#34;&gt;六、怎么跟老板汇报：三个数字讲清楚
&lt;/h2&gt;&lt;p&gt;到这一步，汇报就很简单了：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&amp;ldquo;老板，这单 NOTE 13 PRO 我们挂牌卖 &lt;strong&gt;6983&lt;/strong&gt;，买家因为平台 SPP 补贴只掏了 &lt;strong&gt;5129&lt;/strong&gt;，WB 扣了 &lt;strong&gt;20%&lt;/strong&gt; 左右的佣金和手续费，最后打给我们 &lt;strong&gt;5330.99&lt;/strong&gt; 卢布。我们不仅没亏，平台还替我们承担了一部分折扣成本。&amp;rdquo;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;三个数字、两个动作（平台补、平台扣）、一个结论（没亏，反而被补了）。这就是合格财务该有的汇报颗粒度——&lt;strong&gt;不是把数字念一遍，而是把&amp;quot;钱的流向&amp;quot;讲清楚&lt;/strong&gt;。&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;七技术细节api-鉴权和单-token设计&#34;&gt;七、技术细节：API 鉴权和&amp;quot;单 token&amp;quot;设计
&lt;/h2&gt;&lt;p&gt;比起 OZON 把&amp;quot;销售 API&amp;quot;和&amp;quot;广告 API&amp;quot;拆成两套完全独立的鉴权体系，WB 这边简洁很多：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;只有一个 token&lt;/strong&gt;——一把钥匙开所有门（订单、统计、财务、商品、广告、仓储）&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;鉴权方式&lt;/strong&gt;：HTTP header 里塞 &lt;code&gt;Authorization: Bearer &amp;lt;token&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;域名&lt;/strong&gt;：不同业务走不同子域名，但共用同一个 token&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;好处是开发者友好，坏处是&lt;strong&gt;权限粒度粗&lt;/strong&gt;——这个 token 一旦泄露，整个店铺裸奔。所以 token 管理要格外小心。&lt;/p&gt;
&lt;p&gt;关键代码示意：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-python&#34; data-lang=&#34;python&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;headers &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; {&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;Authorization&amp;#34;&lt;/span&gt;: WB_TOKEN}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;# 订单统计接口：按下单时间拉数据&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;resp &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; requests&lt;span style=&#34;color:#f92672&#34;&gt;.&lt;/span&gt;get(
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;https://statistics-api.wildberries.ru/api/v1/supplier/orders&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    headers&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;headers,
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    params&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;{&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;dateFrom&amp;#34;&lt;/span&gt;: &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;2024-01-01T00:00:00&amp;#34;&lt;/span&gt;},
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    timeout&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;30&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注释&lt;/strong&gt;：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;dateFrom&lt;/code&gt; 用 &lt;strong&gt;ISO 8601 格式&lt;/strong&gt;，不带时区的话 WB 默认按莫斯科时间（UTC+3）处理&lt;/li&gt;
&lt;li&gt;统计接口有&lt;strong&gt;每分钟一次&lt;/strong&gt;的调用限制，频繁轮询会被 429 怼回来&lt;/li&gt;
&lt;li&gt;财务明细接口&lt;strong&gt;按周结算&lt;/strong&gt;，不是按天——和订单接口口径不一样&lt;/li&gt;
&lt;li&gt;要拿 Srid，必须走财务明细接口，订单统计接口里没这字段&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id=&#34;八最后&#34;&gt;八、最后
&lt;/h2&gt;&lt;p&gt;对接完 WB 之后，我最深的感受是：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;做跨境电商，最容易踩雷的不是&amp;quot;算错数&amp;quot;，而是&amp;quot;用错口径&amp;quot;。&lt;/strong&gt;&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;WB 这个例子里，如果你拿&amp;quot;买家支付额&amp;quot;去算毛利、算 ROAS、算广告投产比——&lt;strong&gt;每个指标都会系统性偏低&lt;/strong&gt;。偏低 20%~30% 的数据，足以让一个本该加投的品被误杀，也足以让一个本该下架的品被继续烧钱。&lt;/p&gt;
&lt;p&gt;API 的价值不只是自动化。更重要的是——&lt;strong&gt;它逼着你把&amp;quot;那个模糊的销售额&amp;quot;一层一层拆开，看清楚每一层到底是什么&lt;/strong&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;后台给你一个数字，那是&lt;strong&gt;结论&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;API 给你一组数字，那是&lt;strong&gt;过程&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;财务的专业度，就藏在&amp;quot;过程&amp;quot;里&lt;/strong&gt;。看到的层数越多，判断就越准。这也是我坚持把每个平台的 API 都吃透一遍的原因——不是为了写脚本，是为了&lt;strong&gt;不被平台的默认视角带偏&lt;/strong&gt;。&lt;/p&gt;
</description>
        </item>
        
    </channel>
</rss>
