我正在尝试使用 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,所以我可能没有遵循正确的流程。任何帮助或指示将不胜感激。
谢谢!