承接 univapay/php-sdk 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

univapay/php-sdk

Composer 安装命令:

composer require univapay/php-sdk

包简介

PHP SDK for Univapay Payments

README 文档

README

PHP lint & test

UnivaPay PHP SDKは、UnivaPay決済ゲートウェイと連携する便利なメソッドを提供します。

English

必要なもの

  • PHP 7.2.x 以上
  • Composer
  • UnivaPayのストアアプリケーショントークンまたはマーチャントアプリケーショントークン

インストール

composer require univapay/php-sdk

利用方法

use Univapay\UnivapayClient;
use Univapay\UnivapayClientOptions;
use Univapay\Requests\Handlers\RateLimitHandler;

$client = new UnivapayClient(AppJWT::createToken('token', 'secret'));

// その他のオプションは、クライアントをインスタンス化する前にクライアントオプションオブジェクトを作成および変更します
// すべてのオプションについては、UnivapayClientOptionsを参照してください
$clientOptions = new UnivapayClientOptions();
$clientOptions->rateLimitHandler = new RateLimitHandler(5, 2);
$client = new UnivapayClient(AppJWT::createToken('token', 'secret'), $clientOptions);

// 使用例については、examplesフォルダを参照してください

アプリケーショントークン

このSDKでは、ストアタイプとマーチャントタイプの両方のアプリケーショントークンがサポートされています。 ストアタイプトークンを必要とするトランザクショントークンや課金の作成以外のすべての機能は、両方のトークンタイプでサポートされています。

通貨モデル

このSDKはmoneyphpライブラリを使用して金額と通貨をモデル化します。詳細は、ドキュメントを参照してください。

すべての通貨と金額は自動的にCurrencyMoneyオブジェクトに変換されます。フォーマットされた金額(.*Formattedキーで示される)のみがString形式になります。

use Money\Currency;
use Money\Money;
use Univapay\PaymentMethod\CardPayment;

$paymentMethod = new CardPayment(...);
$charge = $client
    ->createToken($paymentMethod)
    ->createCharge(Money::USD(1000));

$charge->currency === new Currency('USD'); // true
$charge->requestAmount === new Money(1000, $charge->currency); // true

列挙型

PHPにはネイティブの組み込み列挙型サポートがないため、列挙子を操作するときに型の安全性を提供するために、TypedEnumというクラスを提供します。各列挙子クラスは最終版であり、 TypedEnumを拡張して、Javaなどの他の言語の列挙子と同様に動作する静的関数を提供します。列挙型クラスは、Univapay\Enumsという名前空間にあります。

デフォルトでは、作成時に値が指定されていない場合、スネークケースになります。

use Univapay\Enums\ChargeStatus;

$values = ChargeStatus::findValues(); // 列挙子のすべての名前と値のリストを取得する
$chargeStatus = ChargeStatus::PENDING(); // 最後のカッコに注意してください
$chargeStatus->getValue() === 'pending'; // true
$chargeStatus === ChargeStatus::fromValue('pending'); // true
// switchステートメントでも機能します
switch ($chargeStatus) {
    case ChargeStatus::PENDING():
        // Do something
        break;
    // ...
}

リソースモデルの更新

リソースモデル(Resourceを拡張するモデルクラス)を更新するには、下記のようにします。

$charge->fetch();

ポーリング

次のリソースは、ステータス変更を待機するためのロングポーリングがサポートされています。

  • Charge
  • Refund
  • Cancel
  • Subscription

これらのリクエストは最初にPENDINGステータスを戻します。ロングポーリングでは、リソースのステータスが変更されたときに、更新されたモデルをフェッチできます。3秒以内に変更が発生しない場合、その時点のリソースが返されます。オプションとして、PENDINGステータスが返された場合に、自動的にリトライするためのリトライ回数を渡すことができます。

$charge = $client
    ->createCharge($token->id, Money::USD(1000)) // $charge->status == PENDING
    ->awaitResult(); // $charge->status == SUCCESSFUL
    
// OR
$charge = $client
    ->createCharge($token->id, Money::USD(1000)) // $charge->status == PENDING
    ->awaitResult(5); // `PENDING`以外ステータスを返すまで、5回まで(最大15秒)をリトライを実行

リストとページネーション

SDKのすべてのリスト関数は、作成日時の降順でPaginatedオブジェクトとして返されます。配列を介してパラメーターを渡すときは、入力が期待されるタイプと一致するように注意してください。一致しない場合、InvalidArgumentExceptionがスローされます。

use InvalidArgumentException;
use Univapay\Enums\CursorDirection;

try {
    $transactionList = $client->listTransactionsByOptions([
        'from' => date_create('-1 week'),
        'to' => date_create('+1 week')
    ]);
} catch (InvalidArgumentException $error) {
    // 入力パラメーターが正しいタイプに対応していない場合
}

$transactions = $transactionList->items; // 1ページあたりのデフォルトの上限 = 10アイテム

if ($transactionList->hasMore) {
    $transactionList = $transactionList->getNext(); // リストは内部で変化しない
    $transactions = array_merge($transactions, $transactionList->items);
}

$firstTenItems = $client->listTransactionsByOptions([
    'from' => date_create('-1 week'),
    'to' => date_create('+1 week'),
    'cursor_direction' => CursorDirection::ASC()
]);

リクエスト/レスポンスハンドラ

データをオブジェクトに解析する前に追加の変更または応答への反応を必要とする場合の使用例です。 SDKは、APIからのバックプレッシャーに基づいてリクエストを調整する RateLimitHandlerを提供します(これはデフォルトで UnivapayClientOptions-> rateLimitHandlerに実装されています)。 さらに、 BasicRetryHandlerも提供されており、再試行のために特定の例外をキャッチしてフィルタリングします。 キャッチする例外を指定するには:

use Univapay\Requests\Handlers\BasicRetryHandler;

$subscriptionTokenRetryHandler = new BasicRetryHandler(
    UnivapayResourceConflictError::class,
    5, // 5回トライする
    2, // 2秒毎
    // エラーに基づいたより具体的なフィルタリングは、最初のパラメーターからエラー内容を取得してください
    // 再試行する場合はtrueを、無視する場合はfalseを返します
    function (UnivapayResourceConflictError $error) {
        return $error->code === 'NON_UNIQUE_ACTIVE_TOKEN';
    }
);
$client->addHandlers($subscriptionTokenRetryHandler);

// 新しいハンドラーをリセットするか、クリアして最初から追加する
// rateLimitHandlerはUnivapayClientOptionsから自動的に追加されます
$client->setHandlers($subscriptionTokenRetryHandler);

SDK開発者向け

ビルド:

composer install

コードフォーマット:

composer lint
composer lint:fix

テスト:

テストを実行するには、次の環境変数が必要です。

  • UNIVAPAY_PHP_TEST_TOKEN - testモードのトークンである必要があります
  • UNIVAPAY_PHP_TEST_SECRET
  • UNIVAPAY_PHP_TEST_ENDPOINT - ローカルAPIインスタンスまたはステージングインスタンスを指します
composer test

注:Github Actionsは、プルリクエストがOpenされているブランチでのみ実行されます

univapay/php-sdk 适用场景与选型建议

univapay/php-sdk 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 143.73k 次下载、GitHub Stars 达 3, 最近一次更新时间为 2019 年 08 月 27 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「payment」 「credit card」 「japan」 「univapay」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 univapay/php-sdk 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 univapay/php-sdk 我们能提供哪些服务?
定制开发 / 二次开发

基于 univapay/php-sdk 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 143.73k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 19
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 3
  • Watchers: 7
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2019-08-27