Рекомендуемые вебхуки
Примечание
Подробное описание вебхуков и их параметров приведено в документации.
Внимание
Код, приведенный ниже, является примером. Для боевого окружения мы рекомендуем использовать вариант, более адаптивный к разработке и поддержке.
- Проверка существования пользователя
Copy
- php
1<?php
2
3case Message::USER_VALIDATION:
4/** @var Xsolla\SDK\Webhook\Message\UserValidationMessage $message */
5$userArray = $message->getUser();
6$userId = $message->getUserId();
7$messageArray = $message->toArray();
8// TODO if user not found, you should throw
9Xsolla\SDK\Exception\Webhook\InvalidUserException
10break;
user_id
(string) — уникальный ID пользователя в вашем приложении. Это может быть никнейм или другой параметр, который позволяет уникально идентифицировать пользователя. Используйте ID пользователя, чтобы создать запрос в базу данных вашего приложения. Если пользователь с таким идентификатором найден, необходимо вызывать метод break
. В противном случае — необходимо выдавать исключение InvalidUserException
.
Пример:
Copy
- php
1<?php
2
3DEFINE('DB_USER', 'root'); // specify
4DEFINE('DB_PASSWORD', 'yourpasswordhere'); // specify
5DEFINE('DB_HOST', '127.0.0.1'); // specify
6DEFINE('DB_NAME','127.0.0.1'); //specify
7
8$callback = function (Message $message) {
9$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
10if (!$dbc) {
11$error = mysqli_connect_error();
12die("Could not connect to MySQL {$error}");
13}
14
15switch ($message->getNotificationType()) {
16case Message::USER_VALIDATION:
17$userId = $message->getUserId();
18$query = "SELECT * FROM user_db.users u WHERE userID IN ('{$userId}') ";
19$response = @mysqli_query($dbc, $query);
20
21if (mysqli_num_rows($response) == 0){
22throw new InvalidUserException('User not found');
23}
24break;
25
26use Xsolla\SDK\Exception\Webhook\InvalidUserException;
27use Xsolla\SDK\Webhook\Message\Message;
28
29DEFINE('DB_USER', 'dbuser'); // specify
30DEFINE('DB_PASSWORD', 'dbpassword'); // specify
31DEFINE('DB_HOST', '127.0.0.1'); // specify
32DEFINE('DB_NAME', 'dbname'); //specify
33
34$callback = function (Message $message) {
35$dbc = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
36if (mysqli_connect_errno()) {
37printf("Connect failed: %s\n", mysqli_connect_error());
38exit;
39}
40
41switch ($message->getNotificationType()) {
42case Message::USER_VALIDATION:
43$userId = mysqli_real_escape_string($dbc, $message->getUserId());
44
45$query = "SELECT COUNT(user_id) FROM dbname.users WHERE user_id =
46
47'{$userId}'";
48
49$response = @mysqli_query($dbc, $query) or die(mysqli_error($dbc));
50
51if ((int)mysqli_fetch_row($response)[0] === 0) {
52throw new InvalidUserException('User not found');
53}
54break;
55default:
56break;
57}
58};
- Успешный платеж
Copy
- php
1<?php
2
3case Message::PAYMENT:
4/** @var Xsolla\SDK\Webhook\Message\PaymentMessage $message */
5$userArray = $message->getUser();
6$paymentArray = $message->getTransaction();
7$purchaseArray =$message->getPurchase();
8$paymentId = $message->getPaymentId();
9$externalPaymentId = $message->getExternalPaymentId();
10$paymentDetailsArray = $message->getPaymentDetails();
11$customParametersArray = $message->getCustomParameters();
12$isDryRun = $message->isDryRun();
13$messageArray = $message->toArray();
14// TODO if the payment delivery fails for some reason, you should throw
15Xsolla\SDK\Exception\Webhook\XsollaWebhookException
16break;
Примечание
Состав покупки передается в массиве
purchaseArray
. Возможные варианты наполнения массива приведены в описании параметров вебхука об успешном платеже.Была ли статья полезна?
Спасибо за обратную связь!
Ваши мысли и идеи помогут нам улучшить ваш пользовательский опыт.Нашли опечатку или ошибку в тексте? Выделите ее и нажмите Ctrl+Enter.