Загрузка сайта makevladakevlad
Создание сайтов

26

апр
2025

43

Подключение Ozon Pay

Подключение формы оплаты через Ozon Pay к сайту на CMS Simpla через API

Добавление функции send_curl_ozon в класс Orders

Открываем файлы api/Orders.php и любое место добавляем функцию

public function send_curl_ozon($url, $data){
$ch = curl_init('https://payapi.ozon.ru/v1/'.$url);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_HEADER, false);
$res = curl_exec($ch);
curl_close($ch);
return json_decode($res, JSON_UNESCAPED_UNICODE);
}

Добавляем новый тип оплаты для Simpla

В папке payment создаем папку OzonPay

Внутри папки создаем 3 файла - callback.php, OzonPay.php, settings.xml

Открываем файл OzonPay.php и добавляем код

class OzonPay extends Simpla
{	
	public function checkout_form($order_id, $button_text = null)
	{
		
		$accessKey = "11111111-1111-1111-1111-111111111111";
		$data_get = array(
			"extId"=>(string)$order_id,
			"accessKey"=>$accessKey,
		);
		
		$ozon = $this->orders->send_curl_ozon('getOrderDetails', $data_get);
		$link = $ozon['item']['payLink'];
	
		return "<a class='ozon_pay' href='$link' target='_blank'>Оплатить заказ</a>";
	}
}

Переменную $accessKey = "11111111-1111-1111-1111-111111111111" необходимо поставить Ваш токен в личном кабинете Ozon

Открываем файл callback.php и добавляем код

chdir ('../../');
require_once('api/Simpla.php');
$simpla = new Simpla();

$accessKey = "11111111-1111-1111-1111-111111111111";
$order_number = $_GET['id'];
$data_get = array(
	"extId"=>(string)$order_number,
	"accessKey"=>$accessKey,
);

$ozon = $simpla->orders->send_curl_ozon('getOrderDetails', $data_get);
$amount = $ozon['item']['remainingAmount']['value'];

if($ozon['item']['status'] != 'STATUS_PAID')
	die('Заказ не оплачен');

$order = $simpla->orders->get_order(intval($order_number));
if(empty($order))
	die('Оплачиваемый заказ не найден');
 
// Выбираем из базы соответствующий метод оплаты
$method = $simpla->payment->get_payment_method(intval($order->payment_method_id));
if(empty($method))
	die("Неизвестный метод оплаты");
	
// Нельзя оплатить уже оплаченный заказ  
if($order->paid)
	die('Этот заказ уже оплачен');

if($amount != round($simpla->money->convert($order->total_price, $method->currency_id, false), 2) * 100 || $amount<=0)
	die("incorrect price");

// Установим статус оплачен
$simpla->orders->update_order(intval($order->id), array('paid'=>1));

// Отправим уведомление на email
$simpla->notify->email_order_user(intval($order->id));
$simpla->notify->email_order_admin(intval($order->id));

// Спишем товары  
$simpla->orders->close(intval($order->id));
header('Location: '.$simpla->config->root_url.'/order/'.$order->url);

Открываем файл settings.xml и добавляем код

<?xml version="1.0" encoding="UTF-8"?>
<module>
	<name>
		OzonPay
	</name>
	<settings>
		<variable>AccessKey</variable>
		<name>ID токена</name>
	</settings>
	<settings>
		<variable>SecretKey</variable>
		<name>Секретный ключ</name>
	</settings>
	<settings>
		<variable>NotificationSecretKey</variable>
		<name>Секретный ключ для нотификаций</name>
	</settings>
</module>

Добавление оплатой картой в админке Simpla

В админке добавляем новый способ оплаты Банковской картой, если ранее не был добавлен. Либо редактируем текущий способ. При редактирование, в выпадающем списке выбираем OzonPay и нажимаем сохранить

Добавление кнопки с формой оплаты на сайте

Добавим кнопку для генерирование формы оплаты на сайте. Через форму будет доступна оплата по QR коду(СБП) и через ввод карты

Открываем файл view/CartView.php и находим строку с условием   if(isset($_POST['checkout'])) и в конец вставляем код

$order_items = array();
				$accessKey = "11111111-1111-1111-1111-111111111111";
				$purchases = $this->orders->get_purchases(array('order_id'=>intval($order_id)));
				foreach($purchases as $purchase){
					$order_items[] = array(
						"extId" => $purchase->id,
						"name" => $purchase->product_name,
						"needMark" => false,
						"price" => array(
							"currencyCode" => "643",
							"value"=> round($purchase->price)*100,
						),
						"quantity" => $purchase->amount,
						"type" => "TYPE_PRODUCT",
						"unitType" => "UNIT_PIECE",
						"vat" => "VAT_NONE",
					);
				}
				if($order->delivery_price > 0){
					$order_items[] = array(
						"extId" => '9999',
						"name" => "Доставка",
						"needMark" => false,
						"price" => array(
							"currencyCode" => "643",
							"value"=> round($order->delivery_price)*100,
						),
						"quantity" => 1,
						"type" => "TYPE_PRODUCT",
						"unitType" => "UNIT_PIECE",
						"vat" => "VAT_NONE",
					);
				}
					
				$data_create = array(
					"accessKey" => $accessKey,
					"amount" => array(
						"currencyCode" => "643",
						"value" => round($order->total_price)*100,  
					),
				   "enableFiscalization" => false,
					"extId" => (string)$order_id,
					"fiscalizationType" => "FISCAL_TYPE_SINGLE",
					"paymentAlgorithm" => "PAY_ALGO_SMS",
					"successUrl" => $this->config->root_url."/payment/OzonPay/callback.php?id=".$order_id,
					"failUrl" => $this->config->root_url."/bad_pay/",
					"receiptEmail" => $order->email,
					"notificationUrl" => $this->config->root_url,
					"items"=> $order_items
				);
				

Всё, готово. Теперь на сайте с админкой на симпле подключена форма для оплаты через озон пей. Все оплаты будут отображаться в личном кабинете Озон Банк с указанием номера заказа и заказанных товаров. Также отображение оплат и детализации можно сделать в самой админки сайта через API.

Пример сайта, где работает данная интеграция RusAtribut

Помощь в интеграции оплаты для интернет магазина

Если Вам требуется услуга в настройке и интеграции онлайн оплаты через Ozon Pay на Ваш интернет магазин, то пишите мне в WhatsApp или Телеграмм и ближайшие время у Вас всё будет.