Delphi ActiveX Stripe: Create an Invoice

Back to Index

Creates a customer invoice object.

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

CURL Command

curl https://api.stripe.com/v1/invoices \
   -u STRIPE_SECRET_KEY: \
   -d customer=cus_CBbg9PmQ9sLbmo \
   -X POST

Delphi ActiveX Example

var
rest: TChilkatRest;
success: Integer;
bTls: Integer;
port: Integer;
bAutoReconnect: Integer;
strResponseBody: WideString;
jsonResponse: TChilkatJsonObject;
id: WideString;
object: 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;
i: Integer;
count_i: Integer;
amount: Integer;
description_str: WideString;
discountable: Integer;
periodStart: Integer;
periodEnd: Integer;
plan: Integer;
proration: Integer;
quantity: Integer;
type: WideString;

begin
rest := TChilkatRest.Create(Self);

//  URL: https://api.stripe.com/v1/invoices
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','');

rest.AddQueryParam('customer','cus_CBbg9PmQ9sLbmo');

strResponseBody := rest.FullRequestFormUrlEncoded('POST','/v1/invoices');
if (rest.LastMethodSuccess <> 1) then
  begin
    Memo1.Lines.Add(rest.LastErrorText);
    Exit;
  end;

jsonResponse := TChilkatJsonObject.Create(Self);
jsonResponse.Load(strResponseBody);

id := jsonResponse.StringOf('id');
object := jsonResponse.StringOf('object');
amount_due := jsonResponse.IntOf('amount_due');
application_fee := jsonResponse.IsNullOf('application_fee');
attempt_count := jsonResponse.IntOf('attempt_count');
attempted := jsonResponse.BoolOf('attempted');
billing := jsonResponse.StringOf('billing');
charge := jsonResponse.IsNullOf('charge');
closed := jsonResponse.BoolOf('closed');
currency := jsonResponse.StringOf('currency');
customer := jsonResponse.StringOf('customer');
date := jsonResponse.IntOf('date');
description := jsonResponse.IsNullOf('description');
discount := jsonResponse.IsNullOf('discount');
due_date := jsonResponse.IsNullOf('due_date');
ending_balance := jsonResponse.IsNullOf('ending_balance');
forgiven := jsonResponse.BoolOf('forgiven');
linesHas_more := jsonResponse.BoolOf('lines.has_more');
linesObject := jsonResponse.StringOf('lines.object');
linesUrl := jsonResponse.StringOf('lines.url');
livemode := jsonResponse.BoolOf('livemode');
next_payment_attempt := jsonResponse.IntOf('next_payment_attempt');
number := jsonResponse.StringOf('number');
paid := jsonResponse.BoolOf('paid');
period_end := jsonResponse.IntOf('period_end');
period_start := jsonResponse.IntOf('period_start');
receipt_number := jsonResponse.IsNullOf('receipt_number');
starting_balance := jsonResponse.IntOf('starting_balance');
statement_descriptor := jsonResponse.IsNullOf('statement_descriptor');
subscription := jsonResponse.IsNullOf('subscription');
subtotal := jsonResponse.IntOf('subtotal');
tax := jsonResponse.IsNullOf('tax');
tax_percent := jsonResponse.IsNullOf('tax_percent');
total := jsonResponse.IntOf('total');
webhooks_delivered_at := jsonResponse.IsNullOf('webhooks_delivered_at');
i := 0;
count_i := jsonResponse.SizeOfArray('lines.data');
while i < count_i do
  begin
    jsonResponse.I := i;
    id := jsonResponse.StringOf('lines.data[i].id');
    object := jsonResponse.StringOf('lines.data[i].object');
    amount := jsonResponse.IntOf('lines.data[i].amount');
    currency := jsonResponse.StringOf('lines.data[i].currency');
    description_str := jsonResponse.StringOf('lines.data[i].description');
    discountable := jsonResponse.BoolOf('lines.data[i].discountable');
    livemode := jsonResponse.BoolOf('lines.data[i].livemode');
    periodStart := jsonResponse.IntOf('lines.data[i].period.start');
    periodEnd := jsonResponse.IntOf('lines.data[i].period.end');
    plan := jsonResponse.IsNullOf('lines.data[i].plan');
    proration := jsonResponse.BoolOf('lines.data[i].proration');
    quantity := jsonResponse.IsNullOf('lines.data[i].quantity');
    subscription := jsonResponse.IsNullOf('lines.data[i].subscription');
    type := jsonResponse.StringOf('lines.data[i].type');
    i := i + 1;
  end;

Sample JSON Response Body

{
  "id": "in_1BnETLGswQrCoh0XR7p1RCtV",
  "object": "invoice",
  "amount_due": 0,
  "application_fee": null,
  "attempt_count": 0,
  "attempted": false,
  "billing": "charge_automatically",
  "charge": null,
  "closed": false,
  "currency": "usd",
  "customer": "cus_CBbg9PmQ9sLbmo",
  "date": 1516662783,
  "description": null,
  "discount": null,
  "due_date": null,
  "ending_balance": null,
  "forgiven": false,
  "lines": {
    "data": [
      {
        "id": "ii_1BnETLGswQrCoh0XsAcSzoLf",
        "object": "line_item",
        "amount": 0,
        "currency": "usd",
        "description": "My First Invoice Item (created for API docs)",
        "discountable": true,
        "livemode": false,
        "metadata": {},
        "period": {
          "start": 1516662783,
          "end": 1516662783
        },
        "plan": null,
        "proration": false,
        "quantity": null,
        "subscription": null,
        "type": "invoiceitem"
      }
    ],
    "has_more": false,
    "object": "list",
    "url": "/v1/invoices/in_1BnETLGswQrCoh0XR7p1RCtV/lines"
  },
  "livemode": false,
  "metadata": {},
  "next_payment_attempt": 1516666383,
  "number": "36eba31eaa-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
}