7786
Открываем файлы 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 или Телеграмм и ближайшие время у Вас всё будет.
Популярные записи