PHPackages                             selectwin/sdk - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [API Development](/categories/api)
4. /
5. selectwin/sdk

ActiveLibrary[API Development](/categories/api)

selectwin/sdk
=============

Official Selectwin PHP SDK — payments (card, PIX, boleto), subscriptions, webhooks.

v0.1.2(1mo ago)00MITPHPPHP ^8.1CI passing

Since Jul 3Pushed 1mo agoCompare

[ Source](https://github.com/selectwin/sdk-php)[ Packagist](https://packagist.org/packages/selectwin/sdk)[ Docs](https://selectwin.io/docs)[ RSS](/packages/selectwin-sdk/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (3)Versions (2)Used By (0)

selectwin/sdk (PHP)
===================

[](#selectwinsdk-php)

Official **Selectwin** PHP SDK — payments (credit card, PIX, boleto), subscriptions, wallets, webhooks and more.

> Status: **early / work in progress** (`0.1.0`). Generated core (openapi-generator, Guzzle) + a hand-written DX shell (typed exceptions, retries, idempotency, pagination, webhook verification).

```
composer require selectwin/sdk
```

Quickstart
----------

[](#quickstart)

```
use Selectwin\SelectwinClient;
use Selectwin\Exception\CardException;

$sw = new SelectwinClient(getenv('SELECTWIN_API_KEY')); // sk_test_… / sk_live_…

// Create a PIX transaction (amounts in cents). Pass an array or a generated model:
$tx = $sw->transactions->create([
    'amount' => 9990,
    'payment' => ['method' => 'pix', 'currency' => 'BRL'],
]);

// id / id+body aliases
$one = $sw->transactions->retrieve('tra_…');
$sw->subscriptions->pause('subs_…');

// Typed exceptions — branch on the class / getSelectwinCode(), never the message
try {
    $sw->transactions->create([/* … */]);
} catch (CardException $e) {
    echo $e->getDisplayMessage(), $e->isReversible(); // buyer-facing + retryable
}
```

Every resource exposes **Concise aliases** (`create`, `retrieve`, `update`, `list`, `delete`, plus verbs like `$sw->subscriptions->pause('subs_…')`). The full generated API is always reachable via `->raw()`:

```
$sw->transactions->raw()->createTransaction($request);
```

### Pagination

[](#pagination)

Top-level `list()` returns a `Paginator` — iterate every item across pages, grab the first page, or collect into an array:

```
foreach ($sw->transactions->list(['limit' => 100]) as $tx) {
    // every transaction across all pages
}

$firstPage = $sw->transactions->list(['limit' => 20])->first(); // page object (getData(), getHasMore())
$some = $sw->customers->list()->toArray(500);                    // collect, optionally capped
```

### Webhooks

[](#webhooks)

```
// $rawBody MUST be the exact bytes received (do not re-serialize)
$event = $sw->constructEvent(
    $rawBody,
    $_SERVER['HTTP_X_SELECTWIN_SIGNATURE'] ?? null,
    getenv('SELECTWIN_WEBHOOK_SECRET'), // whsec_…
);
if ($event->type === 'transaction.approved') {
    $object = $event->object;
}
```

`Selectwin\WebhookEvents::ALL` is the authoritative catalog; `WebhookEvents::isValid($type)`validates a value. `$sw->webhooks` also manages endpoints/events/dispatches.

What the SDK adds over the raw generated client
-----------------------------------------------

[](#what-the-sdk-adds-over-the-raw-generated-client)

The package is a **generated core** (from the OpenAPI v2.0.0 spec, namespace `Selectwin\Api`/ `Selectwin\Model`) + a **hand-written DX shell**:

- **Typed client** — `new SelectwinClient($key)` → `$sw->transactions`, `$sw->subscriptions`, …
- **Concise aliases** per resource accepting an array or a generated model; `->raw()` for the full generated surface.
- **Typed exceptions** by HTTP status / `error.code`: `CardException` (402, `getDisplayMessage()`/`isReversible()`), `ValidationException` (`getParams()`), `RateLimitException` (`getRetryAfter()`), `AuthenticationException`, `PermissionDeniedException`, `NotFoundException`, `ConflictException`, `ApiErrorException`, `ApiConnectionException`.
- **Auto-retries** (429/5xx/network) with backoff honouring `Retry-After` (Guzzle handler stack).
- **Idempotency** — an `X-Idempotency-Key` is added to every mutation.
- **Pagination** — `Paginator` (iterate, `first()`, `toArray()`, `pages()`).
- **Webhook verification** — `constructEvent` (HMAC-SHA256 of the raw body, constant-time).

Auth is the `selectkey` header; the environment (sandbox/production) is resolved from the key prefix (`sk_test_` / `sk_live_`).

Architecture
------------

[](#architecture)

```
lib/                       # openapi-generator core (Selectwin\Api, \Model, Configuration…) — synced; DO NOT edit
src/
  SelectwinClient.php      # the client — wires Configuration + Guzzle into every resource
  Resource/                # GENERATED resource wrappers (gen_resources.php) — DO NOT edit
  Exception/Exceptions.php # typed exception hierarchy + ErrorFactory
  Http/ClientFactory.php   # Guzzle handler stack (retries) + idempotency middleware
  Pagination/Paginator.php
  Webhook/                 # WebhookSignature (constructEvent) + Event
  WebhookEvents.php        # GENERATED Event Catalog

```

`lib/` and `src/` share the `Selectwin\` namespace via two PSR-4 directories. Cross-cutting concerns are injected once into the Guzzle client + `Configuration`, so every endpoint inherits them and new endpoints work automatically on regen.

Development
-----------

[](#development)

```
composer install
php scripts/sync_core.php          # copy the generated core into lib/ (from selectwin-sdks)
php scripts/gen_resources.php      # regenerate src/Resource/*
php scripts/gen_webhook_events.php # regenerate src/WebhookEvents.php
vendor/bin/phpunit --testsuite unit
SELECTWIN_SANDBOX_KEY=sk_test_... vendor/bin/phpunit --testsuite integration
```

Publishing (Packagist)
----------------------

[](#publishing-packagist)

Packagist serves versions straight from git tags — nothing is uploaded. One-time setup:

1. Sign in to  with GitHub and **Submit** the repo URL (`https://github.com/selectwin/sdk-php`). Packagist installs a webhook so every pushed tag becomes a new version automatically.
2. `git tag v0.1.0 && git push origin v0.1.0`.

`.github/workflows/release.yml` runs the test suite on each tag and (optionally, if the `PACKAGIST_USERNAME` / `PACKAGIST_API_TOKEN` secrets are set) pings Packagist to refresh immediately — otherwise it relies on the webhook.

Roadmap
-------

[](#roadmap)

- Packagist release (above) once the API stabilises; a Laravel package (`selectwin/laravel`) on top.

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance90

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity32

Early-stage or recently created project

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

49d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/117543300?v=4)[Selectwin](/maintainers/selectwin)[@selectwin](https://github.com/selectwin)

---

Tags

boletobrasilbrazilcomposerfintechpayment-gatewaypaymentsphppixsdkselectwinsubscriptionswebhooksapisdkwebhookspaymentssubscriptionsboletopixselectwin

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/selectwin-sdk/health.svg)

```
[![Health](https://phpackages.com/badges/selectwin-sdk/health.svg)](https://phpackages.com/packages/selectwin-sdk)
```

###  Alternatives

[eslazarev/wildberries-sdk

Wildberries OpenAPI clients (generated).

353.6k](/packages/eslazarev-wildberries-sdk)[aws/aws-sdk-php

AWS SDK for PHP - Use Amazon Web Services in your PHP project

6.2k555.0M2.8k](/packages/aws-aws-sdk-php)[fingerprint/fingerprint-pro-server-api-sdk

Fingerprint Server API allows you to get, search, and update Events in a server environment. It can be used for data exports, decision-making, and data analysis scenarios. Server API is intended for server-side usage, it's not intended to be used from the client side, whether it's a browser or a mobile device. The API also supports collection of Automation Intelligence for requests to your server in edge, pre-origin, or middleware contexts.

33302.1k1](/packages/fingerprint-fingerprint-pro-server-api-sdk)[onesignal/onesignal-php-api

A powerful way to send personalized messages at scale and build effective customer engagement strategies. Learn more at onesignal.com

37234.5k4](/packages/onesignal-onesignal-php-api)[bushlanov-dev/max-bot-api-client-php

Max Bot API Client library

488.7k](/packages/bushlanov-dev-max-bot-api-client-php)[jdcloud-api/jdcloud-sdk-php

JDCloud SDK for PHP

115.2k](/packages/jdcloud-api-jdcloud-sdk-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
