php ДАННЫЕ ДЛЯ ПОДКЛЮЧЕНИЯ ПЛАТЕЖНОМУ ШЛЮЗУ USERNAME Логин магазина по

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
<?php
/**
* ДАННЫЕ ДЛЯ ПОДКЛЮЧЕНИЯ К ПЛАТЕЖНОМУ ШЛЮЗУ
*
* USERNAME Логин магазина, полученный при подключении.
* PASSWORD Пароль магазина, полученный при подключении.
* GATEWAY_URL Адрес платежного шлюза.
* RETURN_URL Адрес, на который надо перенаправить пользователя
* в случае успешной оплаты.
*/
define('USERNAME', 'test');
define('PASSWORD', 'testPwd');
define('GATEWAY_URL', 'https://3dsec.sberbank.ru/payment/rest/');
define('RETURN_URL', 'http://localhost/rest.php');
/**
* ФУНКЦИЯ ДЛЯ ВЗАИМОДЕЙСТВИЯ С ПЛАТЕЖНЫМ ШЛЮЗОМ
*
* Для отправки POST запросов на платежный шлюз используется
* стандартная библиотека cURL.
*
* ПАРАМЕТРЫ
* method Метод из API.
* data Массив данных.
*
* ОТВЕТ
* response Ответ.
*/
function gateway($method, $data) {
$curl = curl_init(); // Инициализируем запрос
curl_setopt_array($curl, array(
CURLOPT_URL => GATEWAY_URL.$method, // Полный адрес метода
CURLOPT_RETURNTRANSFER => true, // Возвращать ответ
CURLOPT_POST => true, // Метод POST
CURLOPT_POSTFIELDS => http_build_query($data) // Данные в запросе
));
$response = curl_exec($curl); // Выполненяем запрос
$response = json_decode($response, true); // Декодируем из JSON в массив
curl_close($curl); // Закрываем соединение
return $response; // Возвращаем ответ
}
/**
* ВЫВОД ФОРМЫ НА ЭКРАН
*/
if ($_SERVER['REQUEST_METHOD'] == 'GET' && !isset($_GET['orderId'])) {
echo '
<form method="post" action="/rest.php">
<label>Order number</label><br />
<input type="text" name="orderNumber" /><br />
<label>Amount</label><br />
<input type="text" name="amount" /><br />
<button type="submit">Submit</button>
</form>
';
}
/**
* ОБРАБОТКА ДАННЫХ ИЗ ФОРМЫ
*/
else if ($_SERVER['REQUEST_METHOD'] == 'POST') {
$data = array(
'userName' => USERNAME,
'password' => PASSWORD,
'orderNumber' => urlencode($_POST['orderNumber']),
'amount' => urlencode($_POST['amount']),
'returnUrl' => RETURN_URL
);
/**
* ЗАПРОС РЕГИСТРАЦИИ ОДНОСТАДИЙНОГО ПЛАТЕЖА В ПЛАТЕЖНОМ ШЛЮЗЕ
* register.do
*
* ПАРАМЕТРЫ
* userName Логин магазина.
* password Пароль магазина.
* orderNumber Уникальный идентификатор заказа в магазине.
* amount Сумма заказа.
* returnUrl Адрес, на который надо перенаправить пользователя в случае успешной оплаты.
*
* ОТВЕТ
* В случае ошибки:
* errorCode Код ошибки. Список возможных значений приведен в таблице ниже.
* errorMessage Описание ошибки.
*
* В случае успешной регистрации:
* orderId Номер заказа в платежной системе. Уникален в пределах системы.
* formUrl URL платежной формы, на который надо перенаправить браузер клиента.
*
* Код ошибки Описание
* 0 Обработка запроса прошла без системных ошибок.
* 1 Заказ с таким номером уже зарегистрирован в системе.
* 3 Неизвестная (запрещенная) валюта.
* 4 Отсутствует обязательный параметр запроса.
* 5 Ошибка значения параметра запроса.
* 7 Системная ошибка.
*/
$response = gateway('register.do', $data);
/**
* ЗАПРОС РЕГИСТРАЦИИ ДВУХСТАДИЙНОГО ПЛАТЕЖА В ПЛАТЕЖНОМ ШЛЮЗЕ
* registerPreAuth.do
*
* Параметры и ответ точно такие же, как и в предыдущем методе.
* Необходимо вызывать либо register.do, либо registerPreAuth.do.
*/
// $response = gateway('registerPreAuth.do', $data);
if (isset($response['errorCode'])) { // В случае ошибки вывести ее
echo 'Ошибка #' . $response['errorCode'] . ': ' . $response['errorMessage'];
} else { // В случае успеха перенаправить пользователя на плетжную форму
header('Location: ' . $response['formUrl']);
die();
}
}
/**
* ОБРАБОТКА ДАННЫХ ПОСЛЕ ПЛАТЕЖНОЙ ФОРМЫ
*/
else if ($_SERVER['REQUEST_METHOD'] == 'GET' && isset($_GET['orderId'])){
$data = array(
'userName' => USERNAME,
'password' => PASSWORD,
'orderId' => $_GET['orderId']
);
/**
* ЗАПРОС СОСТОЯНИЯ ЗАКАЗА
* getOrderStatus
*
* ПАРАМЕТРЫ
* userName Логин магазина.
* password Пароль магазина.
* orderId Номер заказа в платежной системе. Уникален в пределах системы.
*
* ОТВЕТ
* ErrorCode Код ошибки. Список возможных значений приведен в таблице ниже.
* OrderStatus По значению этого параметра определяется состояние заказа в платежной системе.
* Список возможных значений приведен в таблице ниже. Отсутствует, если заказ не был найден.
*
* Код ошибки Описание
* 0 Обработка запроса прошла без системных ошибок.
* 2 Заказ отклонен по причине ошибки в реквизитах платежа.
* 5 Доступ запрещён;
* Пользователь должен сменить свой пароль;
* Номер заказа не указан.
* 6 Неизвестный номер заказа.
* 7 Системная ошибка.
*
* Статус заказа Описание
* 0 Заказ зарегистрирован, но не оплачен.
* 1 Предавторизованная сумма захолдирована (для двухстадийных платежей).
* 2 Проведена полная авторизация суммы заказа.
* 3 Авторизация отменена.
* 4 По транзакции была проведена операция возврата.
* 5 Инициирована авторизация через ACS банка-эмитента.
* 6 Авторизация отклонена.
*/
$response = gateway('getOrderStatus.do', $data);
// Вывод кода ошибки и статус заказа
echo '
<b>Error code:</b> ' . $response['ErrorCode'] . '<br />
<b>Order status:</b> ' . $response['OrderStatus'] . '<br />
';
}
?>