Delphi ActiveX Stripe: List all Invoices

Back to Index

Attempts payment on an invoice out of the normal collection schedule.

Documentation: https://stripe.com/docs/api/curl#list_invoices

CURL Command

curl https://api.stripe.com/v1/invoices?limit=3 \
   -u STRIPE_SECRET_KEY: \
   -G

Delphi ActiveX Example

var
rest: TChilkatRest;
success: Integer;
bTls: Integer;
port: Integer;
bAutoReconnect: Integer;
sbResponseBody: TChilkatStringBuilder;
jsonResponse: TChilkatJsonObject;
object: WideString;
url: WideString;
has_more: Integer;
i: Integer;
count_i: Integer;
id: WideString;
amount_due: Integer;
application_fee: Integer;
attempt_count: Integer;
attempted: Integer;
billing: WideString;
charge: Integer;
closed: Integer;
currency: WideString;
customer: WideString;
date: Integer;
description: Integer;
discount: Integer;
due_date: Integer;
ending_balance: Integer;
forgiven: Integer;
linesHas_more: Integer;
linesObject: WideString;
linesUrl: WideString;
livemode: Integer;
next_payment_attempt: Integer;
number: WideString;
paid: Integer;
period_end: Integer;
period_start: Integer;
receipt_number: Integer;
starting_balance: Integer;
statement_descriptor: Integer;
subscription: Integer;
subtotal: Integer;
tax: Integer;
tax_percent: Integer;
total: Integer;
webhooks_delivered_at: Integer;
j: Integer;
count_j: Integer;
amount: Integer;
description_str: WideString;
discountable: Integer;
periodStart: Integer;
periodEnd: Integer;
planId: WideString;
planObject: WideString;
planAmount: Integer;
planCreated: Integer;
planCurrency: WideString;
planInterval: WideString;
planInterval_count: Integer;
planLivemode: Integer;
planName: WideString;
planStatement_descriptor: Integer;
planTrial_period_days: Integer;
proration: Integer;
quantity: Integer;
subscription_item: WideString;
type: WideString;

begin
rest := TChilkatRest.Create(Self);

//  URL: https://api.stripe.com/v1/invoices?limit=3
bTls := 1;
port := 443;
bAutoReconnect := 1;
success := rest.Connect('api.stripe.com',port,bTls,bAutoReconnect);
if (success <> 1) then
  begin
    Memo1.Lines.Add('ConnectFailReason: ' + IntToStr(rest.ConnectFailReason));
    Memo1.Lines.Add(rest.LastErrorText);
    Exit;
  end;

rest.SetAuthBasic('STRIPE_SECRET_KEY','');

sbResponseBody := TChilkatStringBuilder.Create(Self);
success := rest.FullRequestNoBodySb('GET','/v1/invoices?limit=3',sbResponseBody.ControlInterface);
if (success <> 1) then
  begin
    Memo1.Lines.Add(rest.LastErrorText);
    Exit;
  end;

jsonResponse := TChilkatJsonObject.Create(Self);
jsonResponse.LoadSb(sbResponseBody.ControlInterface);

