jeffersongoncalves / laravel-partnerstack
PartnerStack partner and affiliate program API integration for Laravel
Package info
github.com/jeffersongoncalves/laravel-partnerstack
pkg:composer/jeffersongoncalves/laravel-partnerstack
Fund package maintenance!
Requires
- php: ^8.2
- illuminate/http: ^12.0|^13.0
- illuminate/support: ^12.0|^13.0
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- larastan/larastan: ^3.0
- laravel/pint: ^1.21
- orchestra/testbench: ^10.0|^11.0
- pestphp/pest: ^3.0|^4.0
- pestphp/pest-plugin-laravel: ^3.0|^4.0
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Laravel PartnerStack
A Laravel client for the PartnerStack partner and affiliate program API. A fluent PartnerStack facade covers partnerships, customers, transactions, deals, actions, rewards, leads, groups and webhooks, authenticates every request with your public and secret keys as HTTP Basic credentials, and throws a PartnerStackException on a non-2xx response instead of returning a silent error array.
Features
- Partnerships —
listPartnerships(),getPartnership(),createPartnership(),updatePartnership() - Customers —
listCustomers(),getCustomer(),createCustomer(),updateCustomer(),deleteCustomer() - Transactions —
listTransactions(),getTransaction(),createTransaction(),deleteTransaction() - Deals —
listDeals(),getDeal(),createDeal(),updateDeal(),archiveDeal() - Actions —
listActions(),createAction() - Rewards —
listRewards(),createReward() - Leads —
listLeads(),getLead(),createLead(),updateLead() - Groups —
listGroups() - Webhooks —
listWebhooks(),getWebhook(),createWebhook(),deleteWebhook() - Thin by design — every method returns the raw decoded JSON response as an array, no DTOs
- Fails loud — a non-2xx API response throws
PartnerStackExceptioncarrying the API's error message and HTTP status code
Installation
You can install the package via composer:
composer require jeffersongoncalves/laravel-partnerstack
Optionally publish the config file:
php artisan vendor:publish --tag="partnerstack-config"
Configuration
Add to your .env:
PARTNERSTACK_PUBLIC_KEY=your-public-key PARTNERSTACK_SECRET_KEY=your-secret-key
Both keys live in your PartnerStack dashboard under Settings > Integrations > API keys.
Config Options
// config/partnerstack.php return [ 'public_key' => env('PARTNERSTACK_PUBLIC_KEY'), 'secret_key' => env('PARTNERSTACK_SECRET_KEY'), 'base_url' => env('PARTNERSTACK_BASE_URL', 'https://api.partnerstack.com/api/v2'), ];
Usage
use JeffersonGoncalves\PartnerStack\Exceptions\PartnerStackException; use JeffersonGoncalves\PartnerStack\Facades\PartnerStack;
Every list*() method accepts the API's cursor pagination options — limit, starting_after, ending_before and order_by:
PartnerStack::listPartnerships(['limit' => 50, 'order_by' => 'created_at']);
Partnerships
PartnerStack::listPartnerships(); PartnerStack::getPartnership('partnership-key'); PartnerStack::createPartnership([ 'email' => 'jane@example.com', 'group_key' => 'group-key', 'first_name' => 'Jane', 'last_name' => 'Doe', ]); PartnerStack::updatePartnership('partnership-key', ['name' => 'Jane Doe']);
Customers
PartnerStack::listCustomers(); PartnerStack::getCustomer('customer-key'); PartnerStack::createCustomer([ 'email' => 'john@example.com', 'partner_key' => 'partner-key', 'customer_key' => 'your-internal-id', ]); PartnerStack::updateCustomer('customer-key', ['name' => 'John Doe']); PartnerStack::deleteCustomer('customer-key');
Transactions
Amounts are in cents.
PartnerStack::listTransactions(); PartnerStack::getTransaction('transaction-key'); PartnerStack::createTransaction([ 'customer_key' => 'customer-key', 'amount' => 4990, 'currency' => 'usd', 'category' => 'subscription', ]); PartnerStack::deleteTransaction('transaction-key');
Deals
PartnerStack::listDeals(); PartnerStack::getDeal('deal-key'); PartnerStack::createDeal([ 'partner_key' => 'partner-key', 'name' => 'Acme Corp', 'amount' => 250000, 'stage' => 'proposal', ]); PartnerStack::updateDeal('deal-key', ['stage' => 'won', 'status' => 'closed']); PartnerStack::archiveDeal('deal-key');
Actions
PartnerStack::listActions(); PartnerStack::createAction([ 'customer_key' => 'customer-key', 'key' => 'signup', 'value' => 1, ]);
Rewards
Amounts are in cents.
PartnerStack::listRewards(); PartnerStack::createReward([ 'partner_key' => 'partner-key', 'amount' => 10000, 'description' => 'Q1 bonus', 'currency' => 'usd', ]);
Leads
PartnerStack::listLeads(); PartnerStack::getLead('lead-key'); PartnerStack::createLead([ 'partner_key' => 'partner-key', 'email' => 'lead@example.com', 'company' => 'Acme Corp', ]); PartnerStack::updateLead('lead-key', ['status' => 'qualified']);
Groups
PartnerStack::listGroups();
Webhooks
PartnerStack::listWebhooks(); PartnerStack::getWebhook('webhook-key'); PartnerStack::createWebhook([ 'target' => 'https://example.com/hooks/partnerstack', 'events' => ['customer.created', 'transaction.created'], ]); PartnerStack::deleteWebhook('webhook-key');
Handling errors
try { $partnership = PartnerStack::getPartnership('partnership-key'); } catch (PartnerStackException $e) { // $e->getMessage() — the API's error message, or the raw response body // $e->statusCode — the HTTP status code returned by PartnerStack }
Testing
composer test
Static Analysis
composer analyse
Code Formatting
composer format
Changelog
Please see CHANGELOG for more information on what has changed recently.
Contributing
Please see CONTRIBUTING for details.
Security
Please review our security policy on how to report security vulnerabilities.
Credits
License
The MIT License (MIT). Please see License File for more information.
