Sample code for 30+ languages & platforms
Zig

QuickBooks - Create an Account

See more QuickBooks Examples

Demonstrates how to send an JSON request to create a QuickBooks account.

Chilkat Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    // This example assumes the Chilkat API to have been previously unlocked.
    // See Global Unlock Sample for sample code.

    // First get our previously obtained OAuth2 access token.
    const json_token = try chilkat.JsonObject.init();
    defer json_token.deinit();
    try json_token.loadFile("qa_data/tokens/qb-access-token.json");

    const rest = try chilkat.Rest.init();
    defer rest.deinit();

    const b_auto_reconnect = true;
    rest.connect("sandbox-quickbooks.api.intuit.com", 443, true, b_auto_reconnect) catch {
        std.debug.print("{s}\n", .{try rest.getLastErrorText(alloc)});
        return;
    };

    const sb_auth = try chilkat.StringBuilder.init();
    defer sb_auth.deinit();
    sb_auth.append("Bearer ") catch {};
    sb_auth.append(try json_token.stringOf(alloc, "access_token")) catch {};
    rest.setAuthorization(try sb_auth.getAsString(alloc));

    const json_request = try chilkat.JsonObject.init();
    defer json_request.deinit();
    json_request.appendString("AccountType", "Credit Card") catch {};
    json_request.appendString("Name", "Banana Republic") catch {};
    const request_body = try json_request.emit(alloc);

    // "123146096291789" is the company ID.
    const sb_path = try chilkat.StringBuilder.init();
    defer sb_path.deinit();
    sb_path.append("/v3/company/123146096291789/account?minorversion=45") catch {};

    rest.addHeader("Content-Type", "application/json") catch {};
    rest.addHeader("Accept", "application/json") catch {};
    rest.setAllowHeaderFolding(false);

    const response_body = rest.fullRequestString(alloc, "POST", try sb_path.getAsString(alloc), request_body) catch {
        std.debug.print("{s}\n", .{try rest.getLastErrorText(alloc)});
        return;
    };

    // We should expect a 200 response if successful.
    if (rest.getResponseStatusCode() != 200) {
        std.debug.print("Request Header: \n", .{});
        std.debug.print("{s}\n", .{try rest.getLastRequestHeader(alloc)});
        std.debug.print("----\n", .{});
        std.debug.print("Response StatusCode = {d}\n", .{rest.getResponseStatusCode()});
        std.debug.print("Response StatusLine: {s}\n", .{try rest.getResponseStatusText(alloc)});
        std.debug.print("Response Header:\n", .{});
        std.debug.print("{s}\n", .{try rest.getResponseHeader(alloc)});
        std.debug.print("{s}\n", .{response_body});
        return;
    }

    const json_response = try chilkat.JsonObject.init();
    defer json_response.deinit();
    json_response.load(response_body) catch {};
    json_response.setEmitCompact(false);
    std.debug.print("{s}\n", .{try json_response.emit(alloc)});
    std.debug.print("Success.\n", .{});

    // A sample JSON response:

    // Use this online tool to generate parsing code from sample JSON:
    // Generate Parsing Code from JSON

    // {
    //   "Account": {
    //     "Name": "Banana Republic",
    //     "SubAccount": false,
    //     "FullyQualifiedName": "Banana Republic",
    //     "Active": true,
    //     "Classification": "Liability",
    //     "AccountType": "Credit Card",
    //     "AccountSubType": "CreditCard",
    //     "CurrentBalance": 0,
    //     "CurrentBalanceWithSubAccounts": 0,
    //     "CurrencyRef": {
    //       "value": "USD",
    //       "name": "United States Dollar"
    //     },
    //     "domain": "QBO",
    //     "sparse": false,
    //     "Id": "97",
    //     "SyncToken": "0",
    //     "MetaData": {
    //       "CreateTime": "2016-10-25T05:07:12-07:00",
    //       "LastUpdatedTime": "2016-10-25T05:07:12-07:00"
    //     }
    //   },
    //   "time": "2016-10-25T05:07:11.714-07:00"
    // }
}