Нужна помощь в получении кода запроса curl Api с использованием Excel vba для правильной работы - PullRequest
0 голосов
/ 24 апреля 2020

У меня есть код запроса API «GET», который я использую, чтобы получить ключ сеанса из моего crm в excel. я пытаюсь повторно назначить его для отправки информации на мой crm в виде запроса «PUT», но что-то не правильно переводится, потому что я получаю сообщение об ошибке «неверный запрос», когда я это делаю ». Открыть« Put », webServiceURL, False» в коде, но я получаю все данные, когда я делаю ".Open" Get ", webServiceURL, False" (просто ничего не меняет. Если кто-то захочет помочь этому энтузиасту любительского кода, я буду очень рад вам. ниже я включил код, который я сделал до сих пор, он выдает ошибку «неверный запрос».


  Dim webServiceURL As String
  Dim actionType1 As String
  Dim targetWord1 As String
  Dim actionType2 As String
  Dim targetWord2 As String
  Dim PutEstJson  As String
  Dim APISettings As Worksheet
   Dim res As Variant
  Dim allres As Variant
  Dim Token As String
Dim scriptControl As Object
  Token = Worksheets("API Settings").Range("e3").Value
  'get token data
  website = "https://cloud.servicebridge.com/api/v1.1/Estimates/25014108?sessionKey="
  webServiceURL = website & Token

  actionType2 = "Accept"
  targetWord2 = "application/json"
  actionType1 = "Content-Type"
  targetWord1 = "application/json"

  PutEstJson = Worksheets("API Settings").Range("k7").Value

  With CreateObject("WinHttp.WinHttpRequest.5.1")

    .Open "Put", webServiceURL, False
    .setRequestHeader actionType2, targetWord2
    .setRequestHeader actionType1, targetWord1

    .Send PutEstJson
     allres = .GetAllResponseHeaders
     res = .responseText
     APIKey = Split(res, "Data")


    If .Status = 200 Then

    'AVAILABLE INFORMATION
    '_____________________
       ' Debug.Print .Status
        'Debug.Print .responseText
       ' Debug.Print .GetAllResponseHeaders
        'MsgBox .GetAllResponseHeaders


'paste token data






        Worksheets("API Settings").Cells(4, 3).Value = Split(res, "data")
        Worksheets("API Settings").Cells(4, 4).Value = allres



    Else
      MsgBox .Status & ": " & .StatusText
    End If

    End With

End Sub```

heres a copy of the json format data i send as PutEstJson.

```curl -X PUT --header 'Content-Type: application/json' --header 'Accept: application/json' -d '{  
Location:   {
Id: 0,
Name:   "string"
},  
UpdateLocation: false,
GeoCoordinates: {
Latitude:   0,
Longitude:  0
},  
UpdateGeoCoordinates:   false,
Contact:    {
Id: 0,
Name:   "string"
},  
UpdateContact:  false,
ThirdPartyBillPayer:    {
Id: 0,
Name:   "string"
},  
UpdateThirdPartyBillPayer:  false,
MarketingCampaign:  {
Id: 101002,
Name:   "Yard Sign"
},  
UpdateMarketingCampaign:    false,
JobCategory:    {
Id: 21412,
Name:   "Finished Estimate: Hot Lead"
},  
UpdateJobCategory:  true,
SalesRepresentative:    {
Id: 382891,
Name:   "Marvin Lamar"
},  
UpdateSalesRepresentative:  true,
DefaultEquipment:   {
Id: 0,
Name:   "string"
},  
UpdateDefaultEquipment: false,
Description:    "Gutter/Guard Estimate",
UpdateDescription:  true,
Status: "Assigned",
UpdateStatus:   false,
Branch: {
Id: 0,
Name:   "string"
},  
UpdateBranch:   false,
Team:   {
Id: 188466,
Name:   "Yerry"
},  
UpdateTeam: false,
ConfirmationStatus: "None",
UpdateConfirmationStatus:   false,
EstimateDate:   "2020-04-15T04:46:02.867Z",
UpdateEstimateDate: false,
ScheduledTime:  0,
UpdateScheduledTime:    false,
EstimatedDuration:  0,
UpdateEstimatedDuration:    false,
ArrivalWindow:  0,
UpdateArrivalWindow:    false,
EarliestArrival:    0,
UpdateEarliestArrival:  false,
LatestDeparture:    0,
UpdateLatestDeparture:  false,
Notes:  "string",
UpdateNotes:    false,
PrivateNotes:   "string",
UpdatePrivateNotes: false,
InvoiceNotes:   "string",
UpdateInvoiceNotes: false,
UpdateReminder: false,
ReminderType:   "None",
ReminderValue:  0,
ReminderMessage:    "string",
TaxCalculation: "TaxExcluded",
UpdateTaxCalculation:   false,
CustomFields:   [
{   
Name:   "S Walk Around Done",
Value:  "",
Name:   "S4 Est Rating",
Value:  "",
Name:   "S2 I went for",
Value:  "",
Name:   "S3 I Feel Est. Will Close In",
Value:  "",
Name:   "S7 1st Follow Up Date",
Value:  "",
Name:   "S7 2nd Follow Up Date",
Value:  "",
Name:   "S7 3rd Follow Up Date",
Value:  "",
Name:   "Follow-up Notes",
Value:  "",
}   
],  
UpdateCustomFields: false,
SparseUpdate: "True" ,
Version:    10,
ExternalSystemId:   "string",
UpdateExternalSystemId: false,
}   
' 'https://cloud.servicebridge.com/api/v1.1/Estimates/25014108?sessionKey=6550e422e843f1d94e2e8c441e05d7197f0b871' ```

