Xojo Plugin Stripe: Pay an Invoice

Back to Index

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

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

CURL Command

curl https://api.stripe.com/v1/invoices/in_1BnETLGswQrCoh0X6M67Qy9c/pay \
   -u STRIPE_SECRET_KEY: \
   -X POST

Xojo Plugin Example

Dim rest As New Chilkat.Rest
Dim success As Boolean

//  URL: https://api.stripe.com/v1/invoices/in_1BnETLGswQrCoh0X6M67Qy9c/pay
Dim bTls As Boolean
bTls = True
Dim port As Int32
port = 443
Dim bAutoReconnect As Boolean
bAutoReconnect = True
success = rest.Connect("api.stripe.com",port,bTls,bAutoReconnect)
If (success <> True) Then
    System.DebugLog("ConnectFailReason: " + Str(rest.ConnectFailReason))
    System.DebugLog(rest.LastErrorText)
    Return
End If

rest.SetAuthBasic("STRIPE_SECRET_KEY","")

Dim sbResponseBody As New Chilkat.StringBuilder
success = rest.FullRequestNoBodySb("POST","/v1/invoices/in_1BnETLGswQrCoh0X6M67Qy9c/pay",sbResponseBody)
If (success <> True) Then
    System.DebugLog(rest.LastErrorText)
    Return
End If

Dim jsonResponse As New Chilkat.JsonObject
jsonResponse.LoadSb(sbResponseBody)

Dim id As String
Dim object As String
Dim amount_due As Int32
Dim application_fee As Boolean
Dim attempt_count As Int32
Dim attempted As Boolean
Dim billing As String
Dim charge As String
Dim closed As Boolean
Dim currency As String
Dim customer As String
Dim date As Int32
Dim description As Boolean
Dim discount As Boolean
Dim due_date As Boolean
Dim ending_balance As Boolean
Dim forgiven As Boolean
Dim linesHas_more As Boolean
Dim linesObject As String
Dim linesUrl As String
Dim livemode As Boolean
Dim next_payment_attempt As Int32
Dim number As String
Dim paid As Boolean
Dim period_end As Int32
Dim period_start As Int32
Dim receipt_number As Boolean
Dim starting_balance As Int32
Dim statement_descriptor As Boolean
Dim subscription As Boolean
Dim subtotal As Int32
Dim tax As Boolean
Dim tax_percent As Boolean
Dim total As Int32
Dim webhooks_delivered_at As Boolean
Dim last_payment_attempt As Boolean
Dim i As Int32
Dim count_i As Int32
Dim amount As Int32
Dim description_str As String
Dim discountable As Boolean
Dim periodStart As Int32
Dim periodEnd As Int32
Dim planId As String
Dim planObject As String
Dim planAmount As Int32
Dim planCreated As Int32
Dim planCurrency As String
Dim planInterval As String
Dim planInterval_count As Int32
Dim planLivemode As Boolean
Dim planName As String
Dim planStatement_descriptor As Boolean
Dim planTrial_period_days As Boolean
Dim proration As Boolean
Dim quantity As Int32
Dim subscription_item As String
Dim type As String

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.StringOf("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")
last_payment_attempt = jsonResponse.IsNullOf("last_payment_attempt")
i = 0
count_i = jsonResponse.SizeOfArray("lines.data")
While i < count_i
    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")
    planId = jsonResponse.StringOf("lines.data[i].plan.id")
    planObject = jsonResponse.StringOf("lines.data[i].plan.object")
    planAmount = jsonResponse.IntOf("lines.data[i].plan.amount")
    planCreated = jsonResponse.IntOf("lines.data[i].plan.created")
    planCurrency = jsonResponse.StringOf("lines.data[i].plan.currency")
    planInterval = jsonResponse.StringOf("lines.data[i].plan.interval")
    planInterval_count = jsonResponse.IntOf("lines.data[i].plan.interval_count")
    planLivemode = jsonResponse.BoolOf("lines.data[i].plan.livemode")
    planName = jsonResponse.StringOf("lines.data[i].plan.name")
    planStatement_descriptor = jsonResponse.IsNullOf("lines.data[i].plan.statement_descriptor")
    planTrial_period_days = jsonResponse.IsNullOf("lines.data[i].plan.trial_period_days")
    proration = jsonResponse.BoolOf("lines.data[i].proration")
    quantity = jsonResponse.IntOf("lines.data[i].quantity")
    subscription = jsonResponse.IsNullOf("lines.data[i].subscription")
    subscription_item = jsonResponse.StringOf("lines.data[i].subscription_item")
    type = jsonResponse.StringOf("lines.data[i].type")
    i = i + 1
Wend

Sample JSON Response Body

{
  "id": "in_1BnETLGswQrCoh0X6M67Qy9c",
  "object": "invoice",
  "amount_due": 0,
  "application_fee": null,
  "attempt_count": 0,
  "attempted": true,
  "billing": "charge_automatically",
  "charge": "ch_1BnETLGswQrCoh0XYoMbCKZ3",
  "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": true,
  "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,
  "last_payment_attempt": null
}