Need help getting curl Api request code using excel vba to work properly

非 Y 不嫁゛ 提交于 2020-05-17 07:42:48

问题


i have an API "GET" request code i use to get a session key from my crm into excel . i'm trying to re-purpose it to send information to my crm in a "PUT" request but something isnt translating right because i keep getting a "bad request" error when i do ".Open "Put", webServiceURL, False" in the code but i get all the data when i do " .Open "Get", webServiceURL, False"(just doesnt change anything. if anyone is willing to help this amateur code enthusiast i would be very great-full to you. below i included the code i've done so far, it gives me a "bad Request " error.


  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:


I'm afraid this would be very hard to help troubleshoot without knowing the details of the API's method that you are trying to invoke. The error suggests there's something wrong with the JSON you are trying to post. A few potential issues that stand out to me are these:

  1. There seem to be a bunch of [,],{,} characters missing in your JSON. The structure is malformed and therefore invalid JSON, which could definitely cause your error.

  2. Your JSON keys should probably be inside double quotes to constitute valid JSON.

    `{
       "Id": 0,
       "Name": "string"
    } ...`
    
  3. I notice there is a rogue comma right at the end of your JSON... this is definitely not valid JSON.

I would suggest putting your JSON on a text editor that can format JSON (like vscode). That should help you see the structure of your JSON better. It's very unclear to me what the JSON structure should be, so this is my best guess at what it might look like. I had to guess at where the missing [,],{,} characters should be.

{
    "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
}


来源:https://stackoverflow.com/questions/61398315/need-help-getting-curl-api-request-code-using-excel-vba-to-work-properly

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!