· 4 years ago · Nov 07, 2020, 07:02 PM
1<?php
2/**
3 * Оплата счета Unitpay
4 */
5
6use Thedudeguy\Rcon;
7
8class Unitpay {
9
10 // Настройки кассы
11 const SETTINGS = array(
12 'secret_key' => '875a7b56522ef5fc5c9bebdb179eb756', // Секретный ключ
13 'public_key' => '333991-71e5a', // Публичный ключ
14 'descr' => 'Покупка Nrav Coins', // Описание платежа
15 'currency' => 'RUB', // Валюта
16
17 'rcon' => array(
18 'ip' => '95.181.152.170',
19 'port' => '25575',
20 'pass' => 'Y3cGZwTlAUUVuc7Tz'
21 ),
22
23 'rate' => 20 // Стоимость 1 Coin
24 );
25
26 private function getIP() {
27 if(isset($_SERVER['HTTP_X_REAL_IP'])) return $_SERVER['HTTP_X_REAL_IP'];
28
29 return $_SERVER['REMOTE_ADDR'];
30 }
31
32 private function getFormSignature($account, $currency, $desc, $sum, $secretKey) {
33 $hashStr = $account.'{up}'.$currency.'{up}'.$desc.'{up}'.$sum.'{up}'.$secretKey;
34 return hash('sha256', $hashStr);
35 }
36
37 private function getSignature($method, array $params, $secretKey) {
38 ksort($params);
39 unset($params['sign']);
40 unset($params['signature']);
41 array_push($params, $secretKey);
42 array_unshift($params, $method);
43 return hash('sha256', join('{up}', $params));
44 }
45
46 public function responseSuccess($message){
47 $success = array(
48 "result" => array(
49 "message" => $message
50 )
51 );
52
53 $success = json_encode($success);
54 @header('Content-Length: ' . strlen($success) . ';');
55 exit($success);
56 }
57
58 public function goToUnitpay($params){
59 $params['rub'] = $params['coins'] * self::SETTINGS['rate'];
60 $signature = $this->getFormSignature($params['login'], self::SETTINGS['currency'], self::SETTINGS['descr'], $params['rub'], self::SETTINGS['secret_key']);
61 $url = 'https://unitpay.money/pay/'.self::SETTINGS['public_key'].'?sum='.$params['rub'].'&account='.$params['login'].'&desc='.self::SETTINGS['descr'].'¤cy='.self::SETTINGS['currency'].'&signature='.$signature;
62 header('Location: ' .$url);
63 }
64
65 public function updBalance(){
66 $params = @$_REQUEST['params'];
67 $method = @$_REQUEST['method'];
68
69 $givenSign = $this->getSignature($method, $params, self::SETTINGS['secret_key']);
70 if(strcmp($params['signature'], $givenSign) != 0){
71 die("Hacking attempt! Bad params!");
72 }
73
74 $rcon = new Rcon(self::SETTINGS['rcon']['ip'], self::SETTINGS['rcon']['port'], self::SETTINGS['rcon']['pass'], 15);
75
76 if ($rcon->connect()){
77 $amount = intval($params['sum'] / self::SETTINGS['rate']);
78 $rcon->sendCommand("givecoin {$params['account']} {$amount}");
79 $this->responseSuccess("Оплата прошла успешно!");
80 }
81
82
83 }
84
85 public function checkInputParams($params){
86 if($params['coins'] < 0 || $params['rub'] < 0) {
87 die("Плохая сумма!");
88 //header('Location: http://www.example.com/');
89 //exit;
90 }
91
92 if(strcmp($params['login'], "") === 0) {
93 die("Плохой ник!");
94 //header('Location: http://www.example.com/');
95 //exit;
96 }
97 }
98}
99
100?>