xsolla / xsolla-sdk-php

此包已被弃用且不再维护。未建议替代包。

PHP版的Xsolla SDK。Xsolla是提供在线游戏电子商务服务的官方授权分销商和商家。


README

Latest Stable Version Build Status Code Coverage Scrutinizer Code Quality Downloads Join the chat at https://gitter.im/xsolla/xsolla-sdk-php GitHub license

官方PHP SDK,用于与Xsolla API交互

Payment UI screenshot

此SDK可用于:

  • 获取授权令牌
  • 处理基本webhooks(用户验证、支付、退款等)

功能

  • 通过获取令牌的不同方法,完全自定义支付UI。
  • 所有API方法的客户端,使您的集成变得简单方便。您可以使用它来设置和更新虚拟货币、物品和订阅计划,管理用户余额,通过Report API检查财务信息等。
  • 便捷的webhook服务器
    • 开始只需要一个回调函数。
    • 已实现所有安全检查:签名认证和IP白名单。
    • 如果标准服务器类不适用,可以完全自定义通知处理逻辑。
  • SDK基于Guzzle v3构建,并利用了许多其功能,包括持久连接、并行请求、事件和插件(通过Symfony2 EventDispatcher)、服务描述、网络日志、缓存、灵活的批量处理以及带有截断指数退避的重试请求。

要求

  • PHP ^7.3 或 ^8.0
  • 以下PHP扩展是必需的
    • curl
    • json

入门指南

请注册您的发布者账户并创建项目。为了使用PHP SDK库,您需要

  • 商户ID
  • API密钥
  • 项目ID
  • 项目密钥

您可以通过公司简介项目设置获取这些参数。

安装

通过Composer安装

安装Xsolla SDK for PHP的推荐方法是使用Composer

$ cd /path/to/your/project
$ composer require xsolla/xsolla-sdk-php

安装后,您需要引入Composer的自动加载器

require '/path/to/vendor/autoload.php';

通过Phar安装

您可以下载打包的phar并将其包含到您的脚本中开始使用

require '/path/to/xsolla.phar';

通过Zip安装

您可以下载zip文件,将其解压缩到您项目选择的目录,并包含自动加载器

require '/path/to/xsolla-autoloader.php';

快速示例

接收webhooks

有一个内置的服务器类来帮助您处理webhooks。

使用webhook服务器解决方案

<?php

use Xsolla\SDK\Webhook\WebhookServer;
use Xsolla\SDK\Webhook\Message\Message;
use Xsolla\SDK\Webhook\Message\NotificationTypeDictionary;
use Xsolla\SDK\Exception\Webhook\XsollaWebhookException;

$callback = function (Message $message) {
    switch ($message->getNotificationType()) {
        case NotificationTypeDictionary::USER_VALIDATION:
            /** @var Xsolla\SDK\Webhook\Message\UserValidationMessage $message */
            // TODO if user not found, you should throw Xsolla\SDK\Exception\Webhook\InvalidUserException
            break;
        case NotificationTypeDictionary::PAYMENT:
            /** @var Xsolla\SDK\Webhook\Message\PaymentMessage $message */
            // TODO if the payment delivery fails for some reason, you should throw Xsolla\SDK\Exception\Webhook\XsollaWebhookException
            break;
        case NotificationTypeDictionary::REFUND:
            /** @var Xsolla\SDK\Webhook\Message\RefundMessage $message */
            // TODO if you cannot handle the refund, you should throw Xsolla\SDK\Exception\Webhook\XsollaWebhookException
            break;
        default:
            throw new XsollaWebhookException('Notification type not implemented');
    }
};

$webhookServer = WebhookServer::create($callback, PROJECT_KEY);
$webhookServer->start();

使用某些PHP函数中的辅助类解决方案

public function handleRequest()
{
    $request = Request::createFromGlobals();
    $message = Message::fromArray($request->toArray());

    switch ($message->getNotificationType()) {
        case NotificationTypeDictionary::USER_VALIDATION:
            /**
             * https://developers.xsolla.com/webhooks/operation/user-validation/
             * @var Xsolla\SDK\Webhook\Message\UserValidationMessage $message 
             */
            if ($message->getUserId() !== 'our_user_id') {
                return YourResponseClass(json_encode(['error' => ['code' => 'INVALID_USER', 'message' => 'Invalid user']]), 400);
            }
            
            break;
        case NotificationTypeDictionary::PAYMENT:
            /** @var Xsolla\SDK\Webhook\Message\PaymentMessage $message */
            break;
        case NotificationTypeDictionary::REFUND:
            /** @var Xsolla\SDK\Webhook\Message\RefundMessage $message */
            break;
        default:
            throw new \Exception('Notification type not implemented');
    }
    
    return YourResponseClass('', 200);
}

一旦您在服务器上完成通知的处理,请在项目的设置页面设置将接收所有webhook通知的URL。

故障排除

您可以在我们的文档中找到最常见的错误解决方案。

贡献

请查看 CONTRIBUTING.md 了解如何合并您的更改。

其他资源