Grabo Partners API  »  Callback URL  »  Описание

Как да подготвите Вашия Callback URL

Как Grabo.bg изпраща известията

  • Известието е в JSON формат и се изпраща чрез POST към Вашия Callback URL.
  • Едно известие може да съдържа информация за множество събития.
  • Към всяко известие се изпраща чрез GET и допълнителен параметър за сигурност - signature, който съдържа HMAC SHA1 сигнатура на данните. Сигнатурата се генерира чрез passphrase key, който получавате от Grabo.bg при въвеждане на Вашия Callback URL в секцията API на Партньорския панел. Проверката от Ваша страна на тази сигнатура е изключително важна, за да гарантирате, че полученото известие действително е дошло от Grabo.bg.
  • HTTPS е задължителен, от съображения за сигурност на данните.
  • Примерно известие към Вашия Callback URL

    Примерен Callback URL:
    https://your-site.com/grabo_api/callback_url
    HTTPS заявката изглежда по следния начин:
    POST /grabo_api/callback_url?signature=7c508cf85671ba2e361e188396cddacc574bc3e8 Host: your-site.com Content-Type: application/json Content-Length: 57 {"company_id":"203412406","items":[...данните...]}

    Отговор на известието

    В отговор на известието, Вашият Callback URL задължитено трябва да върне съобщение "OK:...ЕИК...", с HTTP status code: 200 OK.

    Примерен отговор:
    OK:203412406

    Структура на данните

  • company_id: ЕИК на Вашата фирма. Препоръчваме да го проверявате за съвпадение, преди да обработите получеите данни.
  • items: Масив с данните. Всеки item в него има следната структура:
  • Параметър Тип Стойност
    action string Тип на събитието - new за нов издаден ваучер, refunded за анулиран ваучер.
    action_timestamp integer Дата на събитието в unix timestamp. При нов издаден ваучер: дата на издаването му; При анулиран ваучер: дата на анулирането.
    code integer Номер на ваучера - число с дължина от 6 до 9 цифри.
    user_name string Име на потребителя-купувач.
    deal_id string Идентификатор на закупената оферта.
    title string Заглавие на закупената услуга или стока.
    amount_prepaid float Размер на сумата, предплатена от потребителя-купувач към Grabo.bg.
    amount_prepaid_method string Описане на начина на плащане (например: Онлайн плащане с карта, Плащане по банков път, Плащане в брой на каса на Изипей....).
    amount_to_surcharge float Сума, която потребителят-купувач следва да заплати на търговеца извън вече предплатената сума. В повечето случаи стойността на този параметър е 0.
    currency string BGN
    company_name string Брандът, от чието име е била публикувана закупената оферта.
    Примерна заявка:
    { "company_id": "203412406", "items": [ { "action": "new", "action_timestamp": 1779869646, "code": 12345678, "user_name": "Иван Иванов", "deal_id": "0ntv5m", "title": "Две пици Капричоза (доматен сос, шунка, гъби, пипер, моцарела), 500гр", "amount_prepaid": 9.9, "amount_prepaid_method": "Онлайн плащане с карта", "amount_to_surcharge": 0, "currency": "BGN", "company_name": "Пицария \"При нас е вкусно\"" } ] }
    Отговор от Ваша страна:
    OK:203412406

    Примерен PHP код

    <?php
        
        $my_firm_eik 
    '203412406';
        
    $passphrase 'drQ5JhNtcjwY';
        
        
    // Връщаме резултат, че сме приели заявката:
        
    echo 'OK:' $my_firm_eik;
        
        
    // Прочитаме подадените параметри:
        
    $input file_get_contents('php://input');
        
    $signature = isset($_GET['signature']) ? $_GET['signature'] : '';
        
        
    // Валидираме заявката:
        
    if( !$input || !$signature ) {
            exit; 
    // Некоректни входни данни
        
    }
        if( 
    $signature !== hash_hmac('sha1'$input$passphrasefalse) ) {
            exit; 
    // Невалидна сигнатура
        
    }
        
        
    $data json_decode($input);
        
        
    // Валидираме данните:
        
    if( !$data || !isset($data->company_id$data->items) ) {
            exit; 
    // Некоректни входни данни
        
    }
        if( 
    $data->company_id != $my_firm_eik ) {
            exit; 
    // Несъответствие в ЕИК на фирмата
        
    }
        
        
    // Всичко е наред, можем да запишем изпратените данни:
        
    foreach($data->items as $item) {
            
    // ...
            // $action = $item->action;
            // ...
        
    }