Файл: app/Http/Controllers/PaymentController.php
Строк: 99
<?php
namespace AppHttpControllers;
use AppModelsCardUserModel;
use AppModelsUserModel;
use Auth;
use AppModelsGameSettingModel;
use XsollaSDKAPIXsollaClient;
use XsollaSDKAPIPaymentUITokenRequest;
use XsollaSDKWebhookWebhookServer;
use XsollaSDKWebhookMessageMessage;
use XsollaSDKExceptionWebhookXsollaWebhookException;
class PaymentController extends Controller
{
public function index()
{
$tokenRequest = new TokenRequest(config('payment.project_id'), (string) Auth::user()->id);
$tokenRequest->setUserEmail(Auth::user()->email)
->setSandboxMode(config('payment.sandbox'))
->setUserName(Auth::user()->login);
$tokenRequestArray = $tokenRequest->toArray();
$tokenRequestArray['settings']['ui']['components']['virtual_currency']['custom_amount'] = true;
$xsollaClient = XsollaClient::factory(array(
'merchant_id' => config('payment.merchant_id'),
'api_key' => config('payment.api_key_factory'),
));
$response = $xsollaClient->createPaymentUIToken(['request' => $tokenRequestArray]);
$token = $response['token'];
return view('payment.index', ['token' => $token]);
}
public function result()
{
$callback = function (Message $message) {
switch ($message->getNotificationType()) {
case Message::USER_VALIDATION:
$user = UserModel::find((int) $message->getUserId());
if($user == null)
$this->responseCode(400, 'INVALID_USER');
break;
case Message::PAYMENT:
$count = $message->getPurchase()['virtual_currency']['quantity'];
$userId = (int) $message->getUserId();
$user = UserModel::find($userId);
$user->valmers += $count;
$action = GameSettingModel::where('key', 'action')->first();
if($action->value != '')
{
$act = json_decode($action->value);
if($act->action == 1) $user->valmers += round($count*($act->percent/100));
elseif($act->action == 2 && $count >= $act->summ)
{
CardUserModel::create([
'user' => $userId,
'card' => $act->card,
'status' => 'redeemed'
]);
}
}
if($user->ref != 0)
{
$referal = UserModel::find($user->ref);
$referal->valmers += round($count/2);
$referal->save();
}
$user->save();
$this->responseCode(204, 'PURCHASE_SUCCESS');
break;
case Message::REFUND:
$this->responseCode(204, 'PURCHASE_CANCEL');
break;
default:
$this->responseCode(204, 'PURCHASE_CANCEL');
}
};
$webhookServer = WebhookServer::create($callback, config('payment.code'));
$webhookServer->start();
}
public function responseCode($id, $code, $message = '')
{
header ("HTTP/1.1 $id");
$json = array("error" => array("code" => $code, "message" => $message));
echo json_encode($json);
exit;
}
}