payneteasy-payneteasyapi 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gemtest +0 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +18 -0
- data/README.md +54 -0
- data/Rakefile +8 -0
- data/doc/00-basic-tutorial.md +254 -0
- data/doc/01-library-internals.md +6 -0
- data/doc/02-payment-scenarios.md +9 -0
- data/doc/library-internals/00-payment-data.md +162 -0
- data/doc/library-internals/01-payment-processor.md +163 -0
- data/doc/library-internals/02-validator.md +55 -0
- data/doc/library-internals/03-property-accessor.md +76 -0
- data/doc/payment-scenarios/00-sale-transactions.md +90 -0
- data/doc/payment-scenarios/01-preauth-capture-transactions.md +105 -0
- data/doc/payment-scenarios/02-transfer-transactions.md +89 -0
- data/doc/payment-scenarios/03-return-transactions.md +52 -0
- data/doc/payment-scenarios/04-recurrent-transactions.md +110 -0
- data/doc/payment-scenarios/05-payment-form-integration.md +59 -0
- data/doc/payment-scenarios/06-merchant-callbacks.md +29 -0
- data/example/capture.rb +12 -0
- data/example/common/functions.rb +56 -0
- data/lib/paynet_easy/paynet_easy_api/callback/callback_factory.rb +47 -0
- data/lib/paynet_easy/paynet_easy_api/callback/callback_prototype.rb +186 -0
- data/lib/paynet_easy/paynet_easy_api/callback/customer_return_callback.rb +28 -0
- data/lib/paynet_easy/paynet_easy_api/callback/paynet_easy_callback.rb +44 -0
- data/lib/paynet_easy/paynet_easy_api/error/paynet_error.rb +4 -0
- data/lib/paynet_easy/paynet_easy_api/error/request_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/error/response_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/error/validation_error.rb +6 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/billing_address.rb +41 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/credit_card.rb +32 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/customer.rb +35 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/data.rb +13 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/payment.rb +190 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/payment_transaction.rb +188 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/query_config.rb +95 -0
- data/lib/paynet_easy/paynet_easy_api/payment_data/recurrent_card.rb +40 -0
- data/lib/paynet_easy/paynet_easy_api/payment_processor.rb +251 -0
- data/lib/paynet_easy/paynet_easy_api/paynet_easy_api.rb +26 -0
- data/lib/paynet_easy/paynet_easy_api/query/capture_query.rb +30 -0
- data/lib/paynet_easy/paynet_easy_api/query/create_card_ref_query.rb +78 -0
- data/lib/paynet_easy/paynet_easy_api/query/get_card_info_query.rb +49 -0
- data/lib/paynet_easy/paynet_easy_api/query/make_rebill_query.rb +37 -0
- data/lib/paynet_easy/paynet_easy_api/query/preauth_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/preauth_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_form_query.rb +69 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/payment_query.rb +71 -0
- data/lib/paynet_easy/paynet_easy_api/query/prototype/query.rb +302 -0
- data/lib/paynet_easy/paynet_easy_api/query/query_factory.rb +19 -0
- data/lib/paynet_easy/paynet_easy_api/query/return_query.rb +46 -0
- data/lib/paynet_easy/paynet_easy_api/query/sale_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/query/sale_query.rb +53 -0
- data/lib/paynet_easy/paynet_easy_api/query/status_query.rb +50 -0
- data/lib/paynet_easy/paynet_easy_api/query/transfer_by_ref_query.rb +41 -0
- data/lib/paynet_easy/paynet_easy_api/query/transfer_form_query.rb +10 -0
- data/lib/paynet_easy/paynet_easy_api/transport/callback_response.rb +21 -0
- data/lib/paynet_easy/paynet_easy_api/transport/gateway_client.rb +91 -0
- data/lib/paynet_easy/paynet_easy_api/transport/request.rb +20 -0
- data/lib/paynet_easy/paynet_easy_api/transport/response.rb +136 -0
- data/lib/paynet_easy/paynet_easy_api/util/property_accessor.rb +60 -0
- data/lib/paynet_easy/paynet_easy_api/util/string.rb +9 -0
- data/lib/paynet_easy/paynet_easy_api/util/validator.rb +110 -0
- data/payneteasy-payneteasyapi.gemspec +16 -0
- data/test/paynet_easy/paynet_easy_api/callback/callback_factory_test.rb +22 -0
- data/test/paynet_easy/paynet_easy_api/callback/callback_test_prototype.rb +168 -0
- data/test/paynet_easy/paynet_easy_api/callback/customer_return_callback_test.rb +95 -0
- data/test/paynet_easy/paynet_easy_api/callback/paynet_easy_callback_test.rb +101 -0
- data/test/paynet_easy/paynet_easy_api/fake.rb +71 -0
- data/test/paynet_easy/paynet_easy_api/payment_processor_test.rb +255 -0
- data/test/paynet_easy/paynet_easy_api/query/capture_query_test.rb +48 -0
- data/test/paynet_easy/paynet_easy_api/query/create_card_ref_query_test.rb +116 -0
- data/test/paynet_easy/paynet_easy_api/query/get_card_info_query_test.rb +116 -0
- data/test/paynet_easy/paynet_easy_api/query/make_rebill_query_test.rb +59 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/payment_query_test_prototype.rb +117 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/query_test_prototype.rb +190 -0
- data/test/paynet_easy/paynet_easy_api/query/prototype/sync_query_test_prototype.rb +88 -0
- data/test/paynet_easy/paynet_easy_api/query/query_factory_test.rb +21 -0
- data/test/paynet_easy/paynet_easy_api/query/return_query_test.rb +58 -0
- data/test/paynet_easy/paynet_easy_api/query/sale_form_query_test.rb +96 -0
- data/test/paynet_easy/paynet_easy_api/query/sale_query_test.rb +78 -0
- data/test/paynet_easy/paynet_easy_api/query/status_query_test.rb +81 -0
- data/test/paynet_easy/paynet_easy_api/query/transfer_by_ref_query_test.rb +63 -0
- data/test/paynet_easy/paynet_easy_api/transport/gateway_client_test.rb +22 -0
- data/test/paynet_easy/paynet_easy_api/transport/response_test.rb +26 -0
- data/test/paynet_easy/paynet_easy_api/util/property_accessor_test.rb +52 -0
- data/test/paynet_easy/paynet_easy_api/util/validator_test.rb +42 -0
- metadata +204 -0
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Фронтенд библиотеки, PaymentProcessor
|
|
2
|
+
|
|
3
|
+
Фронтенд библиотеки представляет класс **[PaynetEasy\PaynetEasyApi\PaymentProcessor](../../source/PaynetEasy/PaynetEasyApi/PaymentProcessor.php)**. Класс предоставляет следующие возможности:
|
|
4
|
+
* **[executeQuery()](#executeQuery)**: простое выполнение запроса к PaynetEasy
|
|
5
|
+
* **[processCustomerReturn()](#processCustomerReturn)**: простая обработка данных, полученных от PaynetEasy при возвращении пользователя с платежного шлюза
|
|
6
|
+
* **[processPaynetEasyCallback()](#processPaynetEasyCallback)**: простая обработка данных, полученных от PaynetEasy при поступлении коллбэка от PaynetEasy
|
|
7
|
+
* **[setHandlers()](#setHandlers)**: установка обработчиков для различных событий, происходящих при обработке платежной транзакции
|
|
8
|
+
|
|
9
|
+
### <a name="executeQuery"></a>executeQuery(): простое выполнение запроса к PaynetEasy
|
|
10
|
+
|
|
11
|
+
Некоторые сценарии обработки платежа имеют асинхронную природу и состоят из нескольких запросов. Так, некоторые запросы не возвращают результат платежа сразу и требуют многократного выполнения запроса **status**, после которого клиент может быть отправлен на шлюз PaynetEasy для проведения дополнительных шагов авторизации. После возвращения клиента на сервис мерчанта необходима обработка данных, полученных от шлюза.
|
|
12
|
+
<a name="async_queries_list"></a>Cписок асинхронных запросов:
|
|
13
|
+
* sale
|
|
14
|
+
* preauth
|
|
15
|
+
* capture
|
|
16
|
+
* return
|
|
17
|
+
* make-rebill
|
|
18
|
+
* transfer-by-ref
|
|
19
|
+
|
|
20
|
+
Ознакомиться с обработкой таких запросов можно в следующих файлах:
|
|
21
|
+
* [Пример выполнения запроса sale](../../example/sale.php)
|
|
22
|
+
* [Пример выполнения запроса preauth](../../example/preauth.php)
|
|
23
|
+
* [Пример выполнения запроса capture](../../example/capture.php)
|
|
24
|
+
* [Пример выполнения запроса return](../../example/return.php)
|
|
25
|
+
* [Пример выполнения запроса make-rebill](../../example/make-rebill.php)
|
|
26
|
+
* [Пример выполнения запроса transfer-by-ref](../../example/transfer-by-ref.php)
|
|
27
|
+
|
|
28
|
+
Отдельный сценарий обработки необходим и при интеграции платежной формы. Запрос к шлюзу возвращает ссылку на платежную форму, на которую должен быть отправлен клиент. После заполнения и отправки данных шлюз обрабатывает платежную форму и возвращает клиента на сервис мерчанта. После возвращения клиента на сервис мерчанта необходима обработка данных, полученных от шлюза.
|
|
29
|
+
<a name="form_queries_list"></a>Список запросов для интеграции платежной формы:
|
|
30
|
+
* sale-form
|
|
31
|
+
* preauth-form
|
|
32
|
+
* transfer-form
|
|
33
|
+
|
|
34
|
+
Ознакомиться с обработкой таких запросов можно в следующих файлах:
|
|
35
|
+
* [Пример выполнения запроса sale-form](../../example/sale-form.php)
|
|
36
|
+
* [Пример выполнения запроса preauth-form](../../example/preauth-form.php)
|
|
37
|
+
* [Пример выполнения запроса transfer-form](../../example/transfer-form.php)
|
|
38
|
+
|
|
39
|
+
Некоторые операции с платежами не требуют сложных сценариев обработки и выполняются с помощью одного запроса.
|
|
40
|
+
Список простых операций над платежом:
|
|
41
|
+
* create-card-ref
|
|
42
|
+
* get-card-info
|
|
43
|
+
* status
|
|
44
|
+
|
|
45
|
+
Ознакомиться с обработкой таких запросов можно в следующих файлах:
|
|
46
|
+
* [Пример выполнения запроса create-card-ref](../../example/create-card-ref.php)
|
|
47
|
+
* [Пример выполнения запроса get-card-info](../../example/get-card-info.php)
|
|
48
|
+
* [Пример выполнения запроса status](../../example/status.php)
|
|
49
|
+
|
|
50
|
+
Для удобного выполнения запросов к PaynetEasy в **PaymentProcessor** реализован метод **[executeQuery()](../../source/PaynetEasy/PaynetEasyApi/PaymentProcessor.php#L114)**.
|
|
51
|
+
Метод принимает два параметра:
|
|
52
|
+
* Название запроса
|
|
53
|
+
* Платежная транзакция для обработки
|
|
54
|
+
|
|
55
|
+
### <a name="processCustomerReturn"></a>processCustomerReturn(): простая обработка данных, полученных от PaynetEasy
|
|
56
|
+
|
|
57
|
+
Каждый [асинхронный запрос](#async_queries_list) может завершиться перенаправлением пользователя на платежный шлюз для выполнения дополнительных действий, а каждый [запрос для интеграции платежной формы](#form_queries_list) обязательно содержит такое перенаправление. Каждый раз при возвращении пользователя на сервис мерчанта передаются данные с результатом обработки платежа. Также, если в [конфигурации стартового запроса](../00-basic-tutorial.md#stage_1_step_3) был задан ключ **server_callback_url**, то через некоторое время PaynetEasy вызовет этот url и передаст ему данные, описанные в wiki PaynetEasy в разделе [Merchant Callbacks](http://wiki.payneteasy.com/index.php/PnE:Merchant_Callbacks). Для удобной обработки этих данных в **PaymentProcessor** реализован метод **[executeCallback()](../../source/PaynetEasy/PaynetEasyApi/PaymentProcessor.php#L161)**.
|
|
58
|
+
Метод принимает два параметра:
|
|
59
|
+
* Объект с данными, полученными при возвращении пользователя от PaynetEasy
|
|
60
|
+
* Платежная транзакция для обработки
|
|
61
|
+
|
|
62
|
+
Ознакомиться с использованием данного метода можно в следующих файлах:
|
|
63
|
+
* [Базовый пример использования библиотеки](../00-basic-tutorial.md#stage_2)
|
|
64
|
+
* [Пример выполнения запроса sale](../../example/sale.php#L91)
|
|
65
|
+
* [Пример выполнения запроса preauth](../../example/preauth.php#L91)
|
|
66
|
+
* [Пример выполнения запроса sale-form](../../example/sale-form.php#L70)
|
|
67
|
+
* [Пример выполнения запроса preauth-form](../../example/preauth-form.php#70)
|
|
68
|
+
* [Пример выполнения запроса transfer-form](../../example/transfer-form.php#70)
|
|
69
|
+
|
|
70
|
+
### <a name="processPaynetEasyCallback"></a>processPaynetEasyCallback(): простая обработка данных, полученных от PaynetEasy
|
|
71
|
+
|
|
72
|
+
После выполнения [асинхронного запроса](#async_queries_list) или [запроса для интеграции платежной формы](#form_queries_list), если в [конфигурации стартового запроса](../00-basic-tutorial.md#stage_1_step_3) был задан ключ **server_callback_url**, то через некоторое время PaynetEasy вызовет этот url и передаст ему данные, описанные в wiki PaynetEasy в разделе [Merchant Callbacks](http://wiki.payneteasy.com/index.php/PnE:Merchant_Callbacks). Для удобной обработки этих данных в **PaymentProcessor** реализован метод **[processPaynetEasyCallback()](../../source/PaynetEasy/PaynetEasyApi/PaymentProcessor.php#L176)**.
|
|
73
|
+
Метод принимает два параметра:
|
|
74
|
+
* Объект с данными, полученными при возвращении пользователя от PaynetEasy
|
|
75
|
+
* Платежная транзакция для обработки
|
|
76
|
+
|
|
77
|
+
Ознакомиться с использованием данного метода можно в следующих файлах:
|
|
78
|
+
* [Пример выполнения запроса sale](../../example/sale.php#L102)
|
|
79
|
+
* [Пример выполнения запроса preauth](../../example/preauth.php#L102)
|
|
80
|
+
* [Пример выполнения запроса sale-form](../../example/sale-form.php#L81)
|
|
81
|
+
* [Пример выполнения запроса preauth-form](../../example/preauth-form.php#81)
|
|
82
|
+
* [Пример выполнения запроса transfer-form](../../example/transfer-form.php#81)
|
|
83
|
+
|
|
84
|
+
### <a name="setHandlers"></a> setHandlers(): установка обработчиков для различных событий, происходящих при обработке заказа
|
|
85
|
+
|
|
86
|
+
**PaymentProcessor** скрывает от конечного пользователя алгоритм обработки заказа в методах **[executeWorkflow()](#executeWorkflow)**, **[executeQuery()](#executeQuery)** и **[executeCallback()](#executeCallback)**. При этом во время обработки заказа возникают ситуации, обработка которых должна быть реализована на стороне сервиса мерчанта. Для обработки таких ситуаций в **PaymentProcessor** реализована система событий и их обработчиков. Обработчики могут быть установлены тремя разными способами:
|
|
87
|
+
* Передача массива обработчиков в [конструктор класса **PaymentProcessor**](../../source/PaynetEasy/PaynetEasyApi/PaymentProcessor.php#L101)
|
|
88
|
+
* Передача массива обработчиков в метод [**setHandlers()**](../../source/PaynetEasy/PaynetEasyApi/PaymentProcessor.php#L273)
|
|
89
|
+
* Установка обработчиков по одному с помощью метода **[setHandler()](../../source/PaynetEasy/PaynetEasyApi/PaymentProcessor.php#L249)**
|
|
90
|
+
|
|
91
|
+
Список обработчиков событий:
|
|
92
|
+
* **HANDLER_SAVE_CHANGES** - обработчик для сохранения платежной транзакции. Вызывается, если данные платежной транзакции изменены. Должен реализовывать сохранение платежной транзакции в хранилище. Принимает следующие параметры:
|
|
93
|
+
* Платежная транзакция
|
|
94
|
+
* Ответ от PaynetEasy (опционально, не доступен, если произошла ошибка на этапе формирования или выполнения запроса к PaynetEasy)
|
|
95
|
+
* **HANDLER_STATUS_UPDATE** - обработчик для обновления статуса платежной транзакции. Вызывается, если статус платежной транзакции не изменился с момента последней проверки. Должен реализовывать запуск проверки статуса платежной транзакции. Принимает следующие параметры:
|
|
96
|
+
* Ответ от PaynetEasy
|
|
97
|
+
* Платежная транзакция
|
|
98
|
+
* **HANDLER_SHOW_HTML** - обработчик для вывода HTML-кода, полученного от PaynetEasy. Вызывается, если необходима 3D-авторизация пользователя. Должен реализовывать вывод HTML-кода из ответа от PaynetEasy в браузер клиента. Принимает следующие параметры:
|
|
99
|
+
* Ответ от PaynetEasy
|
|
100
|
+
* Платежная транзакция
|
|
101
|
+
* **HANDLER_REDIRECT** - обработчик для перенаправления клиента на платежную форму PaynetEasy. Вызывается после выполнения запроса [sale-form, preauth-form или transfer-form](../payment-scenarios/05-payment-form-integration.md). Должен реализовывать перенаправление пользователя на URL из ответа от PaynetEasy. Принимает следующие параметры:
|
|
102
|
+
* Ответ от PaynetEasy
|
|
103
|
+
* Платежная транзакция
|
|
104
|
+
* **HANDLER_FINISH_PROCESSING** - обработчик для дальнейшей обработки платежной транзакции сервисом мерчанта после завершения обработки библиотекой. Вызывается, если нет необходимости в дополнительных шагах для обработки транзакции. Принимает следующие параметры:
|
|
105
|
+
* Платежная транзакция
|
|
106
|
+
* Ответ от PaynetEasy (опционально, не доступен, если обработка платежной транзакции уже была завершена ранее)
|
|
107
|
+
* **HANDLER_CATCH_EXCEPTION** - обработчик для исключения. Вызывается, если при обработке платежной транзакции произошло исключение. **Внимание!** Если этот обработчик не установлен, то исключение будет брошено из библиотеки выше в сервис мерчанта. Принимает следующие параметры:
|
|
108
|
+
* Исключение
|
|
109
|
+
* Платежная транзакция
|
|
110
|
+
* Ответ от PaynetEasy (опционально, не доступен, если произошла ошибка на этапе формирования или выполнения запроса к PaynetEasy)
|
|
111
|
+
|
|
112
|
+
Метод принимает один параметр:
|
|
113
|
+
* Массив с обработчиками событий. Ключами элементов массива являются названия обработчиков, заданные в константах класса, значениями - любые значения типа [callable](http://php.net/manual/en/language.types.callable.php)
|
|
114
|
+
|
|
115
|
+
Пример вызова метода с простейшими обработчиками:
|
|
116
|
+
|
|
117
|
+
```php
|
|
118
|
+
use PaynetEasy\PaynetEasyApi\PaymentProcessor;
|
|
119
|
+
use PaynetEasy\PaynetEasyApi\PaymentData\PaymentTransaction;
|
|
120
|
+
use PaynetEasy\PaynetEasyApi\Transport\Response;
|
|
121
|
+
use Exception;
|
|
122
|
+
|
|
123
|
+
$paymentProcessor = new PaymentProcessor;
|
|
124
|
+
$paymentProcessor->setHandlers(array
|
|
125
|
+
(
|
|
126
|
+
PaymentProcessor::HANDLER_SAVE_CHANGES => function(PaymentTransaction $paymentTransaction)
|
|
127
|
+
{
|
|
128
|
+
start_session();
|
|
129
|
+
$_SESSION['payment_transaction'] = serialize($paymentTransaction);
|
|
130
|
+
},
|
|
131
|
+
PaymentProcessor::HANDLER_STATUS_UPDATE => function()
|
|
132
|
+
{
|
|
133
|
+
header("Location: http://{$_SERVER['HTTP_HOST']}/{$_SERVER['REQUEST_URI']}?stage=updateStatus");
|
|
134
|
+
exit;
|
|
135
|
+
},
|
|
136
|
+
PaymentProcessor::HANDLER_SHOW_HTML => function(Response $response)
|
|
137
|
+
{
|
|
138
|
+
print $response->getHtml();
|
|
139
|
+
exit;
|
|
140
|
+
},
|
|
141
|
+
PaymentProcessor::HANDLER_REDIRECT => function(Response $response)
|
|
142
|
+
{
|
|
143
|
+
header("Location: {$response->getRedirectUrl()}");
|
|
144
|
+
exit;
|
|
145
|
+
},
|
|
146
|
+
PaymentProcessor::HANDLER_FINISH_PROCESSING => function(PaymentTransaction $paymentTransaction)
|
|
147
|
+
{
|
|
148
|
+
print "<pre>";
|
|
149
|
+
print "Payment processing finished.\n";
|
|
150
|
+
print "Payment status: '{$paymentTransaction->getPayment()->getStatus()}'.\n";
|
|
151
|
+
print "Payment transaction status: '{$paymentTransaction->getStatus()}'.\n";
|
|
152
|
+
print "</pre>";
|
|
153
|
+
},
|
|
154
|
+
PaymentProcessor::HANDLER_CATCH_EXCEPTION => function(Exception $exception)
|
|
155
|
+
{
|
|
156
|
+
print "<pre>";
|
|
157
|
+
print "Exception catched.\n";
|
|
158
|
+
print "Exception message: '{$exception->getMessage()}'.\n";
|
|
159
|
+
print "Exception traceback: \n{$exception->getTraceAsString()}\n";
|
|
160
|
+
print "</pre>";
|
|
161
|
+
}
|
|
162
|
+
));
|
|
163
|
+
```
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
# Валидатор данных, Validator
|
|
2
|
+
|
|
3
|
+
Статический класс **[PaynetEasy\PaynetEasyApi\Util\Validator](../../source/PaynetEasy/PaynetEasyApi/Util/Validator.php)** предоставляет следующие методы для валидации данных:
|
|
4
|
+
* **[validateByRule()](#validateByRule)**: валидация с помощью предопределенного правила или регулярного выражения
|
|
5
|
+
|
|
6
|
+
### <a name="validateByRule"></a>validateByRule(): валидация с помощью предопределнного правила
|
|
7
|
+
|
|
8
|
+
Для удобной валидации данных в **[Validator](../../source/PaynetEasy/PaynetEasyApi/Util/Validator.php)** реализован метод **[validateByRule()](../../source/PaynetEasy/PaynetEasyApi/Util/Validator.php#L126)** и набор констант с правилами валидации. Список доступных правил:
|
|
9
|
+
|
|
10
|
+
Константа |Правило валидации |Описание
|
|
11
|
+
--------------------------------|---------------------------|--------
|
|
12
|
+
Validator::EMAIL |[FILTER_VALIDATE_EMAIL](http://www.php.net/manual/en/filter.filters.validate.php)|Validate value as email
|
|
13
|
+
Validator::IP |[FILTER_VALIDATE_IP](http://www.php.net/manual/en/filter.filters.validate.php)|Validate value as IP address
|
|
14
|
+
Validator::URL |[FILTER_VALIDATE_URL](http://www.php.net/manual/en/filter.filters.validate.php)|Validate value as URL
|
|
15
|
+
Validator::MONTH |0 < month < 13 |Validate value as month
|
|
16
|
+
Validator::YEAR |#^[0-9]{1,2}$#i |Validate value as year
|
|
17
|
+
Validator::PHONE |#^[0-9\-\+\(\)\s]{6,15}$#i |Validate value as phone number
|
|
18
|
+
Validator::AMOUNT |#^[0-9\.]{1,11}$#i |Validate value as payment amount
|
|
19
|
+
Validator::CURRENCY |#^[A-Z]{1,3}$#i |Validate value as currency
|
|
20
|
+
Validator::CVV2 |#^[\S\s]{3,4}$#i |Validate value as card verification value
|
|
21
|
+
Validator::ZIP_CODE |#^[\S\s]{1,10}$#i |Validate value as zip code
|
|
22
|
+
Validator::COUNTRY |#^[A-Z]{1,2}$#i |Validate value as two-letter country or state code
|
|
23
|
+
Validator::DATE |#^[0-9]{6}$#i |Validate value as date in format MMDDYY
|
|
24
|
+
Validator::SSN |#^[0-9]{1,4}$#i |Validate value as last four digits of social security number
|
|
25
|
+
Validator::CREDIT_CARD_NUMBER |#^[0-9]{1,20}$#i |Validate value as credit card number
|
|
26
|
+
Validator::ID |#^[\S\s]{1,20}$#i |Validate value as ID (client, paynet, card-ref, etc.)
|
|
27
|
+
Validator::LONG_STRING |#^[\S\s]{1,128}$#i |Validate value as long string
|
|
28
|
+
Validator::MEDIUM_STRING |#^[\S\s]{1,50}$#i |Validate value as medium string
|
|
29
|
+
|
|
30
|
+
Метод принимает три параметра:
|
|
31
|
+
* Значение для валидации
|
|
32
|
+
* Имя правила или регулярное выражение для валидации
|
|
33
|
+
* Флаг, определяющий поведение метода в том случае, если значение не прошло валидацию
|
|
34
|
+
* **true** - будет брошено исключение
|
|
35
|
+
* **false** - будет возвращен булевый результат проверки
|
|
36
|
+
Пример использования метода:
|
|
37
|
+
|
|
38
|
+
```php
|
|
39
|
+
use PaynetEasy\PaynetEasyApi\Util\Validator;
|
|
40
|
+
use PaynetEasy\PaynetEasyApi\Exception\ValidationException;
|
|
41
|
+
|
|
42
|
+
var_dump(Validator::validateByRule('test@mail.com', Validator::EMAIL, false)); // true
|
|
43
|
+
var_dump(Validator::validateByRule('some string', '#\d#', false)); // false
|
|
44
|
+
|
|
45
|
+
// prints 'invalid'
|
|
46
|
+
try
|
|
47
|
+
{
|
|
48
|
+
Validator::validateByRule('test[at]mail.com', Validator::EMAIL);
|
|
49
|
+
print 'valid';
|
|
50
|
+
}
|
|
51
|
+
catch (ValidationException $e)
|
|
52
|
+
{
|
|
53
|
+
print 'invalid';
|
|
54
|
+
}
|
|
55
|
+
```
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Класс для работы с цепочками свойств, PropertyAccessor
|
|
2
|
+
|
|
3
|
+
В процессе работы с данными платежа возникает необходимость читать и изменять свойства объектов, хранящихся в Payment. Например, для чтения email клиента необходимо вызвать `$payment->getCustomer()->getEmail()`, а для записи - `$payment->getCustomer()->setEmail()`. Для удобного выполнения этих операций в классе **[PaynetEasy\PaynetEasyApi\Util\PropertyAccessor](../../source/PaynetEasy/PaynetEasyApi/Util/PropertyAccessor.php)** реализованы следующие методы:
|
|
4
|
+
* **[getValue()](#getValue)**: удобное чтение данных по цепочке свойств
|
|
5
|
+
* **[setValue()](#setValue)**: удобная запись данных по цепочке свойств
|
|
6
|
+
|
|
7
|
+
### <a name="getValue"></a> getValue(): удобное чтение данных по цепочке свойств
|
|
8
|
+
|
|
9
|
+
Метод предназначен для чтения данных из цепочки свойств. Цепочка свойств описывает порядок получения свойств из переданного объекта. Так, для цепочки `billingAddress.firstLine` будет получено значение свойства `firstLine` из объекта, хранящегося в свойстве `billingAddress`. Для получения свойств используются методы-геттеры, названия которых образованы добавлением префикса `get` к имени свойства. Таким образом, получение данных для цепочки `billingAddress.firstLine` приведет к вызову кода `$payment->getBillingAddress()->getFirstLine()`.
|
|
10
|
+
Метод принимает три параметра:
|
|
11
|
+
* Объект, цепочку свойств которого можно прочитать
|
|
12
|
+
* Цепочка свойств
|
|
13
|
+
* Флаг, определяющий поведение метода в том случае, если геттер для свойства не был найден или если свойство, в котором ожидался объект, пустое:
|
|
14
|
+
* **true** - будет брошено исключение
|
|
15
|
+
* **false** - будет возвращен `null`
|
|
16
|
+
|
|
17
|
+
Пример использования метода:
|
|
18
|
+
```php
|
|
19
|
+
use PaynetEasy\PaynetEasyApi\Util\PropertyAccessor;
|
|
20
|
+
use PaynetEasy\PaynetEasyApi\PaymentData\Payment;
|
|
21
|
+
use PaynetEasy\PaynetEasyApi\PaymentData\CreditCard;
|
|
22
|
+
use RuntimeException;
|
|
23
|
+
|
|
24
|
+
$creditCard = (new CreditCard)->setExpireYear(2014);
|
|
25
|
+
$payment = (new Payment)->setCreditCard($creditCard);
|
|
26
|
+
|
|
27
|
+
var_dump(PropertyAccessor::getValue($payment, 'creditCard.expireYear')); // 2014
|
|
28
|
+
var_dump(PropertyAccessor::getValue($payment, 'creditCard.expireMonth', false)); // null
|
|
29
|
+
|
|
30
|
+
// prints 'empty'
|
|
31
|
+
try
|
|
32
|
+
{
|
|
33
|
+
PropertyAccessor::getValue($payment, 'creditCard.expireMonth');
|
|
34
|
+
}
|
|
35
|
+
catch (RuntimeException $e)
|
|
36
|
+
{
|
|
37
|
+
print 'empty';
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### <a name="setValue"></a> setValue(): удобное изменение данных по цепочке свойств
|
|
42
|
+
|
|
43
|
+
Метод предназначен для изменения данных по цепочке свойств. Цепочка свойств описывает порядок получения свойств из переданного объекта. Так, для цепочки `billingAddress.firstLine` будет изменено значение свойства `firstLine` из объекта, хранящегося в свойстве `billingAddress`. Для получения свойств используются методы-геттеры, названия которых образованы добавлением префикса `get` к имени свойства, для изменения - методы-сеттеры, названия которых образованы добавлением префикса `set` к имени свойства. Таким образом, изменение данных для цепочки `billingAddress.firstLine` приведет к вызову кода `$payment->getBillingAddress()->setFirstLine($firstLine)`.
|
|
44
|
+
Метод принимает четыре параметра:
|
|
45
|
+
* Объект, цепочку свойств которого можно прочитать
|
|
46
|
+
* Цепочка свойств
|
|
47
|
+
* Новое значение
|
|
48
|
+
* Флаг, определяющий поведение метода в том случае, если геттер или сеттер для свойства не был найден или если свойство, в котором ожидался объект, пустое:
|
|
49
|
+
* **true** - будет брошено исключение
|
|
50
|
+
* **false** - будет возвращен `null`
|
|
51
|
+
|
|
52
|
+
Пример использования метода:
|
|
53
|
+
```php
|
|
54
|
+
use PaynetEasy\PaynetEasyApi\Util\PropertyAccessor;
|
|
55
|
+
use PaynetEasy\PaynetEasyApi\PaymentData\Payment;
|
|
56
|
+
use PaynetEasy\PaynetEasyApi\PaymentData\CreditCard;
|
|
57
|
+
use RuntimeException;
|
|
58
|
+
|
|
59
|
+
$creditCard = (new CreditCard)->setExpireYear(2014);
|
|
60
|
+
$payment = (new Payment)->setCreditCard($creditCard);
|
|
61
|
+
|
|
62
|
+
PropertyAccessor::setValue($payment, 'creditCard.expireYear', 2015);
|
|
63
|
+
var_dump(PropertyAccessor::getValue($payment, 'creditCard.expireYear')); // 2015
|
|
64
|
+
|
|
65
|
+
PropertyAccessor::setValue($payment, 'creditCard.nonExistentProperty', 'value', false); // nothing will happen
|
|
66
|
+
|
|
67
|
+
// prints 'nonexistent property'
|
|
68
|
+
try
|
|
69
|
+
{
|
|
70
|
+
PropertyAccessor::setValue($payment, 'creditCard.nonExistentProperty', 'value');
|
|
71
|
+
}
|
|
72
|
+
catch (RuntimeException $e)
|
|
73
|
+
{
|
|
74
|
+
print 'nonexistent property';
|
|
75
|
+
}
|
|
76
|
+
```
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# Sale transactions
|
|
2
|
+
|
|
3
|
+
Список запросов сценария:
|
|
4
|
+
* [Запрос "sale"](#sale)
|
|
5
|
+
* [Запрос "status"](#status)
|
|
6
|
+
|
|
7
|
+
## Общие положения
|
|
8
|
+
|
|
9
|
+
* В данной статье описывается исключительно работа с библиотекой. Полная информация о выполнении Sale transactions расположена в [статье в wiki PaynetEasy](http://wiki.payneteasy.com/index.php/PnE:Sale_Transactions).
|
|
10
|
+
* Описание правил валидации можно найти в описании метода **[Validator::validateByRule()](../library-internals/02-validator.md#validateByRule)**.
|
|
11
|
+
* Описание работы с цепочками свойств можно найти в описании класса **[PropertyAccessor](../library-internals/03-property-accessor.md)**
|
|
12
|
+
|
|
13
|
+
## <a name="sale"></a> Запрос "sale"
|
|
14
|
+
|
|
15
|
+
Запрос применяется для оплаты с помощью кредитной карты. При этом информация о карте вводится на стороне сервиса мерчанта и передается в запросе к PaynetEasy. После выполнения данного запроса необходимо выполнить серию запросов "**status**" для обновления статуса платежа. Для этого сервис мерчанта может вывести самообновляющуюся страницу, каждая перезагрузка которой будет выполнять запрос "**status**".
|
|
16
|
+
|
|
17
|
+
[Пример самообновляющейся страницы](../../example/common/waitPage.html)
|
|
18
|
+
|
|
19
|
+
##### Обязательные параметры запроса
|
|
20
|
+
|
|
21
|
+
Поле запроса |Цепочка свойств платежа |Правило валидации
|
|
22
|
+
--------------------|-----------------------------------|-----------------
|
|
23
|
+
client_orderid |payment.clientId |Validator::ID
|
|
24
|
+
order_desc |payment.description |Validator::LONG_STRING
|
|
25
|
+
amount |payment.amount |Validator::AMOUNT
|
|
26
|
+
currency |payment.currency |Validator::CURRENCY
|
|
27
|
+
address1 |payment.billingAddress.firstLine |Validator::MEDIUM_STRING
|
|
28
|
+
city |payment.billingAddress.city |Validator::MEDIUM_STRING
|
|
29
|
+
zip_code |payment.billingAddress.zipCode |Validator::ZIP_CODE
|
|
30
|
+
country |payment.billingAddress.country |Validator::COUNTRY
|
|
31
|
+
phone |payment.billingAddress.phone |Validator::PHONE
|
|
32
|
+
ipaddress |payment.customer.ipAddress |Validator::IP
|
|
33
|
+
email |payment.customer.email |Validator::EMAIL
|
|
34
|
+
card_printed_name |payment.creditCard.cardPrintedName |Validator::LONG_STRING
|
|
35
|
+
credit_card_number |payment.creditCard.creditCardNumber|Validator::CREDIT_CARD_NUMBER
|
|
36
|
+
expire_month |payment.creditCard.expireMonth |Validator::MONTH
|
|
37
|
+
expire_year |payment.creditCard.expireYear |Validator::YEAR
|
|
38
|
+
cvv2 |payment.creditCard.cvv2 |Validator::CVV2
|
|
39
|
+
redirect_url |queryConfig.redirectUrl |Validator::URL
|
|
40
|
+
|
|
41
|
+
##### Необязательные параметры запроса
|
|
42
|
+
|
|
43
|
+
Поле запроса |Цепочка свойств платежа |Правило валидации
|
|
44
|
+
--------------------|-----------------------------------|-----------------
|
|
45
|
+
first_name |payment.customer.firstName |Validator::MEDIUM_STRING
|
|
46
|
+
last_name |payment.customer.lastName |Validator::MEDIUM_STRING
|
|
47
|
+
ssn |payment.customer.ssn |Validator::SSN
|
|
48
|
+
birthday |payment.customer.birthday |Validator::DATE
|
|
49
|
+
state |payment.billingAddress.state |Validator::COUNTRY
|
|
50
|
+
cell_phone |payment.billingAddress.cellPhone |Validator::PHONE
|
|
51
|
+
destination |payment.destination |Validator::LONG_STRING
|
|
52
|
+
site_url |queryConfig.siteUrl |Validator::URL
|
|
53
|
+
server_callback_url |queryConfig.callbackUrl |Validator::URL
|
|
54
|
+
|
|
55
|
+
[Пример выполнения запроса sale](../../example/sale.php)
|
|
56
|
+
|
|
57
|
+
## <a name="status"></a> Запрос "status"
|
|
58
|
+
|
|
59
|
+
Запрос применяется для проверки статуса платежа. Обычно требуется серия таких запросов из-за того, что обработка платежа занимает некоторое время. В зависимости от типа авторизации клиента (необходима 3D-авторизация или нет) и статуса платежа обработка результата этого запроса может происходить несколькими путями.
|
|
60
|
+
|
|
61
|
+
##### Необходимо обновление платежа
|
|
62
|
+
|
|
63
|
+
В том случае, если статус платежа не изменился (значение поля **status** - **processing**) и нет необходимости в дополнительных шагах авторизации, то запустить проверку статуса еще раз.
|
|
64
|
+
|
|
65
|
+
##### Необходима 3D-аторизация
|
|
66
|
+
|
|
67
|
+
В ответе на запрос будет передано поле **html**, содержимое которого необходимо вывести на экран браузера клиента. Содержимое поля представляет собой форму, которая переадресует пользователя для выполнения 3D-авторизации.
|
|
68
|
+
|
|
69
|
+
##### Обработка платежа завершена
|
|
70
|
+
|
|
71
|
+
В ответе на запрос поле **status** содержит результат обработки платежа - **approved**, **filtered**, **declined**, **error**
|
|
72
|
+
|
|
73
|
+
##### Обязательные параметры запроса
|
|
74
|
+
|
|
75
|
+
Поле запроса |Цепочка свойств платежа|Правило валидации
|
|
76
|
+
--------------------|-----------------------|-----------------
|
|
77
|
+
client_orderid |payment.clientId |Validator::ID
|
|
78
|
+
orderid |payment.paynetId |Validator::ID
|
|
79
|
+
login |queryConfig.login |Validator::MEDIUM_STRING
|
|
80
|
+
|
|
81
|
+
[Пример выполнения запроса status](../../example/status.php)
|
|
82
|
+
|
|
83
|
+
## <a name="3d-redirect"> Обработка результата платежа после 3D-авторизации
|
|
84
|
+
|
|
85
|
+
Если при обработке платежа выполнялась 3D-авторизация, то при возвращении пользователя с формы авторизации на сервис мерчанта будут переданы данные с результатом обработки платежа. Обработка этих данных совпадает с обработкой данных для [sale-form, preauth-form или transfer-form](05-payment-form-integration.md) и описана в [базовом примере использования библиотеки](../00-basic-tutorial.md#stage_2).
|
|
86
|
+
|
|
87
|
+
## <a name="callback"></a> Обработка обратного вызова
|
|
88
|
+
|
|
89
|
+
После завершения обработки платежа на стороне PaynetEasy, данные с результатом обработки передаются в сервис мерчанта с помощью обратного вызова. Это необходимо, чтобы платеж был обработан сервисом мерчанта независимо от того, выполнил пользователь корректно возврат с шлюза PaynetEasy или нет.
|
|
90
|
+
[Подробнее о Merchant callbacks](06-merchant-callbacks.md)
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Preauth/Capture transactions
|
|
2
|
+
|
|
3
|
+
Список запросов сценария:
|
|
4
|
+
* [Запрос "preauth"](#preauth)
|
|
5
|
+
* [Запрос "capture"](#capture)
|
|
6
|
+
* [Запрос "status"](#status)
|
|
7
|
+
|
|
8
|
+
## Общие положения
|
|
9
|
+
|
|
10
|
+
* В данной статье описывается исключительно работа с библиотекой. Полная информация о выполнении Preauth/Capture transactions расположена в [статье в wiki PaynetEasy](http://wiki.payneteasy.com/index.php/PnE:Preauth/Capture_Transactions).
|
|
11
|
+
* Описание правил валидации можно найти в описании метода **[Validator::validateByRule()](../library-internals/02-validator.md#validateByRule)**.
|
|
12
|
+
* Описание работы с цепочками свойств можно найти в описании класса **[PropertyAccessor](../library-internals/03-property-accessor.md)**
|
|
13
|
+
|
|
14
|
+
## <a name="preauth"></a> Запрос "preauth"
|
|
15
|
+
|
|
16
|
+
Запрос применяется для блокирования части средств кредитной карты клиента. При этом информация о карте вводится на стороне сервиса мерчанта и передается в запросе к PaynetEasy. После отправки данного запроса необходимо выполнить серию запросов "**status**" для обновления статуса платежа. Для этого сервис мерчанта может вывести самообновляющуюся страницу, каждая перезагрузка которой будет выполнять запрос "**status**". После успешного завершения этого запроса для списания средств с карты клиента необходимо выполнить запрос **[capture](#capture)**.
|
|
17
|
+
|
|
18
|
+
[Пример самообновляющейся страницы](../../example/common/waitPage.html)
|
|
19
|
+
|
|
20
|
+
##### Обязательные параметры запроса
|
|
21
|
+
|
|
22
|
+
Поле запроса |Цепочка свойств платежа |Правило валидации
|
|
23
|
+
--------------------|-----------------------------------|-----------------
|
|
24
|
+
client_orderid |payment.clientId |Validator::ID
|
|
25
|
+
order_desc |payment.description |Validator::LONG_STRING
|
|
26
|
+
amount |payment.amount |Validator::AMOUNT
|
|
27
|
+
currency |payment.currency |Validator::CURRENCY
|
|
28
|
+
address1 |payment.billingAddress.firstLine |Validator::MEDIUM_STRING
|
|
29
|
+
city |payment.billingAddress.city |Validator::MEDIUM_STRING
|
|
30
|
+
zip_code |payment.billingAddress.zipCode |Validator::ZIP_CODE
|
|
31
|
+
country |payment.billingAddress.country |Validator::COUNTRY
|
|
32
|
+
phone |payment.billingAddress.phone |Validator::PHONE
|
|
33
|
+
ipaddress |payment.customer.ipAddress |Validator::IP
|
|
34
|
+
email |payment.customer.email |Validator::EMAIL
|
|
35
|
+
card_printed_name |payment.creditCard.cardPrintedName |Validator::LONG_STRING
|
|
36
|
+
credit_card_number |payment.creditCard.creditCardNumber|Validator::CREDIT_CARD_NUMBER
|
|
37
|
+
expire_month |payment.creditCard.expireMonth |Validator::MONTH
|
|
38
|
+
expire_year |payment.creditCard.expireYear |Validator::YEAR
|
|
39
|
+
cvv2 |payment.creditCard.cvv2 |Validator::CVV2
|
|
40
|
+
redirect_url |queryConfig.redirectUrl |Validator::URL
|
|
41
|
+
|
|
42
|
+
##### Необязательные параметры запроса
|
|
43
|
+
|
|
44
|
+
Поле запроса |Цепочка свойств платежа |Правило валидации
|
|
45
|
+
--------------------|-----------------------------------|-----------------
|
|
46
|
+
first_name |payment.customer.firstName |Validator::MEDIUM_STRING
|
|
47
|
+
last_name |payment.customer.lastName |Validator::MEDIUM_STRING
|
|
48
|
+
ssn |payment.customer.ssn |Validator::SSN
|
|
49
|
+
birthday |payment.customer.birthday |Validator::DATE
|
|
50
|
+
state |payment.billingAddress.state |Validator::COUNTRY
|
|
51
|
+
cell_phone |payment.billingAddress.cellPhone |Validator::PHONE
|
|
52
|
+
destination |payment.destination |Validator::LONG_STRING
|
|
53
|
+
site_url |queryConfig.siteUrl |Validator::URL
|
|
54
|
+
server_callback_url |queryConfig.callbackUrl |Validator::URL
|
|
55
|
+
|
|
56
|
+
[Пример выполнения запроса preauth](../../example/preauth.php)
|
|
57
|
+
|
|
58
|
+
## <a name="capture"></a> Запрос "capture"
|
|
59
|
+
|
|
60
|
+
Запрос применяется для списания средств, ранее блокированных запросом **[preauth](#preauth)**, с карты клиента. После выполнения данного запроса необходимо выполнить серию запросов "**status**" для обновления статуса платежа. Для этого сервис мерчанта может вывести самообновляющуюся страницу, каждая перезагрузка которой будет выполнять запрос "**status**". **Внимание!** Если в библиотеку будет передан платеж, созданный ранее для выполнения запроса **[preauth](#preauth)**, то его данные будут перезаписаны данными запроса **capture**. Создайте для запроса **capture** новый платеж.
|
|
61
|
+
|
|
62
|
+
##### Обязательные параметры запроса
|
|
63
|
+
|
|
64
|
+
Поле запроса |Цепочка свойств платежа|Правило валидации
|
|
65
|
+
--------------------|-----------------------|-----------------
|
|
66
|
+
client_orderid |payment.clientId |Validator::ID
|
|
67
|
+
orderid |payment.paynetId |Validator::ID
|
|
68
|
+
login |queryConfig.login |Validator::MEDIUM_STRING
|
|
69
|
+
|
|
70
|
+
[Пример выполнения запроса capture](../../example/capture.php)
|
|
71
|
+
|
|
72
|
+
## <a name="status"></a> Запрос "status"
|
|
73
|
+
|
|
74
|
+
Запрос применяется для проверки статуса платежа. Обычно требуется серия таких запросов из-за того, что обработка платежа занимает некоторое время. В зависимости от типа авторизации клиента (необходима 3D-авторизация или нет) и статуса платежа обработка результата этого запроса может происходить несколькими путями.
|
|
75
|
+
|
|
76
|
+
##### Необходимо обновление платежа
|
|
77
|
+
|
|
78
|
+
В том случае, если статус платежа не изменился (значение поля **status** - **processing**) и нет необходимости в дополнительных шагах авторизации, то запустить проверку статуса еще раз.
|
|
79
|
+
|
|
80
|
+
##### Необходима 3D-аторизация (только при выполнении запроса **[preauth](#preauth)**)
|
|
81
|
+
|
|
82
|
+
В ответе на запрос будет передано поле **html**, содержимое которого необходимо вывести на экран браузера клиента. Содержимое поля представляет собой форму, которая переадресует пользователя для выполнения 3D-авторизации.
|
|
83
|
+
|
|
84
|
+
##### Обработка платежа завершена
|
|
85
|
+
|
|
86
|
+
В ответе на запрос поле **status** содержит результат обработки платежа - **approved**, **filtered**, **declined**, **error**
|
|
87
|
+
|
|
88
|
+
##### Обязательные параметры запроса
|
|
89
|
+
|
|
90
|
+
Поле запроса |Цепочка свойств платежа|Правило валидации
|
|
91
|
+
--------------------|-----------------------|-----------------
|
|
92
|
+
client_orderid |payment.clientId |Validator::ID
|
|
93
|
+
orderid |payment.paynetId |Validator::ID
|
|
94
|
+
login |queryConfig.login |Validator::MEDIUM_STRING
|
|
95
|
+
|
|
96
|
+
[Пример выполнения запроса status](../../example/status.php)
|
|
97
|
+
|
|
98
|
+
## <a name="3d-redirect"> Обработка результата платежа после 3D-авторизации (только при выполнении запроса **[preauth](#preauth)**)
|
|
99
|
+
|
|
100
|
+
Если при обработке платежа выполнялась 3D-авторизация, то при возвращении пользователя с формы авторизации на сервис мерчанта будут переданы данные с результатом обработки платежа. Обработка этих данных совпадает с обработкой данных для [sale-form, preauth-form или transfer-form](05-payment-form-integration.md) и описана в [базовом примере использования библиотеки](../00-basic-tutorial.md#stage_2).
|
|
101
|
+
|
|
102
|
+
## <a name="callback"></a> Обработка обратного вызова
|
|
103
|
+
|
|
104
|
+
После завершения обработки платежа на стороне PaynetEasy, данные с результатом обработки передаются в сервис мерчанта с помощью обратного вызова. Это необходимо, чтобы платеж был обработан сервисом мерчанта независимо от того, выполнил пользователь корректно возврат с шлюза PaynetEasy или нет.
|
|
105
|
+
[Подробнее о Merchant callbacks](06-merchant-callbacks.md)
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# Transfer transactions
|
|
2
|
+
|
|
3
|
+
Список запросов сценария:
|
|
4
|
+
* [Запрос "create-card-ref"](#create-card-ref)
|
|
5
|
+
* [Запрос "transfer-by-ref"](#transfer-by-ref)
|
|
6
|
+
* [Запрос "status"](#status)
|
|
7
|
+
|
|
8
|
+
## Общие положения
|
|
9
|
+
|
|
10
|
+
* В данной статье описывается исключительно работа с библиотекой. Полная информация о выполнении Transfer transactions расположена в [статье в wiki PaynetEasy](http://wiki.payneteasy.com/index.php/PnE:Transfer_Transactions).
|
|
11
|
+
* Описание правил валидации можно найти в описании метода **[Validator::validateByRule()](../library-internals/02-validator.md#validateByRule)**.
|
|
12
|
+
* Описание работы с цепочками свойств можно найти в описании класса **[PropertyAccessor](../library-internals/03-property-accessor.md)**
|
|
13
|
+
|
|
14
|
+
## <a name="create-card-ref"></a> Запрос "create-card-ref"
|
|
15
|
+
|
|
16
|
+
Запрос применяется для получения id для кредитной карты, сохраненной на стороне PaynetEasy. Этот id позволяет совершать повторные платежи без ввода данных кредитной карты как на стороне сервиса мерчанта так и на стороне PaynetEasy.
|
|
17
|
+
Перед выполнением этого запроса необходимо выполнить один из следующих сценариев для проверки данных, которые ввел клиент:
|
|
18
|
+
* [Sale Transactions](00-sale-transactions.md)
|
|
19
|
+
* [Preauth/Capture Transactions](01-preauth-capture-transactions.md)
|
|
20
|
+
* [Payment Form Integration](05-payment-form-integration.md)
|
|
21
|
+
|
|
22
|
+
##### Обязательные параметры запроса
|
|
23
|
+
|
|
24
|
+
Поле запроса |Цепочка свойств платежа|Правило валидации
|
|
25
|
+
--------------------|-----------------------|-----------------
|
|
26
|
+
client_orderid |payment.clientId |Validator::ID
|
|
27
|
+
orderid |payment.paynetId |Validator::ID
|
|
28
|
+
login |queryConfig.login |Validator::MEDIUM_STRING
|
|
29
|
+
|
|
30
|
+
[Пример выполнения запроса create-card-ref](../../example/create-card-ref.php)
|
|
31
|
+
|
|
32
|
+
После выполнения данного запроса будет получен id сохраненной кредитной карты и создан объект **[RecurrentCard](../library-internals/00-payment-data.md#RecurrentCard)**. Получить доступ к **RecurrentCard** можно с помощью вызова
|
|
33
|
+
`$payment->getRecurrentCardFrom()`, а к ее id с помощью вызова `$payment->getRecurrentCardFrom()->getCardReferenceId()`
|
|
34
|
+
|
|
35
|
+
## <a name="transfer-by-ref"></a> Запрос "transfer-by-ref"
|
|
36
|
+
|
|
37
|
+
Запрос применяется для перевода определенной суммы с одного счета на другой.
|
|
38
|
+
Перед выполнением этого запроса необходимо как минимум один запрос [create-card-ref](#create-card-ref), для получения id сохраненной карты, на которую производится перевод средств. Если перевод выполняется между двумя картами клиентов, то необходимо выполнить два запроса [create-card-ref](#create-card-ref), для получения id сохраненных карт, между которымы переводятся средства.
|
|
39
|
+
После выполнения данного запроса необходимо выполнить серию запросов "**status**" для обновления статуса платежа. Для этого сервис мерчанта может вывести самообновляющуюся страницу, каждая перезагрузка которой будет выполнять запрос "**status**".
|
|
40
|
+
|
|
41
|
+
##### Обязательные параметры запроса
|
|
42
|
+
|
|
43
|
+
Поле запроса |Цепочка свойств платежа |Правило валидации
|
|
44
|
+
------------------------|-----------------------------------|-----------------
|
|
45
|
+
client_orderid |payment.clientId |Validator::ID
|
|
46
|
+
amount |payment.amount |Validator::AMOUNT
|
|
47
|
+
currency |payment.currency |Validator::CURRENCY
|
|
48
|
+
ipaddress |payment.customer.ipAddress |Validator::IP
|
|
49
|
+
destination-card-ref-id |payment.recurrentCardTo.paynetId |Validator::ID
|
|
50
|
+
login |queryConfig.login |Validator::MEDIUM_STRING
|
|
51
|
+
|
|
52
|
+
##### Необязательные параметры запроса
|
|
53
|
+
|
|
54
|
+
Поле запроса |Цепочка свойств платежа |Правило валидации
|
|
55
|
+
------------------------|-----------------------------------|-----------------
|
|
56
|
+
order_desc |payment.description |Validator::LONG_STRING
|
|
57
|
+
source-card-ref-id |payment.recurrentCardFrom.paynetId |Validator::ID
|
|
58
|
+
cvv2 |payment.recurrentCardFrom.cvv2 |Validator::CVV2
|
|
59
|
+
redirect_url |queryConfig.redirectUrl |Validator::URL
|
|
60
|
+
server_callback_url |queryConfig.callbackUrl |Validator::URL
|
|
61
|
+
|
|
62
|
+
[Пример выполнения запроса transfer-by-ref](../../example/transfer-by-ref.php)
|
|
63
|
+
|
|
64
|
+
## <a name="status"></a> Запрос "status"
|
|
65
|
+
|
|
66
|
+
Запрос применяется для проверки статуса платежа. Обычно требуется серия таких запросов из-за того, что обработка платежа занимает некоторое время. В зависимости от статуса платежа обработка результата этого запроса может происходить несколькими путями.
|
|
67
|
+
|
|
68
|
+
##### Необходимо обновление платежа
|
|
69
|
+
|
|
70
|
+
В том случае, если статус платежа не изменился (значение поля **status** - **processing**) и нет необходимости в дополнительных шагах авторизации, то запустить проверку статуса еще раз.
|
|
71
|
+
|
|
72
|
+
##### Обработка платежа завершена
|
|
73
|
+
|
|
74
|
+
В ответе на запрос поле **status** содержит результат обработки платежа - **approved**, **filtered**, **declined**, **error**
|
|
75
|
+
|
|
76
|
+
##### Обязательные параметры запроса
|
|
77
|
+
|
|
78
|
+
Поле запроса |Цепочка свойств платежа|Правило валидации
|
|
79
|
+
--------------------|-----------------------|-----------------
|
|
80
|
+
client_orderid |payment.clientId |Validator::ID
|
|
81
|
+
orderid |payment.paynetId |Validator::ID
|
|
82
|
+
login |queryConfig.login |Validator::MEDIUM_STRING
|
|
83
|
+
|
|
84
|
+
[Пример выполнения запроса status](../../example/status.php)
|
|
85
|
+
|
|
86
|
+
## <a name="callback"></a> Обработка обратного вызова
|
|
87
|
+
|
|
88
|
+
После завершения обработки платежа на стороне PaynetEasy, данные с результатом обработки передаются в сервис мерчанта с помощью обратного вызова. Это необходимо, чтобы платеж был обработан сервисом мерчанта независимо от того, выполнил пользователь корректно возврат с шлюза PaynetEasy или нет.
|
|
89
|
+
[Подробнее о Merchant callbacks](06-merchant-callbacks.md)
|