针对ManagedCustomerService的Adwords SOAP XML请求失败

时间:2014-03-24 06:28:52

标签: soap google-adwords adwords-apiv201402

我正在使用https://adwords.google.com/api/adwords/mcm/v201402/ManagedCustomerService并希望获得帐户层次结构。

请求是以原始XML(由JScript控制)进行的 - 我知道这有点不正常,但情况就是这样。

我已经生成了以下SOAP数据包

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <soapenv:Header>
        <ns1:RequestHeader soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0" xmlns:ns1="https://adwords.google.com/api/adwords/mcm/v201402">
            <ns1:clientCustomerId>some_ccid</ns1:clientCustomerId>
            <ns1:developerToken>some_developer_token</ns1:developerToken>
            <ns1:userAgent>GAS</ns1:userAgent>
            <ns1:validateOnly>false</ns1:validateOnly>
            <ns1:partialFailure>false</ns1:partialFailure>
        </ns1:RequestHeader>
    </soapenv:Header>
    <soapenv:Body>
        <get xmlns="https://adwords.google.com/api/adwords/mcm/v201402">
            <serviceSelector>
                <fields>Login</fields>
                <fields>Customer</fields>
                <fields>Name</fields>
                <predicate>
                    <field>id</field>
                    <operator>GREATER_THAN</operator>
                    <values>0</values>
                </predicate>
            </serviceSelector>
        </get>
    </soapenv:Body>
</soapenv:Envelope>

请注意idGREATER_THAN0。这是我获取一切的天真方式。

我注意到PHP GetAccountHierarchy.php有

// Create selector.
$selector = new Selector();
// Specify the fields to retrieve.
$selector->fields = array('Login', 'CustomerId',  'Name');

// Make the get request.
$graph = $managedCustomerService->get($selector);

这似乎意味着没有定义任何谓词。但是,我有点怀疑这样做,因为文档说(是的,我确实阅读了友好的手册),&#34;谓词ContentsNotNull&#34;

我得到的回应是

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Header>
        <ns2:ResponseHeader xmlns:ns2="https://adwords.google.com/api/adwords/mcm/v201402" xmlns="https://adwords.google.com/api/adwords/cm/v201402">
            <requestId>0004f553e08eaca00abc25900000893f</requestId>
            <serviceName>ManagedCustomerService</serviceName>
            <methodName>get</methodName>
            <operations>0</operations>
            <responseTime>141</responseTime>
        </ns2:ResponseHeader>
    </soap:Header>
    <soap:Body>
        <soap:Fault>
            <faultcode>soap:Server</faultcode>
            <faultstring>[QuotaCheckError.INVALID_TOKEN_HEADER @ ]</faultstring>
            <detail>
                <ns2:ApiExceptionFault xmlns="https://adwords.google.com/api/adwords/cm/v201402" xmlns:ns2="https://adwords.google.com/api/adwords/mcm/v201402">
                    <message>[QuotaCheckError.INVALID_TOKEN_HEADER @ ]</message>
                    <ApplicationException.Type>ApiException</ApplicationException.Type>
                    <errors xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="QuotaCheckError">
                        <fieldPath/>
                        <trigger/>
                        <errorString>QuotaCheckError.INVALID_TOKEN_HEADER</errorString>
                        <ApiError.Type>QuotaCheckError</ApiError.Type>
                        <reason>INVALID_TOKEN_HEADER</reason>
                    </errors>
                </ns2:ApiExceptionFault>
            </detail>
        </soap:Fault>
    </soap:Body>
</soap:Envelope>

我做错了什么,我应该得到这样的回应?

顺便说一句,如果我省略谓词或用空内容指定它,我仍然会收到QuotaCheckError.INVALID_TOKEN_HEADER错误。

1 个答案:

答案 0 :(得分:1)

Adwords API google group已提供解决方案。现在工作得很好!