1 Ответ

1 голос
/ 24 апреля 2020

Боюсь, что будет очень сложно помочь в устранении неполадок, не зная деталей метода API, который вы пытаетесь вызвать. Ошибка предполагает, что что-то не так с JSON, который вы пытаетесь опубликовать. Вот некоторые потенциальные проблемы, на которые мне стоит обратить внимание:

  1. Кажется, в вашем наборе пропущено несколько символов [, ], {, } JSON. Структура повреждена и поэтому неверна JSON, что может привести к вашей ошибке.

  2. Ваши JSON ключи должны быть заключены в двойные кавычки, чтобы составить действительный JSON.

    `{
       "Id": 0,
       "Name": "string"
    } ...`
    
  3. Я замечаю, что в конце вашего JSON есть мошенническая запятая ... это определенно недопустимо JSON.

Я бы предложил поместить ваш JSON в текстовый редактор, который может форматировать JSON (например, vscode ). Это должно помочь вам лучше понять структуру вашего JSON. Мне очень непонятно, какой должна быть структура JSON, поэтому я предпочитаю, как она может выглядеть. Я должен был угадать, где должны отсутствовать символы [, ], {, }.

{
    "Id": 0,
    "Name": "string",
    "UpdateLocation": false,
    "GeoCoordinates": {
        "Latitude": 0,
        "Longitude": 0
    },
    "UpdateGeoCoordinates": false,
    "Contact": {
        "Id": 0,
        "Name": "string"
    },
    "UpdateContact": false,
    "ThirdPartyBillPayer": {
        "Id": 0,
        "Name": "string"
    },
    "UpdateThirdPartyBillPayer": false,
    "MarketingCampaign": {
        "Id": 101002,
        "Name": "Yard Sign"
    },
    "UpdateMarketingCampaign": false,
    "JobCategory": {
        "Id": 21412,
        "Name": "Finished Estimate: Hot Lead"
    },
    "UpdateJobCategory": true,
    "SalesRepresentative": {
        "Id": 382891,
        "Name": "Marvin Lamar"
    },
    "UpdateSalesRepresentative": true,
    "DefaultEquipment": {
        "Id": 0,
        "Name": "string"
    },
    "UpdateDefaultEquipment": false,
    "Description": "Gutter/Guard Estimate",
    "UpdateDescription": true,
    "Status": "Assigned",
    "UpdateStatus": false,
    "Branch": {
        "Id": 0,
        "Name": "string"
    },
    "UpdateBranch": false,
    "Team": {
        "Id": 188466,
        "Name": "Yerry"
    },
    "UpdateTeam": false,
    "ConfirmationStatus": "None",
    "UpdateConfirmationStatus": false,
    "EstimateDate": "2020-04-15T04:46:02.867Z",
    "UpdateEstimateDate": false,
    "ScheduledTime": 0,
    "UpdateScheduledTime": false,
    "EstimatedDuration": 0,
    "UpdateEstimatedDuration": false,
    "ArrivalWindow": 0,
    "UpdateArrivalWindow": false,
    "EarliestArrival": 0,
    "UpdateEarliestArrival": false,
    "LatestDeparture": 0,
    "UpdateLatestDeparture": false,
    "Notes": "string",
    "UpdateNotes": false,
    "PrivateNotes": "string",
    "UpdatePrivateNotes": false,
    "InvoiceNotes": "string",
    "UpdateInvoiceNotes": false,
    "UpdateReminder": false,
    "ReminderType": "None",
    "ReminderValue": 0,
    "ReminderMessage": "string",
    "TaxCalculation": "TaxExcluded",
    "UpdateTaxCalculation": false,
    "CustomFields": [
        {
            "Name": "S Walk Around Done",
            "Value": ""
        },
        {
            "Name": "S4 Est Rating",
            "Value": ""
        },
        {
            "Name": "S2 I went for",
            "Value": ""
        },
        {
            "Name": "S3 I Feel Est. Will Close In",
            "Value": ""
        },
        {
            "Name": "S7 1st Follow Up Date",
            "Value": ""
        },
        {
            "Name": "S7 2nd Follow Up Date",
            "Value": ""
        },
        {
            "Name": "S7 3rd Follow Up Date",
            "Value": ""
        },
        {
            "Name": "Follow-up Notes",
            "Value": "test1"
        }
    ],
    "UpdateCustomFields": true,
    "SparseUpdate": "True",
    "Version": 11,
    "ExternalSystemId": "string",
    "UpdateExternalSystemId": false
}
...