Pascal (Lazarus/Delphi)
Pascal (Lazarus/Delphi)
Quickbooks Create a New Customer
See more QuickBooks Examples
Demonstrates how to create a new customer via the Quickbooks REST API.Chilkat Pascal (Lazarus/Delphi) Downloads
program ChilkatDemo;
// Demonstrates using the Chilkat Pascal wrapper via the C bridge DLL.
// Builds as a console application under Lazarus (FPC) or Delphi.
{$IFDEF FPC}
{$MODE DELPHI}
{$ENDIF}
{$APPTYPE CONSOLE}
uses
{$IFDEF UNIX}
cthreads,
{$ENDIF}
SysUtils,
CkDllLoader,
Chilkat.StringBuilder,
Chilkat.Rest,
Chilkat.JsonObject;
// ---------------------------------------------------------------------------
procedure RunDemo;
var
success: Boolean;
jsonToken: TJsonObject;
rest: TRest;
bTls: Boolean;
port: Integer;
bAutoReconnect: Boolean;
sbAuth: TStringBuilder;
jsonReq: TJsonObject;
sbRequestBody: TStringBuilder;
sbResponseBody: TStringBuilder;
respStatusCode: Integer;
jsonResponse: TJsonObject;
CustomerDomain: string;
CustomerPrimaryEmailAddrAddress: string;
CustomerDisplayName: string;
CustomerCurrencyRefName: string;
CustomerCurrencyRefValue: string;
CustomerDefaultTaxCodeRefValue: string;
CustomerPreferredDeliveryMethod: string;
CustomerGivenName: string;
CustomerFullyQualifiedName: string;
CustomerBillWithParent: Boolean;
CustomerTitle: string;
CustomerJob: Boolean;
CustomerBalanceWithJobs: Integer;
CustomerPrimaryPhoneFreeFormNumber: string;
CustomerTaxable: Boolean;
CustomerMetaDataCreateTime: string;
CustomerMetaDataLastUpdatedTime: string;
CustomerBillAddrCity: string;
CustomerBillAddrCountry: string;
CustomerBillAddrLine1: string;
CustomerBillAddrPostalCode: string;
CustomerBillAddrCountrySubDivisionCode: string;
CustomerBillAddrId: string;
CustomerMiddleName: string;
CustomerNotes: string;
CustomerActive: Boolean;
CustomerBalance: Integer;
CustomerSyncToken: string;
CustomerSuffix: string;
CustomerCompanyName: string;
CustomerFamilyName: string;
CustomerPrintOnCheckName: string;
CustomerSparse: Boolean;
CustomerId: string;
time: string;
begin
success := False;
// This example requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
// First get our previously obtained OAuth2 access token.
jsonToken := TJsonObject.Create;
success := jsonToken.LoadFile('qa_data/tokens/qb-access-token.json');
rest := TRest.Create;
// Connect to the REST server.
bTls := True;
port := 443;
bAutoReconnect := True;
success := rest.Connect('sandbox-quickbooks.api.intuit.com',port,bTls,bAutoReconnect);
sbAuth := TStringBuilder.Create;
sbAuth.Append('Bearer ');
sbAuth.Append(jsonToken.StringOf('access_token'));
rest.Authorization := sbAuth.GetAsString();
// --------------------------------------------------------------------------
// Note: The above code to setup the initial REST connection
// can be done once. After connecting, any number of REST calls can be made.
// If the connection is lost, the next REST method call will automatically
// reconnect if needed.
// --------------------------------------------------------------------------
// Create the following JSON:
// {
// "FullyQualifiedName": "King Groceries",
// "PrimaryEmailAddr": {
// "Address": "jdrew@myemail.com"
// },
// "DisplayName": "King's Groceries",
// "Suffix": "Jr",
// "Title": "Mr",
// "MiddleName": "B",
// "Notes": "Here are other details.",
// "FamilyName": "King",
// "PrimaryPhone": {
// "FreeFormNumber": "(555) 555-5555"
// },
// "CompanyName": "King Groceries",
// "BillAddr": {
// "CountrySubDivisionCode": "CA",
// "City": "Mountain View",
// "PostalCode": "94042",
// "Line1": "123 Main Street",
// "Country": "USA"
// },
// "GivenName": "James"
// }
//
// Use the this online tool to generate the code from sample JSON:
// Generate Code to Create JSON
jsonReq := TJsonObject.Create;
jsonReq.UpdateString('FullyQualifiedName','King Groceries');
jsonReq.UpdateString('PrimaryEmailAddr.Address','jdrew@myemail.com');
jsonReq.UpdateString('DisplayName','King''s Groceries');
jsonReq.UpdateString('Suffix','Jr');
jsonReq.UpdateString('Title','Mr');
jsonReq.UpdateString('MiddleName','B');
jsonReq.UpdateString('Notes','Here are other details.');
jsonReq.UpdateString('FamilyName','King');
jsonReq.UpdateString('PrimaryPhone.FreeFormNumber','(555) 555-5555');
jsonReq.UpdateString('CompanyName','King Groceries');
jsonReq.UpdateString('BillAddr.CountrySubDivisionCode','CA');
jsonReq.UpdateString('BillAddr.City','Mountain View');
jsonReq.UpdateString('BillAddr.PostalCode','94042');
jsonReq.UpdateString('BillAddr.Line1','123 Main Street');
jsonReq.UpdateString('BillAddr.Country','USA');
jsonReq.UpdateString('GivenName','James');
sbRequestBody := TStringBuilder.Create;
jsonReq.EmitSb(sbRequestBody);
rest.AddHeader('Content-Type','application/json');
rest.AddHeader('Accept','application/json');
rest.AllowHeaderFolding := False;
sbResponseBody := TStringBuilder.Create;
success := rest.FullRequestSb('POST','/v3/company/<realmID>/customer',sbRequestBody,sbResponseBody);
if (success <> True) then
begin
WriteLn(rest.LastErrorText);
Exit;
end;
respStatusCode := rest.ResponseStatusCode;
// Success is indicated by a 200 response status code.
WriteLn('response status code = ' + respStatusCode);
jsonResponse := TJsonObject.Create;
jsonResponse.LoadSb(sbResponseBody);
jsonResponse.EmitCompact := False;
WriteLn(jsonResponse.Emit());
if (rest.ResponseStatusCode <> 200) then
begin
WriteLn('Failed.');
Exit;
end;
// Sample output...
// (See the parsing code below..)
//
// Use the this online tool to generate parsing code from sample JSON:
// Generate Parsing Code from JSON
// {
// "Customer": {
// "domain": "QBO",
// "PrimaryEmailAddr": {
// "Address": "jdrew@myemail.com"
// },
// "DisplayName": "King's Groceries",
// "CurrencyRef": {
// "name": "United States Dollar",
// "value": "USD"
// },
// "DefaultTaxCodeRef": {
// "value": "2"
// },
// "PreferredDeliveryMethod": "Print",
// "GivenName": "James",
// "FullyQualifiedName": "King's Groceries",
// "BillWithParent": false,
// "Title": "Mr",
// "Job": false,
// "BalanceWithJobs": 0,
// "PrimaryPhone": {
// "FreeFormNumber": "(555) 555-5555"
// },
// "Taxable": true,
// "MetaData": {
// "CreateTime": "2015-07-23T10:58:12-07:00",
// "LastUpdatedTime": "2015-07-23T10:58:12-07:00"
// },
// "BillAddr": {
// "City": "Mountain View",
// "Country": "USA",
// "Line1": "123 Main Street",
// "PostalCode": "94042",
// "CountrySubDivisionCode": "CA",
// "Id": "112"
// },
// "MiddleName": "B",
// "Notes": "Here are other details.",
// "Active": true,
// "Balance": 0,
// "SyncToken": "0",
// "Suffix": "Jr",
// "CompanyName": "King Groceries",
// "FamilyName": "King",
// "PrintOnCheckName": "King Groceries",
// "sparse": false,
// "Id": "67"
// },
// "time": "2015-07-23T10:58:12.099-07:00"
// }
//
CustomerDomain := jsonResponse.StringOf('Customer.domain');
CustomerPrimaryEmailAddrAddress := jsonResponse.StringOf('Customer.PrimaryEmailAddr.Address');
CustomerDisplayName := jsonResponse.StringOf('Customer.DisplayName');
CustomerCurrencyRefName := jsonResponse.StringOf('Customer.CurrencyRef.name');
CustomerCurrencyRefValue := jsonResponse.StringOf('Customer.CurrencyRef.value');
CustomerDefaultTaxCodeRefValue := jsonResponse.StringOf('Customer.DefaultTaxCodeRef.value');
CustomerPreferredDeliveryMethod := jsonResponse.StringOf('Customer.PreferredDeliveryMethod');
CustomerGivenName := jsonResponse.StringOf('Customer.GivenName');
CustomerFullyQualifiedName := jsonResponse.StringOf('Customer.FullyQualifiedName');
CustomerBillWithParent := jsonResponse.BoolOf('Customer.BillWithParent');
CustomerTitle := jsonResponse.StringOf('Customer.Title');
CustomerJob := jsonResponse.BoolOf('Customer.Job');
CustomerBalanceWithJobs := jsonResponse.IntOf('Customer.BalanceWithJobs');
CustomerPrimaryPhoneFreeFormNumber := jsonResponse.StringOf('Customer.PrimaryPhone.FreeFormNumber');
CustomerTaxable := jsonResponse.BoolOf('Customer.Taxable');
CustomerMetaDataCreateTime := jsonResponse.StringOf('Customer.MetaData.CreateTime');
CustomerMetaDataLastUpdatedTime := jsonResponse.StringOf('Customer.MetaData.LastUpdatedTime');
CustomerBillAddrCity := jsonResponse.StringOf('Customer.BillAddr.City');
CustomerBillAddrCountry := jsonResponse.StringOf('Customer.BillAddr.Country');
CustomerBillAddrLine1 := jsonResponse.StringOf('Customer.BillAddr.Line1');
CustomerBillAddrPostalCode := jsonResponse.StringOf('Customer.BillAddr.PostalCode');
CustomerBillAddrCountrySubDivisionCode := jsonResponse.StringOf('Customer.BillAddr.CountrySubDivisionCode');
CustomerBillAddrId := jsonResponse.StringOf('Customer.BillAddr.Id');
CustomerMiddleName := jsonResponse.StringOf('Customer.MiddleName');
CustomerNotes := jsonResponse.StringOf('Customer.Notes');
CustomerActive := jsonResponse.BoolOf('Customer.Active');
CustomerBalance := jsonResponse.IntOf('Customer.Balance');
CustomerSyncToken := jsonResponse.StringOf('Customer.SyncToken');
CustomerSuffix := jsonResponse.StringOf('Customer.Suffix');
CustomerCompanyName := jsonResponse.StringOf('Customer.CompanyName');
CustomerFamilyName := jsonResponse.StringOf('Customer.FamilyName');
CustomerPrintOnCheckName := jsonResponse.StringOf('Customer.PrintOnCheckName');
CustomerSparse := jsonResponse.BoolOf('Customer.sparse');
CustomerId := jsonResponse.StringOf('Customer.Id');
time := jsonResponse.StringOf('time');
jsonToken.Free;
rest.Free;
sbAuth.Free;
jsonReq.Free;
sbRequestBody.Free;
sbResponseBody.Free;
jsonResponse.Free;
end;
// ---------------------------------------------------------------------------
begin
try
RunDemo;
except
on E: Exception do
WriteLn('Unhandled exception: ', E.ClassName, ': ', E.Message);
end;
WriteLn;
{$IFDEF MSWINDOWS}
WriteLn('Press Enter to exit...');
ReadLn;
{$ENDIF}
end.