Files
api/services/nginx/app/objects/stripe_module_customers_o.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

104 lines
2.7 KiB
PHP

<?php
namespace objects;
use classes\db;
use classes\object_property;
use classes\stripe;
use Exception;
use Stripe\Exception\ApiErrorException;
use traits\db_object_t;
class stripe_module_customers_o extends db
{
use db_object_t;
public object_property $email;
public object_property $customer_id;
public object_property $created_at;
private bool $paid;
public function structure(): void
{
$this->setTable('stripe_module_customers');
}
/**
* Add a customer to the database
* @param string $email The customer's email address
* @param string $customer_id The Stripe customer ID
* @return void
* @throws Exception If the object was not created successfully
*/
public function add(string $email, string $customer_id): void
{
$tmp_id = self::add_object([
'email' => $email,
'customer_id' => $customer_id,
]);
$this->id = $tmp_id;
self::getObjectProperties();
self::objectChanged();
}
public function getObjectProperties(): void
{
$this->email = new object_property($this->table, $this->id, 'email', 'string', false);
$this->customer_id = new object_property($this->table, $this->id, 'customer_id', 'string', false);
$this->created_at = new object_property($this->table, $this->id, 'created_at', 'timestamp', false);
}
public function objectChanged(): void
{
//TODO: Add cache invalidation
}
/**
* @throws ApiErrorException
*/
public function asArray(): array
{
$object = self::retrieveCustomer();
return [
'id' => (int)$this->id,
'email' => $this->email->value(),
'customer_id' => $this->customer_id->value(),
'created_at' => $this->created_at->value(),
'object' => $object
];
}
/**
* @throws ApiErrorException
* @throws Exception
*/
public function retrieveCustomer(): object
{
// Validate the object
self::requireSelected();
// Return the payment link
return (new stripe())->customers->retrieve($this->customer_id->value());
}
/**
* Check if a customer has an account
* @param string $email
* @return bool
*/
public function doesCustomerHaveAccount(string $email): bool
{
return (bool)self::getFieldsWhere(['email' => $email], ['id']);
}
/**
* Get the customer ID from the email address
* @param string $email
* @return string
*/
public function getCustomerId(string $email): string
{
return self::getFieldsWhere(['email' => $email], ['customer_id'])[0]['customer_id'];
}
}