7618
Открываем файлы 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); }
В папке 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>
В админке добавляем новый способ оплаты Банковской картой, если ранее не был добавлен. Либо редактируем текущий способ. При редактирование, в выпадающем списке выбираем 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 или Телеграмм и ближайшие время у Вас всё будет.
Популярные записи