Похоже, это вопрос об использовании конечной точки импорта / основной конечной точки PestRoutes для импорта новых клиентов и подписок! Я разработчик PestRoutes, отвечающий за API, и буду рад помочь вам <3. </p>
Вот пример размещения клиента в нашей демонстрационной среде:
Аннотация:
apiModule.call('import','main',{
"dataMain":[
{
"CustomerID": "PestRoutesOverflow1111",
"Branch": "Demo Pest Control",
"CustomerName": "PestRoutes Testing01",
"CustomerAddress": "Walt Disney World Resort, Orlando, FL 32830",
"CustomerCity": "Orlando",
"CustomerState": "FL",
"CustomerZipCode": "32830",
"CustomerPhone1": "4428675309",
"CustomerPhone2": "4438675309",
"CustomerEmail": "",
"CustomerStatus": "Act"
//"Frequency": 90, //These three fields
//"ServiceType": 'Quarterly', // are the minimum to
//"Price": '111', // create a subscription
//"Lead": 'No', //Set Yes to revert subscription to a LEAD
//"LastService": '4/26/18', // If this is set it will override Lead to No
//"InitialService": '1/26/18', // If this is set it will override Lead to No
}
]
});
вот как это выглядит как завиток:
curl 'https://demo.pestroutes.com/api/import/main' \
-H 'Connection: keep-alive' \
-H 'Accept: application/json, text/javascript, */*; q=0.01' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36' \
-H 'Content-Type: application/x-www-form-urlencoded; charset=UTF-8' \
-H 'Origin: null' \
-H 'Sec-Fetch-Site: cross-site' \
-H 'Sec-Fetch-Mode: cors' \
-H 'Sec-Fetch-Dest: empty' \
-H 'Accept-Language: en-US,en;q=0.9' \
--data-raw 'dataMain%5B0%5D%5BCustomerID%5D=PestRoutesOverflow1111&dataMain%5B0%5D%5BBranch%5D=Demo+Pest+Control&dataMain%5B0%5D%5BCustomerName%5D=PestRoutes+Testing01&dataMain%5B0%5D%5BCustomerAddress%5D=Walt+Disney+World+Resort%2C+Orlando%2C+FL+32830&dataMain%5B0%5D%5BCustomerCity%5D=Orlando&dataMain%5B0%5D%5BCustomerState%5D=FL&dataMain%5B0%5D%5BCustomerZipCode%5D=32830&dataMain%5B0%5D%5BCustomerPhone1%5D=4428675309&dataMain%5B0%5D%5BCustomerPhone2%5D=4438675309&dataMain%5B0%5D%5BCustomerEmail%5D=&dataMain%5B0%5D%5BCustomerStatus%5D=Act&authenticationKey=88492884d8154febd1057372867c2e34b371d8fb&authenticationToken=6915e71f53708f17dba090febd2df4f9d79364d7' \
--compressed
В качестве выборки:
fetch("https://demo.pestroutes.com/api/import/main", {
"headers": {
"accept": "application/json, text/javascript, */*; q=0.01",
"accept-language": "en-US,en;q=0.9",
"content-type": "application/x-www-form-urlencoded; charset=UTF-8",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site"
},
"referrerPolicy": "no-referrer-when-downgrade",
"body": "dataMain%5B0%5D%5BCustomerID%5D=PestRoutesOverflow1111&dataMain%5B0%5D%5BBranch%5D=Demo+Pest+Control&dataMain%5B0%5D%5BCustomerName%5D=PestRoutes+Testing01&dataMain%5B0%5D%5BCustomerAddress%5D=Walt+Disney+World+Resort%2C+Orlando%2C+FL+32830&dataMain%5B0%5D%5BCustomerCity%5D=Orlando&dataMain%5B0%5D%5BCustomerState%5D=FL&dataMain%5B0%5D%5BCustomerZipCode%5D=32830&dataMain%5B0%5D%5BCustomerPhone1%5D=4428675309&dataMain%5B0%5D%5BCustomerPhone2%5D=4438675309&dataMain%5B0%5D%5BCustomerEmail%5D=&dataMain%5B0%5D%5BCustomerStatus%5D=Act&authenticationKey=88492884d8154febd1057372867c2e34b371d8fb&authenticationToken=6915e71f53708f17dba090febd2df4f9d79364d7",
"method": "POST",
"mode": "cors",
"credentials": "omit"
}).then( r=>r.json()).then(console.log);
Результат первого запуска:
{
"params": {
"endpoint": "import",
"action": "main",
"dataMain": [],
"authenticationKey": "88492884d8154febd1057372867c2e34b371d8fb",
"authenticationToken": "6915e71f53708f17dba090febd2df4f9d79364d7"
},
"tokenUsage": {
"requestsReadToday": "0",
"requestsWriteToday": "1",
"requestsReadInLastMinute": "0",
"requestsWriteInLastMinute": "0"
},
"tokenLimits": {
"limitReadRequestsPerMinute": 1000,
"limitReadRequestsPerDay": 1000,
"limitWriteRequestsPerMinute": 1000,
"limitWriteRequestsPerDay": 1000
},
"requestAction": "main",
"endpoint": "import",
"success": true,
"customersImported": [
{
"CustomerID": "PestRoutesOverflow1111",
"PestRoutesCustomerID": "21257",
"Action": "Created"
}
],
"processingTime": "1199 milliseconds",
"count": 0
}
Результат второго запуска:
{
"params": {
"endpoint": "import",
"action": "main",
"dataMain": [],
"authenticationKey": "88492884d8154febd1057372867c2e34b371d8fb",
"authenticationToken": "6915e71f53708f17dba090febd2df4f9d79364d7"
},
"tokenUsage": {
"requestsReadToday": "0",
"requestsWriteToday": "2",
"requestsReadInLastMinute": "1",
"requestsWriteInLastMinute": "0"
},
"tokenLimits": {
"limitReadRequestsPerMinute": 1000,
"limitReadRequestsPerDay": 1000,
"limitWriteRequestsPerMinute": 1000,
"limitWriteRequestsPerDay": 1000
},
"requestAction": "main",
"endpoint": "import",
"success": true,
"customersImported": [
{
"CustomerID": "PestRoutesOverflow1111",
"PestRoutesCustomerID": "21257",
"Action": "Updated"
}
],
"processingTime": "1036 milliseconds",
"count": 0
}
Обратите внимание, что хотя второй запрос с тем же идентификатором клиента будет обновляться, использование этой конечной точки для обновлений клиентов очень опасно и не рекомендуется. (Напишите мне, чтобы узнать об альтернативных рабочих процессах)
Обратите внимание, что объект dataMain в результате всегда пуст. Для большинства конечных точек PestRoutes этот массив параметров будет возвращать полезные данные точно в том виде, в каком они были получены, но это устаревшая конечная точка и выводит немного странно; так что вы можете игнорировать пустоту этого поля как симптом ошибки для данной конкретной конечной точки.
Что касается кодирования типа содержимого; application / x- www-form-urlencoded и multipart / form-data принимаются сервером.
Пожалуйста, свяжитесь со мной по электронной почте michael ~ at ~ pestroutes.com для получения дополнительной помощи:)