1. Go to this page and download the library: Download alo-game/paymentsdk library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
alo-game / paymentsdk example snippets
use Alogame\PaymentSdk\WebPay\Contracts\WebpayHookInterface;
use Alogame\PaymentSdk\WebPay\Dto\{
CheckUidRequest, CheckUidResult,
CreateOrderRequest, CreateOrderResult,
PaymentReceivedRequest, PaymentReceivedResult,
};
final class MyGameHooks implements WebpayHookInterface
{
public function onCheckUid(CheckUidRequest $request): CheckUidResult
{
$player = MyPlayerRepository::findByUid($request->uid);
return $player
? CheckUidResult::found($player->nickname, $player->serverName)
: CheckUidResult::notFound();
}
public function onCreateOrder(CreateOrderRequest $request): CreateOrderResult
{
// $request->orderId is Alogame's own reference — store it so
// onPaymentReceived can match this same order back to it.
$order = MyOrderRepository::create(
alogameOrderId: $request->orderId,
uid: $request->uid,
productId: $request->productId,
amount: $request->amount,
);
return CreateOrderResult::created($order->id);
}
public function onPaymentReceived(PaymentReceivedRequest $request): PaymentReceivedResult
{
$order = MyOrderRepository::findByOwnId($request->orderCode);
if ($order === null) {
return PaymentReceivedResult::failed('unknown order');
}
MyInventory::deliver($order->uid, $order->productId);
return PaymentReceivedResult::ok();
}
}
use Alogame\PaymentSdk\WebPay\WebpayHandler;
$handler = new WebpayHandler(
secret: getenv('ALOGAME_WEBPAY_SECRET'),
hooks: new MyGameHooks(),
onError: fn (\Throwable $e) => MyLogger::error($e),
);
// routes/webpay.php — wire these to whatever your framework/router calls
// "POST /webpay/check-uid", "/webpay/create-order", "/webpay/payment-received"
$response = $handler->handleCheckUid(getallheaders(), file_get_contents('php://input'));
http_response_code($response->status);
header('Content-Type: application/json');
echo json_encode($response->body);
use Alogame\PaymentSdk\WebPay\Contracts\ServerListHookInterface;
use Alogame\PaymentSdk\WebPay\Dto\{GetServerListRequest, ServerInfo};
final class MyGameHooks implements WebpayHookInterface, ServerListHookInterface
{
// ...onCheckUid/onCreateOrder/onPaymentReceived as above...
public function onGetServerList(GetServerListRequest $request): array
{
return array_map(
static fn ($server) => new ServerInfo($server->id, $server->name),
MyServerRepository::all(),
);
}
}
use Alogame\PaymentSdk\WebPay\Contracts\CharacterListHookInterface;
use Alogame\PaymentSdk\WebPay\Dto\{CharacterInfo, GetCharacterListRequest};
final class MyGameHooks implements WebpayHookInterface, CharacterListHookInterface
{
// ...onCheckUid/onCreateOrder/onPaymentReceived as above...
public function onGetCharacterList(GetCharacterListRequest $request): array
{
return array_map(
static fn ($character) => new CharacterInfo($character->id, $character->name),
MyCharacterRepository::forUid($request->uid, $request->serverId),
);
}
}
use Alogame\PaymentSdk\Expub\Contracts\ExpubHookInterface;
use Alogame\PaymentSdk\Expub\Dto\{
GetUserListRequest, UserCharacter,
CheckUidRequest, CheckUidResult,
CreateOrderRequest, CreateOrderResult,
PaymentReceivedRequest, PaymentReceivedResult,
};
final class MyExpubGameHooks implements ExpubHookInterface
{
public function onGetUserList(GetUserListRequest $request): array
{
// Every character linked to this Alogame account — the player
// picks one on Alogame's side before topping up. Empty is valid
// (account linked, no characters yet).
return MyCharacterRepository::findAllByAlogameUserId($request->userId);
}
public function onCheckUid(CheckUidRequest $request): CheckUidResult
{
$character = MyCharacterRepository::findByUid($request->uid);
return $character
? CheckUidResult::found($character->name, $character->server)
: CheckUidResult::notFound();
}
public function onCreateOrder(CreateOrderRequest $request): CreateOrderResult
{
// $request->osId is "ios"/"android" for a Mobile IAP purchase, null
// for a web top-up — same method, branch on it if delivery differs.
$existing = MyOrderRepository::findByAlogameOrderId($request->orderId);
if ($existing !== null) {
// Alogame retried — return the SAME order_code, never a new one.
return CreateOrderResult::duplicate($existing->orderCode);
}
$order = MyOrderRepository::create(
alogameOrderId: $request->orderId,
uid: $request->uid,
productId: $request->productId,
);
return CreateOrderResult::created($order->id);
}
public function onPaymentReceived(PaymentReceivedRequest $request): PaymentReceivedResult
{
$order = MyOrderRepository::findByOwnId($request->orderCode);
if ($order === null) {
return PaymentReceivedResult::orderCodeNotFound();
}
MyInventory::deliver($order->uid, $order->productId);
return PaymentReceivedResult::ok();
}
}