如何使用 Excel VBA 获取 curl Api 请求码?
How to get curl Api request code using Excel VBA?
我有一个 API“GET”请求代码,用于从我的 crm 获取会话密钥到 Excel。
我正在尝试重新调整它的用途,以便在“PUT”请求中将信息发送到我的 crm。
我在执行 Open "Put", webServiceURL, False
时收到“错误请求”错误。
我在 .Open "Get", webServiceURL, False
时获得了所有数据(只是没有改变任何东西)。
Sub UpdateEstimate()
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
我作为 PutEstJson 发送的 json 格式数据的副本。
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'
如果不知道您尝试调用的 API 方法的详细信息,恐怕很难帮助解决问题。该错误表明您尝试 post 的 JSON 有问题。一些对我来说很突出的潜在问题是:
您的 JSON 中似乎缺少一堆 [
、]
、{
、}
个字符。该结构格式错误,因此无效 JSON,这肯定会导致您的错误。
您的 JSON 键可能应该在双引号内构成
有效 JSON。
`{
"Id": 0,
"Name": "string"
} ...`
我注意到你的 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
}
我有一个 API“GET”请求代码,用于从我的 crm 获取会话密钥到 Excel。
我正在尝试重新调整它的用途,以便在“PUT”请求中将信息发送到我的 crm。
我在执行 Open "Put", webServiceURL, False
时收到“错误请求”错误。
我在 .Open "Get", webServiceURL, False
时获得了所有数据(只是没有改变任何东西)。
Sub UpdateEstimate()
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
我作为 PutEstJson 发送的 json 格式数据的副本。
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'
如果不知道您尝试调用的 API 方法的详细信息,恐怕很难帮助解决问题。该错误表明您尝试 post 的 JSON 有问题。一些对我来说很突出的潜在问题是:
您的 JSON 中似乎缺少一堆
[
、]
、{
、}
个字符。该结构格式错误,因此无效 JSON,这肯定会导致您的错误。您的 JSON 键可能应该在双引号内构成 有效 JSON。
`{ "Id": 0, "Name": "string" } ...`
我注意到你的 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
}