2

我正在尝试使用 Microsoft Bing Ads 的报告 API以编程方式收集广告效果数据,例如点击次数、支出等。下面,我描述了所采取的步骤。

问题是,按照这些步骤后,我没有得到预期的 SOAP 响应。相反,我得到一个带有HTTP 202 Accepted状态的空身体。

我正在使用 Postman 来测试服务,我的最终目标是httr在 R 中做同样的事情。

验证

我遵循了他们的OAuth 2.0 身份验证流程,我有:

  • 注册我的应用程序(使用开发者帐户)
  • 请求用户同意(通过广告帐户)
  • 生成访问令牌和刷新令牌

每次我点击 API 时,我都会使用 Refresh Token 生成一个新的 Access Token,因为 Access Token 是短暂的。

提出请求

该文档描述了遵循异步方法的报告服务操作。首先我们需要使用SubmitGenerateReport 向 Reporting Service 发出请求。这将返回一个ResponseRequestId,然后我们可以使用它来重复轮询服务,PollGenerateReport直到我们得到请求的报告作为响应。

提交生成报告

SubmitGenerateReport必须采用 SOAP XML 格式,如此所述。以下是我为我的用例生成的文档,查看文档中提供的示例。

<s:Envelope xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header xmlns="https://bingads.microsoft.com/Reporting/v13">
    <Action mustUnderstand="1">SubmitGenerateReport</Action>
    <AuthenticationToken i:nil="false">**AUTHENTICATION_TOKEN_VALUE**</AuthenticationToken>
    <CustomerAccountId i:nil="false">**CUSTOMER_ACCOUNT_ID_VALUE**</CustomerAccountId>
    <CustomerId i:nil="false">**CUSTOMER_ID_VALUE**</CustomerId>
    <DeveloperToken i:nil="false">**DEVELOPER_TOKEN_VALUE**</DeveloperToken>
  </s:Header>
  <s:Body>
    <SubmitGenerateReportRequest xmlns="https://bingads.microsoft.com/Reporting/v13">
      <ReportRequest i:nil="false" i:type="-- derived type specified here with the appropriate prefix --">
        <ExcludeColumnHeaders i:nil="false">false</ExcludeColumnHeaders>
        <ExcludeReportFooter i:nil="false">false</ExcludeReportFooter>
        <ExcludeReportHeader i:nil="false">false</ExcludeReportHeader>
        <Format i:nil="false">Csv</Format>
        <FormatVersion i:nil="false">2.0</FormatVersion>
        <ReportName i:nil="false">COA Bing Ad Spend</ReportName>
        <ReturnOnlyCompleteData i:nil="false">false</ReturnOnlyCompleteData>

        <!--These fields are applicable if the derived type attribute is set to AccountPerformanceReportRequest-->
        <Aggregation>Summary</Aggregation>
        <Columns i:nil="false">
          <AccountPerformanceReportColumn>Spend</AccountPerformanceReportColumn>
        </Columns>
        <Filter i:nil="false">
          <AccountStatus i:nil="false"></AccountStatus>
          <AdDistribution i:nil="false"></AdDistribution>
          <DeviceOS i:nil="false"></DeviceOS>
          <DeviceType i:nil="false"></DeviceType>
        </Filter>
        <Scope i:nil="false">
          <AccountIds i:nil="false" xmlns:a1="http://schemas.microsoft.com/2003/10/Serialization/Arrays">
            <a1:long>**ACCOUNT_ID_VALUE**</a1:long>
          </AccountIds>
        </Scope>
        <Time i:nil="false">
          <CustomDateRangeEnd i:nil="false">
            <Day></Day>
            <Month></Month>
            <Year></Year>
          </CustomDateRangeEnd>
          <CustomDateRangeStart i:nil="false">
            <Day></Day>
            <Month></Month>
            <Year></Year>
          </CustomDateRangeStart>
          <PredefinedTime i:nil="false">ThisWeek</PredefinedTime>
          <ReportTimeZone i:nil="false"></ReportTimeZone>
        </Time>
    </s:Body>
</s:Envelope>

生成此 XML 后,我试图通过使用 Postman 来访问他们的Reporting Service Endopoint (Production)。

邮递员配置

我正在关注这篇关于如何使用 Postman 发出 SOAP 请求的文章。

  • 我正在发出 POST 请求:https://reporting.api.bingads.microsoft.com/Api/Advertiser/Reporting/V13/ReportingService.svc以上述 SOAP XML 作为正文
  • 已将正文编码设置为Raw
  • 已按照文章中的建议添加了Content-Type = text/xml标题(将其设置为application/xml,返回505 Internal Server Error

根据文档,我应该得到一个 SOAP 响应:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header xmlns="https://bingads.microsoft.com/Reporting/v13">
    <TrackingId d3p1:nil="false" xmlns:d3p1="http://www.w3.org/2001/XMLSchema-instance">ValueHere</TrackingId>
  </s:Header>
  <s:Body>
    <SubmitGenerateReportResponse xmlns="https://bingads.microsoft.com/Reporting/v13">
      <ReportRequestId d4p1:nil="false" xmlns:d4p1="http://www.w3.org/2001/XMLSchema-instance">ValueHere</ReportRequestId>
    </SubmitGenerateReportResponse>
  </s:Body>
</s:Envelope>

然后,ResponseRequestId我将使用该服务来轮询实际报告的服务。

但是,当我发布这个时,我得到一个HTTP 202 Accepted响应和一个空的正文。邮递员的回应意味着:

请求已被接受处理,但处理尚未完成。该请求最终可能会或可能不会被执行,因为当处理实际发生时它可能会被禁止。

我已经多次重做身份验证步骤,并且通常确信那里没有问题。这让我对如何进行调试没有方向。当我在删除后尝试进行 POST 时,比如说身份验证令牌或客户帐户 ID,请求仍然被接受并返回 202。

我以前从未使用过 SOAP API,所以我可能没有遵循正确的流程。任何帮助或指示将不胜感激。

谢谢!

4

0 回答 0