Не так давно познакомился с интернет эквайрингом от компании «Payler» — payler.com. В сравнении с другими платёжными системами, эта обладает достаточно низким процентом комиссии за приём платежей. В момент знакомства я обнаружил, что среди готовых модулей оплат к различным cms не было моей. Мысль о создании тикета в обе технические поддержки заставила подумать о том, что это может затянуться на достаточно долгое время. В связи с этим вооружившись блокнотом и «боевым» проектом на свет появился готовый и рабочий модуль для приема платежей.
Для того, чтобы подключить модуль, необходимо:
1) Создать файл payler.php с представленным содержимым и сохранить в директории по пути "/netcat/modules/payment/classes/system/payler.php".
2) Затем переходим в раздел списки.
3) Далее «приём платежей:

4) Добавляем новый элемент с названием платёжной системы „Payler“ и дополнительным значением „nc_payment_system_payler“.

5) Далее в разделе Настройки => Приём платежей у нас появится новая платёжная система:

Где необходимо внести данные, предоставленные компанией Payler. А это: key и password. type по умолчанию OneStep — одностадийный (не регулярный платёж). site_name — название Вашего сайта. И наконец succes_url — это тот URL, куда будет перенаправлен пользователь после успешной транзакции.
<?
class nc_payment_system_payler extends nc_payment_system {
const TARGET_URL = "https://sandbox.payler.com/gapi/"; //secure боевой // sandbox тестовый
protected $automatic = TRUE;
// принимаемые валюты
protected $accepted_currencies = array('RUB', 'RUR');
// параметры сайта в платежной системе
protected $settings = array(
'key' => null,
'password' => null,
'type' => 'OneStep',
'site_name'=> null,
'succes_url'=> null,
);
// передаваемые параметры
protected $request_parameters = array( // 'InvId' => null,
// 'InvDesc' => null,
);
// получаемые параметры
protected $callback_response = array(
'InvId' => null,
'OutSum' => null,
);
public function curl_post_data($data, $url) {
$headers = array(
'Content-type: application/x-www-form-urlencoded',
'Cache-Control: no-cache',
'charset="utf-8"',
);
$data = http_build_query($data, '', '&');
$options = array (
CURLOPT_URL => $url,
CURLOPT_POST => 1,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_TIMEOUT => 45,
CURLOPT_VERBOSE => 0,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_POSTFIELDS => $data,
CURLOPT_SSL_VERIFYHOST => 0,
CURLOPT_SSL_VERIFYPEER => 0,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$json = curl_exec($ch);
if ($json == false) {
die ('Curl error: ' . curl_error($ch) . '<br>');
}
//Преобразуем JSON в ассоциативный массив
$result = json_decode($json, TRUE);
curl_close($ch);
return $result;
}
//новая функция для сессии
public function execute_payment_session($data, $url) {
$result = $this->curl_post_data($data, $url);
return $result['session_id'];
}
/**
*
*/
public function execute_payment_request(nc_payment_invoice $invoice) {
$amount = $invoice->get_amount("%0.2F");
$site_name = $this->get_setting('site_name');
$userdata = array("site_id" => "1");
$userdata = serialize($userdata);
$data = array(
'key' => $this->settings['key'],
'type' => 'OneStep',
'order_id' => $invoice->get_id(),
'amount' => $amount*100,
'userdata' => $userdata,
'product' => 'Оплата заказа от сайта '.$site_name.''
);
$session_id = $this->execute_payment_session($data, nc_payment_system_payler::TARGET_URL."StartSession");
ob_end_clean();
$form = "
<html>
<body>
<form action='" . nc_payment_system_payler::TARGET_URL."Pay' method='post'>" .
$this->make_inputs(array(
'session_id' => $session_id,
)) . "
</form>
<script>
document.forms[0].submit();
</script>
</body>
</html>";
echo $form;
exit;
}
/**
* @param nc_payment_invoice $invoice
*/
public function on_response(nc_payment_invoice $invoice = null) {
$invoice->set('status', nc_payment_invoice::STATUS_SUCCESS);
$invoice->save();
$this->on_payment_success($invoice);
$succes_url = $this->get_setting('succes_url');
header("Location: ".$succes_url."?order_id=".$invoice->get_id());
//echo 'OK' . $invoice->get_id();
}
/**
*
*/
public function validate_payment_request_parameters() {
}
/**
* @param nc_payment_invoice $invoice
*/
public function validate_payment_callback_response(nc_payment_invoice $invoice = null) {
$data = array (
"key" => $this->settings['key'],
"order_id" => $this->get_response_value('order_id')
);
$result = $this->curl_post_data($data, nc_payment_system_payler::TARGET_URL."GetStatus");
if ($result['status'] != 'Charged') {
$this->add_error(self::ERROR_SOME_PARAMETERS_ARE_NOT_VALID);
}
}
public function load_invoice_on_callback() {
return $this->load_invoice($this->get_response_value('order_id'));
}
}
Для того, чтобы подключить модуль, необходимо:
1) Создать файл payler.php с представленным содержимым и сохранить в директории по пути "/netcat/modules/payment/classes/system/payler.php".
2) Затем переходим в раздел списки.

3) Далее «приём платежей:

4) Добавляем новый элемент с названием платёжной системы „Payler“ и дополнительным значением „nc_payment_system_payler“.

5) Далее в разделе Настройки => Приём платежей у нас появится новая платёжная система:

Где необходимо внести данные, предоставленные компанией Payler. А это: key и password. type по умолчанию OneStep — одностадийный (не регулярный платёж). site_name — название Вашего сайта. И наконец succes_url — это тот URL, куда будет перенаправлен пользователь после успешной транзакции.