tinker/payments-php-sdk
Composer 安装命令:
composer require tinker/payments-php-sdk
包简介
Official PHP SDK for Tinker Payments API
README 文档
README
Official PHP SDK for Tinker Payments API.
Installation
composer require tinker/payments-php-sdk
Requirements
- PHP 8.1 or higher
- PSR-18 compatible HTTP client (optional, defaults to built-in cURL)
- PSR-17 compatible HTTP factories (optional, defaults to built-in cURL)
Quick Start
use Tinker\TinkerPayments; $tinker = new TinkerPayments( apiPublicKey: 'your-public-key', apiSecretKey: 'your-secret-key' );
The SDK auto-selects API environment by key prefix:
pk_test_/sk_test_-> sandbox (https://sandbox-api.tinkerpayments.com/v1)pk_live_/sk_live_-> production (https://api.tinkerpayments.com/v1)
You can also override the API base URL explicitly:
$tinker = new TinkerPayments( apiPublicKey: 'pk_test_xxx', apiSecretKey: 'sk_test_xxx', baseUrl: 'http://localhost:8080/v1' // or http://localhost:8080 );
Usage
All standardized API responses follow:
{
"success": true,
"data": {},
"meta": {
"request_id": "uuid",
"timestamp": "2026-02-11T22:52:45Z",
"environment": "sandbox"
}
}
The SDK returns the data payload directly and exposes the latest meta via:
transactions()->getLastMeta()subscriptions()->getLastMeta()getLastAuthMeta()
Initiate a Payment
use Tinker\TinkerPayments; use Tinker\Enum\Gateway; use Tinker\Model\DTO\InitiatePaymentRequest; try { $initiateRequest = new InitiatePaymentRequest( amount: 100.00, currency: 'KES', gateway: Gateway::MPESA, merchantReference: 'ORDER-12345', returnUrl: 'https://your-app.com/payment/return', customerPhone: '+254712345678', transactionDesc: 'Payment for order #12345', metadata: ['order_id' => '12345'] ); $transaction = $tinker->transactions()->initiate($initiateRequest); $initiationData = $transaction->getInitiationData(); if ($initiationData->authorizationUrl) { // Redirect user to authorization URL (Paystack, Stripe, etc.) header('Location: ' . $initiationData->authorizationUrl); } } catch (\Tinker\Exception\ApiException $e) { echo "API Error: " . $e->getMessage(); } catch (\Tinker\Exception\NetworkException $e) { echo "Network Error: " . $e->getMessage(); }
Note: The returnUrl is where users are redirected after payment completion. Webhooks are configured separately in your dashboard.
Query a Transaction
use Tinker\Model\DTO\QueryPaymentRequest; $queryRequest = new QueryPaymentRequest( paymentReference: 'TXN-abc123xyz', gateway: Gateway::MPESA ); $transaction = $tinker->transactions()->query($queryRequest); if ($transaction->isSuccessful()) { $queryData = $transaction->getQueryData(); echo "Amount: " . $queryData->amount . " " . $queryData->currency; } // Standard response metadata from backend $meta = $tinker->transactions()->getLastMeta(); echo $meta?->requestId; // e.g. UUID request_id echo $meta?->environment; // sandbox | production
Manage Merchant Subscriptions
use Tinker\Model\DTO\CreateSubscriptionPlanRequest; use Tinker\Model\DTO\CreateSubscriptionRequest; use Tinker\Model\DTO\SubscriptionCustomer; // 1) Create a plan $plan = $tinker->subscriptions()->createPlan( new CreateSubscriptionPlanRequest( name: 'Pro Monthly', amount: 29.99, currency: 'USD', intervals: ['monthly'] ) ); // 2) Create a customer subscription $subscription = $tinker->subscriptions()->create( new CreateSubscriptionRequest( planId: $plan['id'], gateway: 'stripe', billingPeriod: 'monthly', customer: new SubscriptionCustomer( externalCustomerId: 'cust_001', name: 'Jane Doe', email: 'jane@example.com' ) ) ); // 3) List and cancel $allSubscriptions = $tinker->subscriptions()->list(); $tinker->subscriptions()->cancel($subscription['subscription_id']); // Metadata is available here too $meta = $tinker->subscriptions()->getLastMeta();
Handle Webhooks
Webhooks support multiple event types: payment, subscription, invoice, and settlement. Check the event type and handle accordingly:
use Tinker\TinkerPayments; $event = $tinker->webhooks()->handleFromRequest(); if (!$tinker->webhooks()->verifySignature($event, 'your-webhook-secret')) { http_response_code(401); exit('Invalid signature'); } // Check event type if ($event->isPaymentEvent()) { $paymentData = $event->getPaymentData(); // Handle payment.completed, payment.failed, etc. } elseif ($event->isSubscriptionEvent()) { $subscriptionData = $event->getSubscriptionData(); // Handle subscription.created, subscription.cancelled, etc. } elseif ($event->isInvoiceEvent()) { $invoiceData = $event->getInvoiceData(); // Handle invoice.paid, invoice.failed } elseif ($event->isSettlementEvent()) { $settlementData = $event->getSettlementData(); // Handle settlement.processed } // Access event details echo "Event type: " . $event->type; // e.g., "payment.completed" echo "Event source: " . $event->source; // e.g., "payment" echo "App ID: " . $event->meta->appId; echo "Signature: " . $event->security->signature;
Authentication metadata is also available after token fetch:
$tinker->transactions()->query($queryRequest); // triggers auth if token not cached $authMeta = $tinker->getLastAuthMeta(); echo $authMeta?->requestId;
For payment events only, you can convert to a Transaction object:
$transaction = $tinker->webhooks()->handleAsTransaction(file_get_contents('php://input')); if ($transaction && $transaction->isSuccessful()) { $callbackData = $transaction->getCallbackData(); echo "Payment successful: " . $callbackData->reference; }
Custom HTTP Client
You can use your own PSR-18/PSR-17 compatible client:
use Tinker\TinkerPayments; use GuzzleHttp\Client; use GuzzleHttp\Psr7\HttpFactory; $tinker = new TinkerPayments( apiPublicKey: 'your-public-key', apiSecretKey: 'your-secret-key', httpClient: new Client(), requestFactory: new HttpFactory() );
Documentation
For detailed API documentation, use your Tinker Payments frontend docs route (/docs).
License
MIT License
tinker/payments-php-sdk 适用场景与选型建议
tinker/payments-php-sdk 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 14 次下载、GitHub Stars 达 0, 最近一次更新时间为 2025 年 11 月 17 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「api」 「payments」 「sdk」 「stripe」 「kenya」 「mpesa」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 tinker/payments-php-sdk 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 tinker/payments-php-sdk 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 tinker/payments-php-sdk 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
Dealing with payments through the Egyptian payment gateway PayMob
Librería para la gestión sencilla de pagos mediante TPV Redsys y Paypal
A PSR-7 compatible library for making CRUD API endpoints
Scanpay module for Magento 2
Official Safaricom Daraja M-Pesa integration for Laravel built on ysg/payment-core.
Официальный PHP SDK для платёжного шлюза Oblodai: приём платежей, выплаты, статические кошельки, вебхуки.
统计信息
- 总下载量: 14
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 33
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2025-11-17