Ошибка при получении второй страницы сводных данных транзакций с использованием аутентификации на основе токенов
Недавно я столкнулся с проблемами при использовании записи интеграции с TBA для запроса нескольких страниц сводных записей транзакций при использовании действия веб-служб getPostingTransactionSummary.
Я обнаружил, что первый запрос был последовательно успешным, но последующие запросы для последовательных страниц не будут выполнены, что приведет к следующей ошибке:
Для страниц> 1 параметры поиска должны точно соответствовать исходному поиску
Я следовал советам в SuiteAnswer 33416 с пометкой "getPostingTransactionSummary возвращает ошибку: для страниц> 1 параметры поиска должны точно соответствовать исходному поиску". Затем я убедился, что мы сначала запрашиваем первую страницу, убедился, что параметры полей или фильтров не изменились, и немедленно запросил вторую страницу.
Механизм, используемый для генерации подписи, представляется правильным, так как все вызовы любой конечной точки веб-службы для первой страницы всегда успешны.
Следующее представляет последовательность запросов, используемых для воспроизведения (где реальные данные проверяются):
Запрос на первую страницу:
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn2="urn:messages_2015_2.platform.webservices.netsuite.com" xmlns:urn="urn:core_2015_2.platform.webservices.netsuite.com">
<x:Header>
<urn:tokenPassport>
<urn1:account>1234567</urn1:account>
<urn1:consumerKey>12345</urn1:consumerKey>
<urn1:token>1234</urn1:token>
<urn1:nonce>62005285</urn1:nonce>
<urn1:timestamp>1478114023</urn1:timestamp>
<urn1:signature algorithm="HMAC-SHA256">NIhrCvTi2SpGfhxbxO8N09WQ7mvXw7oJICiEewCtm1M=</urn1:signature>
</urn:tokenPassport>
</x:Header>
<x:Body>
<urn2:getPostingTransactionSummary>
<urn2:fields>
<urn:period>true</urn:period>
<urn:account>true</urn:account>
<urn:location>true</urn:location>
<urn:subsidiary>true</urn:subsidiary>
</urn2:fields>
<urn2:filters>
<urn:period>
<urn:recordRef internalId="1"/>
<urn:recordRef internalId="2"/>
<urn:recordRef internalId="3"/>
</urn:period>
<urn:account>
<urn:recordRef internalId="985" type="account"></urn:recordRef>
</urn:account>
</urn2:filters>
<urn2:pageIndex>1</urn2:pageIndex>
</urn2:getPostingTransactionSummary>
</x:Body>
</x:Envelope>
Ответ для первой страницы:
<?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>
<platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2015_2.platform.webservices.netsuite.com">
<platformMsgs:nsId>WEBSERVICES_1234</platformMsgs:nsId>
</platformMsgs:documentInfo>
</soapenv:Header>
<soapenv:Body>
<getPostingTransactionSummaryResponse xmlns="urn:messages_2015_2.platform.webservices.netsuite.com">
<platformCore:getPostingTransactionSummaryResult xmlns:platformCore="urn:core_2015_2.platform.webservices.netsuite.com">
<platformCore:status isSuccess="true"/>
<platformCore:totalRecords>2150</platformCore:totalRecords>
<platformCore:pageSize>1000</platformCore:pageSize>
<platformCore:totalPages>3</platformCore:totalPages>
<platformCore:pageIndex>1</platformCore:pageIndex>
<platformCore:postingTransactionSummaryList>
<platformCore:postingTransactionSummary>
<platformCore:period internalId="1"/>
<platformCore:account internalId="985"/>
<platformCore:subsidiary internalId="1"/>
<platformCore:amount>100</platformCore:amount>
</platformCore:postingTransactionSummary>
<platformCore:postingTransactionSummary>
<platformCore:period internalId="1"/>
<platformCore:account internalId="985"/>
<platformCore:location internalId="3"/>
<platformCore:subsidiary internalId="2"/>
<platformCore:amount>100</platformCore:amount>
</platformCore:postingTransactionSummary>
.... MORE RECORDS HERE
</platformCore:postingTransactionSummaryList>
</platformCore:getPostingTransactionSummaryResult>
</getPostingTransactionSummaryResponse>
</soapenv:Body>
</soapenv:Envelope>
Запрос на вторую страницу:
Для ясности единственными изменениями между первым и вторым запросом являются nonce, timestamp, signature и pageIndex.
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn2="urn:messages_2015_2.platform.webservices.netsuite.com" xmlns:urn="urn:core_2015_2.platform.webservices.netsuite.com">
<x:Header>
<urn:tokenPassport>
<urn1:account>1234567</urn1:account>
<urn1:consumerKey>12345</urn1:consumerKey>
<urn1:token>1234</urn1:token>
<urn1:nonce>64687129</urn1:nonce>
<urn1:timestamp>1478114087</urn1:timestamp>
<urn1:signature algorithm="HMAC-SHA256">HWQ/O4MSz5L6/TRu0GhtxU37yXIHdhSqvznbG92Salg=</urn1:signature>
</urn:tokenPassport>
</x:Header>
<x:Body>
<urn2:getPostingTransactionSummary>
<urn2:fields>
<urn:period>true</urn:period>
<urn:account>true</urn:account>
<urn:location>true</urn:location>
<urn:subsidiary>true</urn:subsidiary>
</urn2:fields>
<urn2:filters>
<urn:period>
<urn:recordRef internalId="1"/>
<urn:recordRef internalId="2"/>
<urn:recordRef internalId="3"/>
</urn:period>
<urn:account>
<urn:recordRef internalId="985" type="account"></urn:recordRef>
</urn:account>
</urn2:filters>
<urn2:pageIndex>2</urn2:pageIndex>
</urn2:getPostingTransactionSummary>
</x:Body>
</x:Envelope>
Ответ для второй страницы:
<?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>
<platformMsgs:documentInfo xmlns:platformMsgs="urn:messages_2015_2.platform.webservices.netsuite.com">
<platformMsgs:nsId>WEBSERVICES_1234</platformMsgs:nsId>
</platformMsgs:documentInfo>
</soapenv:Header>
<soapenv:Body>
<getPostingTransactionSummaryResponse xmlns="urn:messages_2015_2.platform.webservices.netsuite.com">
<platformCore:getPostingTransactionSummaryResult xmlns:platformCore="urn:core_2015_2.platform.webservices.netsuite.com">
<platformCore:status isSuccess="false">
<platformCore:statusDetail type="ERROR">
<platformCore:code>USER_ERROR</platformCore:code>
<platformCore:message>For pages > 1, search parameters must match the original search exactly</platformCore:message>
</platformCore:statusDetail>
</platformCore:status>
</platformCore:getPostingTransactionSummaryResult>
</getPostingTransactionSummaryResponse>
</soapenv:Body>
</soapenv:Envelope>
Ошибка заставляет меня предположить, что первый запрос не кэшируется на стороне netsuite правильно. Я также пробовал различные перестановки полей в паспорте токена для второго запроса, но безрезультатно.
Любая помощь приветствуется.
1 ответ
Эта проблема была решена с помощью:
1) Удаление узла паспорта токена всех последующих запросов (pageIndex> 1)
<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn2="urn:messages_2015_2.platform.webservices.netsuite.com" xmlns:urn="urn:core_2015_2.platform.webservices.netsuite.com">
<x:Header>
</x:Header>
<x:Body>
<urn2:getPostingTransactionSummary>
<urn2:fields>
<urn:period>true</urn:period>
<urn:account>true</urn:account>
<urn:location>true</urn:location>
<urn:subsidiary>true</urn:subsidiary>
</urn2:fields>
<urn2:filters>
<urn:period>
<urn:recordRef internalId="1"/>
<urn:recordRef internalId="2"/>
<urn:recordRef internalId="3"/>
</urn:period>
<urn:account>
<urn:recordRef internalId="985" type="account"></urn:recordRef>
</urn:account>
</urn2:filters>
<urn2:pageIndex>2</urn2:pageIndex>
</urn2:getPostingTransactionSummary>
</x:Body>
</x:Envelope>
2) Сохранение и отправка jsessionid и других файлов cookie, возвращаемых в заголовках (Set-Cookie) при первом ответе в каждом последующем запросе.