Files
api/services/nginx/app/modules/stripe/endpoints/stripe_endpoint_invoice.php
T
Jepp9350 53b61654bf Add Stripe invoice generation and customer management
Introduced functionality for creating and managing invoices using Stripe APIs, replacing the previous payment link system. Added customer account creation and retrieval, invoice line-item handling, and extended database object structures to support invoices. Updated order routing to include Stripe customer and invoice details.
2025-02-19 17:25:19 +01:00

99 lines
2.8 KiB
PHP

<?php
namespace stripe\endpoints;
use Exception;
use objects\orders_o;
use Stripe\Exception\ApiErrorException;
use stripe\helpers\stripe_line_item;
use stripe\helpers\stripe_line_items;
use Stripe\Invoice;
use traits\stripe_endpoint_t;
class stripe_endpoint_invoice
{
use stripe_endpoint_t;
/**
* Retrieve a payment link
* @param string $id
* @return Invoice
* @throws ApiErrorException
* @throws Exception
*/
public function retrieve(string $id): Invoice
{
return self::getClient()->invoices->retrieve($id);
}
/**
* @throws ApiErrorException
* @throws Exception
*/
public function generate(int $order_id, string $stripe_customer_id): Invoice
{
$order = (new orders_o())->select($order_id);
$order->requireSelected();
// Get the order items
$order_items = $order->getOrderItems($order_id);
// Create a new line items object
$line_items = new stripe_line_items('invoice');
// Loop through the order items
foreach ( $order_items as $order_item ) {
// Add the order item to the line items
$line_items->add(
new stripe_line_item(
$order_item['product_id'],
$order_item['price'],
$order_item['quantity']
)
);
}
// Create the payment link
return $this->create(
$line_items,
$stripe_customer_id,
[
'order_id' => $order_id,
'customer_id' => $stripe_customer_id
]
);
}
/**
* Create a new payment link
* @param stripe_line_items $line_items
* @param string $stripe_customer_id
* @param array $metadata Additional metadata
* @return Invoice
* @throws ApiErrorException
* @throws Exception
*/
public function create(stripe_line_items $line_items, string $stripe_customer_id, array $metadata = []): Invoice
{
$invoice = self::getClient()->invoices->create([
'customer' => $stripe_customer_id,
'collection_method' => 'send_invoice',
'days_until_due' => 30,
'metadata' => $metadata,
'auto_advance' => true,
//'payment_settings' => [
// 'payment_method_types' => [
// 'card',
// 'paypal'
// ],
//],
]);
// Add the line items to the invoice
foreach ( $line_items->get() as $line_item ) {
self::getClient()->invoiceItems->create([
'customer' => $stripe_customer_id,
'invoice' => $invoice->id,
'price' => $line_item['price'],
]);
}
// Finalize the invoice
return $invoice->finalizeInvoice();
}
}