object := jsonResponse.StringOf('object');
url := jsonResponse.StringOf('url');
has_more := jsonResponse.BoolOf('has_more');
i := 0;
count_i := jsonResponse.SizeOfArray('data');
while i < count_i do
  begin
    jsonResponse.I := i;
    id := jsonResponse.StringOf('data[i].id');
    object := jsonResponse.StringOf('data[i].object');
    amount_due := jsonResponse.IntOf('data[i].amount_due');
    application_fee := jsonResponse.IsNullOf('data[i].application_fee');
    attempt_count := jsonResponse.IntOf('data[i].attempt_count');
    attempted := jsonResponse.BoolOf('data[i].attempted');
    billing := jsonResponse.StringOf('data[i].billing');
    charge := jsonResponse.IsNullOf('data[i].charge');
    closed := jsonResponse.BoolOf('data[i].closed');
    currency := jsonResponse.StringOf('data[i].currency');
    customer := jsonResponse.StringOf('data[i].customer');
    date := jsonResponse.IntOf('data[i].date');
    description := jsonResponse.IsNullOf('data[i].description');
    discount := jsonResponse.IsNullOf('data[i].discount');
    due_date := jsonResponse.IsNullOf('data[i].due_date');
    ending_balance := jsonResponse.IsNullOf('data[i].ending_balance');
    forgiven := jsonResponse.BoolOf('data[i].forgiven');
    linesHas_more := jsonResponse.BoolOf('data[i].lines.has_more');
    linesObject := jsonResponse.StringOf('data[i].lines.object');
    linesUrl := jsonResponse.StringOf('data[i].lines.url');
    livemode := jsonResponse.BoolOf('data[i].livemode');
    next_payment_attempt := jsonResponse.IntOf('data[i].next_payment_attempt');
    number := jsonResponse.StringOf('data[i].number');
    paid := jsonResponse.BoolOf('data[i].paid');
    period_end := jsonResponse.IntOf('data[i].period_end');
    period_start := jsonResponse.IntOf('data[i].period_start');
    receipt_number := jsonResponse.IsNullOf('data[i].receipt_number');
    starting_balance := jsonResponse.IntOf('data[i].starting_balance');
    statement_descriptor := jsonResponse.IsNullOf('data[i].statement_descriptor');
    subscription := jsonResponse.IsNullOf('data[i].subscription');
    subtotal := jsonResponse.IntOf('data[i].subtotal');
    tax := jsonResponse.IsNullOf('data[i].tax');
    tax_percent := jsonResponse.IsNullOf('data[i].tax_percent');
    total := jsonResponse.IntOf('data[i].total');
    webhooks_delivered_at := jsonResponse.IsNullOf('data[i].webhooks_delivered_at');
    j := 0;
    count_j := jsonResponse.SizeOfArray('data[i].lines.data');
    while j < count_j do
      begin
        jsonResponse.J := j;
        id := jsonResponse.StringOf('data[i].lines.data[j].id');
        object := jsonResponse.StringOf('data[i].lines.data[j].object');
        amount := jsonResponse.IntOf('data[i].lines.data[j].amount');
        currency := jsonResponse.StringOf('data[i].lines.data[j].currency');
        description_str := jsonResponse.StringOf('data[i].lines.data[j].description');
        discountable := jsonResponse.BoolOf('data[i].lines.data[j].discountable');
        livemode := jsonResponse.BoolOf('data[i].lines.data[j].livemode');
        periodStart := jsonResponse.IntOf('data[i].lines.data[j].period.start');
        periodEnd := jsonResponse.IntOf('data[i].lines.data[j].period.end');
        planId := jsonResponse.StringOf('data[i].lines.data[j].plan.id');
        planObject := jsonResponse.StringOf('data[i].lines.data[j].plan.object');
        planAmount := jsonResponse.IntOf('data[i].lines.data[j].plan.amount');
        planCreated := jsonResponse.IntOf('data[i].lines.data[j].plan.created');
        planCurrency := jsonResponse.StringOf('data[i].lines.data[j].plan.currency');
        planInterval := jsonResponse.StringOf('data[i].lines.data[j].plan.interval');
        planInterval_count := jsonResponse.IntOf('data[i].lines.data[j].plan.interval_count');
        planLivemode := jsonResponse.BoolOf('data[i].lines.data[j].plan.livemode');
        planName := jsonResponse.StringOf('data[i].lines.data[j].plan.name');
        planStatement_descriptor := jsonResponse.IsNullOf('data[i].lines.data[j].plan.statement_descriptor');
        planTrial_period_days := jsonResponse.IsNullOf('data[i].lines.data[j].plan.trial_period_days');
        proration := jsonResponse.BoolOf('data[i].lines.data[j].proration');
        quantity := jsonResponse.IntOf('data[i].lines.data[j].quantity');
        subscription := jsonResponse.IsNullOf('data[i].lines.data[j].subscription');
        subscription_item := jsonResponse.StringOf('data[i].lines.data[j].subscription_item');
        type := jsonResponse.StringOf('data[i].lines.data[j].type');
        j := j + 1;
      end;

    i := i + 1;
  end;

Sample JSON Response Body

{
  "object": "list",
  "url": "/v1/invoices",
  "has_more": false,
  "data": [
    {
      "id": "in_1BnETLGswQrCoh0X6M67Qy9c",
      "object": "invoice",
      "amount_due": 0,
      "application_fee": null,
      "attempt_count": 0,
      "attempted": false,
      "billing": "charge_automatically",
      "charge": null,
      "closed": false,
      "currency": "usd",
      "customer": "cus_CBbggkUyLoz3pe",
      "date": 1516662783,
      "description": null,
      "discount": null,
      "due_date": null,
      "ending_balance": null,
      "forgiven": false,
      "lines": {
        "data": [
          {
            "id": "sub_CBbgC3EaFZqN3Q",
            "object": "line_item",
            "amount": 999,
            "currency": "usd",
            "description": "1x Silver Express (at $9.99)",
            "discountable": true,
            "livemode": true,
            "metadata": {},
            "period": {
              "start": 1521760383,
              "end": 1524438783
            },
            "plan": {
              "id": "gold",
              "object": "plan",
              "amount": 2000,
              "created": 1516662783,
              "currency": "usd",
              "interval": "month",
              "interval_count": 1,
              "livemode": false,
              "metadata": {},
              "name": "T-shirt",
              "statement_descriptor": null,
              "trial_period_days": null
            },
            "proration": false,
            "quantity": 1,
            "subscription": null,
            "subscription_item": "si_CBbgZxCVF3Ha7P",
            "type": "subscription"
          }
        ],
        "has_more": false,
        "object": "list",
        "url": "/v1/invoices/in_1BnETLGswQrCoh0X6M67Qy9c/lines"
      },
      "livemode": false,
      "metadata": {},
      "next_payment_attempt": 1516666383,
      "number": "330a34b8d5-0001",
      "paid": false,
      "period_end": 1516662783,
      "period_start": 1516662783,
      "receipt_number": null,
      "starting_balance": 0,
      "statement_descriptor": null,
      "subscription": null,
      "subtotal": 0,
      "tax": null,
      "tax_percent": null,
      "total": 0,
      "webhooks_delivered_at": null
    }
  ]
}