• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Купи в кредит на Woocomerce

sergiocharm

Опытный
Ребята, подскажите как реализовать интеграцию?
В общем, мы заключили договор с Купит в кредит, они нам выслали инструкцию https://www.kupivkredit.ru/join, но моих познаний не хватает чтобы ее реализовать.
Помогите чем смогите. Получается мне как то надо передать цену, и вообще это все реализовать пока не знаю как.
Код:
CREATE
Используется для создания заявки на стороне Банка. В конверте ответа возвращает ссылку на форму заявки.
URL вызова: https://tcb-qa.tcsbank.ru/api/partners/v1/payu/create
HTTP-метод: POST
Заголовки: 
Заголовок    Значение
Content-Type    application/json
Cache-Control    no-cache
X-Api-Key    kvk_store
X-Api-Signature    signature (см. алгоритм формирования подписи)

Конверт запроса:
{
"requestId":"123e4567-e89b-12d3-a456-426655440000",
"timestamp": 1469553689761883,
"sellerUserId":"tcs", /
"requestedAmount": {
        "value" : 5100.20 ,
        "currency": "RUB" },
"orderItems": [{
    "price": {
        "value" : 100.01 ,
        "currency": "RUB" },
    "category": "Courier Delivery",
    "quantity": 1,
    "title": "Доставка курьером на работу"
    },
    {
    "price": {
        "value" : 5000.19 ,
        "currency": "RUB" },
    "category": "Cats",
    "quantity": 1,
    "title": "Чеширский кот, 1 год"
    }],
"applicationFields":{
    "requestedTerm": 12
}
}

Алгоритм формирования подписи:
Подпись заказа генерируется по алгоритму SHA256withRSA на основании тела запроса.
В PHP можно воспользоваться встроенными функциями openssl_sign и openssl_verify. Публичный и приватный ключ вы найдете во вложении к письму.
protected function getSignature($data, $private_key, $public_key) {

    assert(is_string($data));
    assert(is_string($private_key));
    assert(is_string($public_key));

    openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256);

    if (openssl_verify( $data, $signature ,$public_key, "sha256WithRSAEncryption") == 1) {
        return bin2hex($signature);
    } else {
        return null;
    }
}

Конверт ответа:
{
"requestId":"123e4567-e89b-12d3-a456-426655440000",
"timestamp": 1469553689761884,
"url":"http://www.tinkoff.ru/online/574f02061400005800a47fa0",
"externalReferenceId":"574f02061400005800a47fa0"
}
Пример реализации на PHP (на примере Zend Http Client):
public function create($order)
{
    $private_key = file_get_contents($this->options['path']['private_key']);
    $public_key = file_get_contents($this->options['path']['public_key']);

    $order = array(
        'timestamp'  => time(),
        'requestId' => $order->number,
        "orderItems" => array(
            array(
                'price' => array(
                    'value' => $order->price,
                    'currency' => 'RUB'
                ),
                'category' => $order->product->category,
                'title' => $order->product->name,
            )
        ),
        "requestedAmount" => array(
            'value' => $order->price,
            'currency' => 'RUB'
        ),
        "applicationFields" => array(
            "requestedTerm" => 10
        ),
        "sellerUserId" => "tcs",
    );

    $data = json_encode($order);
    $signature = $this->getSignature($data, $private_key, $public_key);

    if (is_null($signature)) {
        return null;
    }

    $headers = array(
        'Content-Type' => 'application/json',
        'X-Api-Key' => 'kvk_store',
        'Cache-Control' => 'no-cache',
        'X-Api-Signature' => $signature,
    );

    $client = new HttpClient();
    $client->setMethod("POST");
    $client->setUri("https://tcb-qa.tcsbank.ru/api/partners/v1/payu/create");
    $client->setHeaders($headers);
    $client->setRawBody($data);
    $client->setAdapter("\Zend\Http\Client\Adapter\Curl");


    /** @var HttpResponse $response */
    $response = $client->send();
    //var_export($response->getBody());
    if ($response->isSuccess()) {
        return json_decode($response->getContent());
    }

    if ($response->isClientError() || $response->isServerError()) {
        return json_decode($response);
    }

    return null;
}
 

sergiocharm

Опытный
Еще есть тестовая интеграция
Код:
<?php

function create()
{
    //функция формирования подписи
    function getSignature($data, $private_key, $public_key) {

        assert(is_string($data));
        assert(is_string($private_key));
        assert(is_string($public_key));

        openssl_sign($data, $signature, $private_key, OPENSSL_ALGO_SHA256);

        if (openssl_verify( $data, $signature ,$public_key, "sha256WithRSAEncryption") == 1) {
            return bin2hex($signature);
        } else {
            return null;
        }
    }

    //берем данные для подписи из соседних файлов
    $private_key = file_get_contents('private_key.pem');
    $public_key = file_get_contents('public_key.pem');

    //формируем заказ
    $application = array(
        'timestamp'  => time(),
        'requestId' => time(),
        "orderItems" => array(
            array(
                'price' => array(
                    'value' => 7990,
                    'currency' => 'RUB'
                ),
                'category' => 'phones',
                'title' => 'apple iphone',
            )
        ),
        "requestedAmount" => array(
            'value' => 7990,
            'currency' => 'RUB'
        ),
        "applicationFields" => array(
            "requestedTerm" => 10
        ),
        "sellerUserId" => "a06m00000055hZOAAY",
    );

    //кодируем заказ в json формат и формируем подпись
    $data = json_encode($application);
    $signature = getSignature($data, $private_key, $public_key);

    if (is_null($signature)) {
        return null;
    }

    //отправляем POST запрос на сервер Тинькофф
    $ch = curl_init('https://tcb-qa.tcsbank.ru/api/partners/v1/kvk/create');
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'Content-Type: application/json',
        'X-Api-Key: kvk_store',
        'Cache-Control: no-cache',
        'X-Api-Signature: '.$signature,
    ));

    $response = curl_exec($ch); //получаем ответ от сервера в json формате

    if ($error = curl_error($ch)) {
      echo $error;
    }

    curl_close($ch);

    return $response;
}

$response = create();
$decoded_responce = json_decode($response, true); //декодируем ответ из json в массив
$url = $decoded_responce['url']; //достаем из массива нужный url
echo "<a href=".$url."><img src='https://www.kupivkredit.ru/images/insales/btn.png' alt='КупиВкредит'
          ></a>"; //переходим по этому url

?>
 

MuTPoFaN

Новичок
Для всех, для кого будет актуально! Реализовал данное решение отдельным плагином (ввели shopID, ключ, пользуетесь)! В 2017 технари банка апнули техническую реализацию по новым параметрам - то есть плагин актуальный! Пишите, обсудим стоимость!
 

vdeynes

Новичок
Для всех, для кого будет актуально! Реализовал данное решение отдельным плагином (ввели shopID, ключ, пользуетесь)! В 2017 технари банка апнули техническую реализацию по новым параметрам - то есть плагин актуальный! Пишите, обсудим стоимость!
Как с тобой связаться?
 

maxpostal

Новичок
Сверху Снизу