<?php /** Класс оплаты в кредит или рассрочку для Тинькофф */ require_once MODX_CORE_PATH . 'components/minishop2/model/minishop2/mspaymenthandler.class.php'; class Tinkoff extends msPaymentHandler implements msPaymentInterface{ public $demo; public $shopId; //Идентификатор магазина public $showcaseId; /** * name Название товарной позиции * quantity Количество единиц товара в позиции * price Цена одной единицы товара */ public $items = []; //Список товаров public $OrderId; //Идентификатор заказа в системе партнера public $Language = 'ru'; public $SuccessURL; public $FailURL; private $createOrder; public function __construct(xPDOObject $object, $config = array()) { $this->demo = $object->xpdo->getOption('ms2_tinkoff_demo'); if($this->demo){ $this->createOrder = 'https://forma.tinkoff.ru/api/partners/v2/orders/create-demo'; }else{ $this->createOrder = 'https://forma.tinkoff.ru/api/partners/v2/orders/create'; } $this->shopId = $object->xpdo->getOption('ms2_tinkoff_shopId'); $this->showcaseId = $object->xpdo->getOption('ms2_tinkoff_showcaseId'); parent::__construct($object, $config); } public function send(msOrder $order) { $this->OrderId = $order->get('num'); // Собираем данные для отправки $products = $order->Products; foreach ($products as $item) { $items[] = [ 'name' => $item->name, 'quantity' => $item->count, 'price' => $item->price ]; } $user = $order->User; $profile = $user->Profile; $profile = $profile->toArray(); $data = [ 'shopId' => $this->shopId, 'showcaseId' => $this->showcaseId, 'sum' => $order->get('cost'), 'orderNumber' => $this->OrderId, 'successURL' => $this->SuccessURL, 'failURL' => $this->FailURL, 'items' => $items ]; $links =$this->init($data); return $this->success('', array('redirect' => $links['link'])); } public function init($data = []){ if($curl = curl_init()){ curl_setopt($curl, CURLOPT_URL, $this->createOrder); curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true); curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_POST, true); curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE)); curl_setopt($curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($curl, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', //'Content-Length: ' . strlen($data), )); $result = curl_exec($curl); $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE); curl_close($curl); if (!empty($result)) { return json_decode($result, true); } } } }