Skip to content

Commit

Permalink
0.3.7
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitrii-fediuk committed Oct 3, 2017
1 parent 5a08db0 commit e84d47d
Show file tree
Hide file tree
Showing 4 changed files with 270 additions and 2 deletions.
213 changes: 213 additions & 0 deletions Response.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,213 @@
<?php
namespace Dfe\YandexKassa;
use Df\Xml\G;
use Dfe\YandexKassa\W\Event as Ev;
use Magento\Framework\App\Response\Http;
use Magento\Framework\App\Response\HttpInterface as IHttp;
use Zend_Date as ZD;
use \Exception as Ex;

/**
* 2017-10-02
* 1. In English:
* 1.1. «HTTP notifications about payments» → «Interaction format» → «Response format»:
* https://tech.yandex.com/money/doc/payment-solution/payment-notifications/payment-notifications-http-docpage
* 1.2. «Order verification (checkOrder)»:
* *) «Response parameters»
* *) «Request processing result codes»
* *) «Examples» → «Response example for successful processing»
* *) «Examples» → «Response example with error»
* https://tech.yandex.com/money/doc/payment-solution/payment-notifications/payment-notifications-check-docpage
* 1.3. «Payment cancellation notification (cancelOrder)»:
* https://tech.yandex.com/money/doc/payment-solution/payment-notifications/payment-notifications-cancel-docpage
* *) «Response parameters»
* *) «Examples» → «Response example for successful processing»
* 1.4. «Payment notification (paymentAviso)»:
* *) «Response parameters»
* *) «Request processing result codes»
* *) «Examples» → «Response example for successful processing»
* *) «Examples» → «Response example with error»
* https://tech.yandex.com/money/doc/payment-solution/payment-notifications/payment-notifications-aviso-docpage
*
* 2. In Russian:
* 2.1. «HTTP-уведомления о переводах» → «Формат взаимодействия» → «Формат ответа»:
* https://tech.yandex.ru/money/doc/payment-solution/payment-notifications/payment-notifications-http-docpage
* 2.2. «Проверка заказа (checkOrder)»:
* *) «Параметры ответа»
* *) «Коды результата обработки запроса»
* *) «Примеры» → «Пример ответа при успехе обработки»
* *) «Примеры» → «Пример ответа при ошибке»
* https://tech.yandex.ru/money/doc/payment-solution/payment-notifications/payment-notifications-check-docpage
* 2.3. «Уведомление об отмене заказа (cancelOrder)»:
* *) «Параметры ответа»
* *) «Примеры» → «Пример ответа при успехе обработки»
* https://tech.yandex.ru/money/doc/payment-solution/payment-notifications/payment-notifications-cancel-docpage
* 2.4. «Уведомление о переводе (paymentAviso)»:
* *) «Параметры ответа»
* *) «Коды результата обработки запроса»
* *) «Примеры» → «Пример ответа при успехе обработки»
* *) «Примеры» → «Пример ответа при ошибке»
* https://tech.yandex.ru/money/doc/payment-solution/payment-notifications/payment-notifications-aviso-docpage
*
* @final Unable to use the PHP «final» keyword here because of the M2 code generation.
*/
class Response extends \Df\Framework\Controller\Response {
/**
* 2017-10-02
* @override
* @see \Df\Framework\Controller\Response::__toString()
* @used-by render()
* @used-by \Df\Payment\W\Action::execute()
* @return string
*/
final function __toString() {return df_xml_g("{$this->_ev->t()}Response", [], [G::P__ATTRIBUTES => [
/**
* 2017-10-03
* In English:
* «Code of the processing result. The table below lists possible values.»
*
* 0: Successful
* The merchant agreed and is ready to accept the transfer.
*
* 1: Authorization error
* The md5 parameter does not match the result of calculating the hash function. Fatal error.
*
* 100: Refused to accept transfer
* Refusal to accept the transfer with the specified parameters. Fatal error.
*
* 200: Request parsing error
* The merchant is not able to parse the request. Fatal error.
*
* ------------
*
* In Russian:
* «Код результата обработки. Список допустимых значений приведен в таблице ниже.»
*
* 0: Успешно
* Магазин дал согласие и готов принять перевод.
*
* 1: Ошибка авторизации
* Несовпадение значения параметра md5 с результатом расчета хэш-функции. Окончательная ошибка.
*
* 100: Отказ в приеме перевода (it is only for the `checkOrder` notification)
* Отказ в приеме перевода с заданными параметрами. Окончательная ошибка.
*
* 200
* Ошибка разбора запроса
* Магазин не в состоянии разобрать запрос. Окончательная ошибка.
*/
'code' => 0
// 2017-10-03
// «Yandex.Checkout transaction ID. Must match the invoiceId field in the request.»
// «Идентификатор транзакции в Яндекс.Кассе. Должен дублировать поле invoiceId запроса.»
,'invoiceId' => $this->_ev->r('invoiceId')
/**
* 2017-10-03
* In English:
* «Time in merchant's system when request was processed.»
* An example: «2011-05-04T20:38:11.000+04:00».
* Type: dateTime.
* https://tech.yandex.com/money/doc/payment-solution/reference/datatypes-docpage
* Temporary tag conforming to the RFC3339 standard in the following format:
* YYYY-MM-DDThh:mm:ss.fZZZZZ
* Format breakdown:
* YYYYYear, exactly 4 digits.
* MMMonth, exactly 2 digits (01 is January, and so on).
* DDDay of the month, exactly 2 digits (from 01 to 31).
* TLatin uppercase "T" character.
* hh — Hour, exactly 2 digits (24-hour format, from 00 to 23).
* mm — Minute, exactly 2 digits (from 00 to 59).
* ss — Second, exactly 2 digits (from 00 to 59).
* f — Fraction of a second (from 1 to 6 digits).
* May be omitted. In this case, omit the dot separator (.).
* ZZZZZTime zone. Acceptable values:
* ZUTC, uppercase "Z" character.
* + hh: mm or -hh:mm — Offset relative to UTC (GMT).
* Shows that the local time is used,
* which is ahead of or behind UTC the given number of hours and minutes.
* Example:
* 2011-07-01T19:00:00.000+04:00
* 7 p.m. on July 1, 2011 in the time zone Europe/Moscow (UTC+04:00).
*
* In Russian:
* «Момент обработки запроса по часам в системе магазина.»
* An example: «2011-05-04T20:38:11.000+04:00».
* Type: dateTime.
* https://tech.yandex.ru/money/doc/payment-solution/reference/datatypes-docpage
* Временная метка согласно стандарту RFC3339 в следующем формате:
* YYYY-MM-DDThh:mm:ss.fZZZZZ
* Расшифровка формата:
* YYYY — год, точно 4 цифры;
* MM — месяц, точно 2 цифры (01 — январь и т. д.);
* DD — день месяца, точно 2 цифры (от 01 до 31);
* T — латинский символ «T», должен быть в верхнем регистре;
* hh — часы, точно 2 цифры (24-часовой формат, от 00 до 23);
* mm — минуты, точно 2 цифры (от 00 до 59);
* ss — секунды, точно 2 цифры (от 00 до 59);
* f — дробная часть секунды (от 1 до 6 цифр).
* Может отсутствовать, в этом случае следует опускать и разделитель «.» (точку);
* ZZZZZ — часовой пояс, может принимать значения:
* Z - UTC, символ «Z» должен быть в верхнем регистре;
* + hh: mm или -hh:mm — смещение относительно UTC (GMT)
* (показывает, что указано локальное время,
* которое на данное число часов и минут опережает или отстает от UTC).
* Пример:
* 2011-07-01T19:00:00.000+04:00
* 19 часов 1 июля 2011 года, часовой пояс Europe/Moscow (UTC+04:00).
*/
,'performedDatetime' => ZD::now()->toString(ZD::ISO_8601)
// 2017-10-03
// «Store ID. Must match the `shopId` field in the request.»
// «Идентификатор магазина. Должен дублировать поле `shopId` запроса.»
,'shopId' => $this->_ev->r('shopId')
]]);}

/**
* 2017-10-02
* @override
* @see \Magento\Framework\Controller\AbstractResult::render()
* https://github.com/magento/magento2/blob/2.1.0/lib/internal/Magento/Framework/Controller/AbstractResult.php#L109-L113
* @param IHttp|Http $res
* @return $this
*/
final protected function render(IHttp $res) {
$res->setBody($this->__toString());
/**
* 2017-10-02
* In English: «MIME type: application/xml».
* https://tech.yandex.com/money/doc/payment-solution/payment-notifications/payment-notifications-http-docpage/
* In Russian: «MIME-тип: application/xml».
* https://tech.yandex.ru/money/doc/payment-solution/payment-notifications/payment-notifications-http-docpage/
*/
df_response_content_type('application/xml', $res);
return $this;
}

/**
* 2017-10-02
* @used-by __toString()
* @used-by i()
* @var Ev
*/
private $_ev;

/**
* 2017-10-02
* @used-by __toString()
* @used-by i()
* @var Ex|null
*/
private $_ex;

/**
* 2017-10-02
* @used-by \Dfe\YandexKassa\W\Responder::error()
* @used-by \Dfe\YandexKassa\W\Responder::success()
* @param Ev $ev
* @param Ex|null $ex [optional]
* @return self
*/
final static function i(Ev $ev, Ex $ex = null) {
/** @var self $i */ $i = new self; $i->_ev = $ev; $i->_ex = $ex; return $i;
}
}
17 changes: 17 additions & 0 deletions W/Reader.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?php
namespace Dfe\YandexKassa\W;
// 2017-10-02
final class Reader extends \Df\Payment\W\Reader {
/**
* 2017-10-02 `[Yandex.Kassa] An example of a «checkOrder» notification`: https://mage2.pro/t/4607
* {
* "action": "checkOrder",
* <...>
* }
* @override
* @see \Df\Payment\W\Reader::kt()
* @used-by \Df\Payment\W\Reader::tRaw()
* @return string
*/
protected function kt() {return 'action';}
}
38 changes: 38 additions & 0 deletions W/Responder.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
<?php
namespace Dfe\YandexKassa\W;
use Dfe\YandexKassa\Response;
/**
* 2017-10-02
* @method Event e()
*/
final class Responder extends \Df\Payment\W\Responder {
/**
* 2017-10-02
* @override
* @see \Df\Payment\W\Responder::error()
* @used-by \Df\Payment\W\Responder::setError()
* @param \Exception $e
* @return Response
*/
protected function error(\Exception $e) {return Response::i($this->e(), $e);}

/**
* 2017-10-02
* @override
* @see \Df\Payment\W\Responder::notForUs()
* @used-by \Df\Payment\W\Responder::setNotForUs()
* @param string|null $message [optional]
* @return Response
*/
protected function notForUs($message = null) {return $this->success();}

/**
* 2017-10-02
* @override
* @see \Df\Payment\W\Responder::success()
* @used-by notForUs()
* @used-by \Df\Payment\W\Responder::get()
* @return Response
*/
protected function success() {return Response::i($this->e());}
}
4 changes: 2 additions & 2 deletions composer.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "mage2pro/yandex-kassa"
,"version": "0.3.6"
,"version": "0.3.7"
,"description": "The «Yandex.Kassa» (Яндекс.Касса, Yandex.Checkout) payment extension for Magento 2."
,"type": "magento2-module"
,"homepage": "https://mage2.pro/c/extensions/yandex-kassa"
Expand All @@ -11,7 +11,7 @@
"homepage": "https://mage2.pro/users/dmitry_fedyuk",
"role": "Developer"
}]
,"require": {"mage2pro/core": ">=2.12.34"}
,"require": {"mage2pro/core": ">=2.12.35"}
,"autoload": {"files": ["registration.php"], "psr-4": {"Dfe\\YandexKassa\\": ""}}
,"keywords": [
"API"
Expand Down

0 comments on commit e84d47d

Please sign in to comment.