Как правило, модули платежных систем (ПС) построены по одинаковому принципу:
На стороне интернет магазина (ИМ) и сервера платежной системы (СПС) есть секретный ключ, с помощью которого производится генерация проверочного кода (ПК).
При совершении заказа клиентом магазина (КМ), ИМ получает данные, такие как:
(Обязательные данные отличаются в разных СПС)
Обрабатывая эти данные на стороне ИМ с секретным клюем формируется ПК, который вместе с данными передается на СПС.
Если СПС обрабатывая данные поступившие от ИМ получает такой же ПК, то клиенту дается возможность оплатить свой заказ. После совершения действий КМ (оплата, отказ итд) СПС отправляет новый ПК и данные оплаты на сторону ИМ.
ИМ проверяет правильность полученного ПК и изменяет статус заказа.
Создать класс платежной системы, который является наследником класса app\components\payment\AbstractPayment и переопределив 2 метода
content — вызывается на последнем этапе корзины, в этом методе нужно реализовать возможность перехода пользователя на страницу оплаты СПС. Чаще всего на этом этапе необходимо сформировать ПК и редиректом передать его вместе с данными о заказе на страницу обработчика СПС.
CheckResult — сюда приходит данные от СПС об результате оплаты заказа клиентов. Обычно приходят данные оплаты и новый ПК. В методе должна быть реализация проверки ПК пришедшего от сервера и ПК генерируемым из данных оплаты. Если проверка пришла и заказ оплачен то необходимо получить id транзакции из полученных от СПС данных и изменить данные транзакции.
$transaction->result_data = Json::encode($arrParams);
$transaction->status = OrderTransaction::TRANSACTION_SUCCESS;
$transaction->save(true, ['status', 'result_data']);
Создать миграцию для добавления платежной системы.
Пример миграции
public function up()
{
$this->insert(
\app\models\PaymentType::tableName(),
[
'name' => 'Platron',
'class' => 'app\components\payment\PlatronPayment',
'params' => \yii\helpers\Json::encode(
[
'merchantId' => '',
'secretKey' => '',
'strCurrency' => 'RUR',
'merchantUrl' => 'www.platron.ru',
'merchantScriptName' => 'payment.php'
]
),
]
);
}
где name — это название платежной системы
class — путь к классу платежной системы
params — данные в JSON, которые будут назначены свойствам класса ПС.