API Документация

Използвайте нашето API директно без значение от платформата, на която е магазинът ви.

Въведение

Адресът на нашето API е https://api.buyercheck.bg

Всички заявки към API-то трябва да съдържат header x-buyercheck-key със стойността на API ключа. POST заявките трябва да съдържат и api_user поле в body-то със стойността на имейла на вашия потребител в buyercheck.bg

1. Регистрация и API ключ

За да получите API ключ, посетете страницата с планове и закупете подходящ план, въвеждайки домейна на вашия сайт. След като заплатите поръчката, ще получите API ключ на посочения email.

2. Подготовка на вашия магазин

Преди да започнете с всичко останало, вашият магазин трябва да има webhook адрес (не използвайте buyercheck в името), защитен с парола (secret), където BuyerCheck ще изпраща данни за поръчките - след като ги обработим.

2.1. Задължително трябва да създадете механизъм, който да валидира данните, които получавате на този адрес.

  • Проверка на цялостта на получените данни (signature), посредством създадения Webhook Secret (парола), който е споделен между вашия сървър и нашия.
  • Проверка на валидността на получените данни (payload)

Примерна проверка на signature за PHP може да видите долу:



                                    function validateWebhook($request) {
                                        $headers = $request->get_headers();

                                        // Verify timestamp
                                        $timestamp = isset($headers['x-buyercheck-timestamp'][0]) ? $headers['x-buyercheck-timestamp'][0] : null;
                                        if (!$timestamp || abs(time() - $timestamp) > 300) { // 5 minute window
                                            return false;
                                        }

                                        // Verify signature
                                        $params = $request->get_params();
                                        $received_signature = isset($headers['x-buyercheck-signature'][0]) ? $headers['x-buyercheck-signature'][0] : null;
                                        $expected_signature = hash_hmac('sha256', $timestamp . json_encode($params), self::$webhook_secret);
                                        if (!$received_signature || !hash_equals($expected_signature, $received_signature)) {
                                            return false;
                                        }

                                        return true;
                                    }
                                    

2.2. След валидиране на signature и payload, трябва да създадете механизъм, по който да маркирате поръчките, които получавате на webhook-а по начин, по който след това може да филтрирате, за да не ни изпращате поръчки, които вече сме обработили. Може да използвате buyercheck-finalized таг или мета свойство, в зависимост от структурата на базата данни на вашия магазин когато поръчката е със статус "successful" или "canceled".

Примерна заявка на webhook-а, изпратена от нас изглежда така:


                                        {
                                            "orders": [
                                                {
                                                    "order_id": "1234567890",
                                                    "email": "test@example.com",
                                                    "phone": "0887654321",
                                                    "ip_address": "127.0.0.1",
                                                    "order_status": "pending",
                                                    "amount": 100,
                                                    "pending_amount": 100,
                                                    "created_at": "2025-10-11T00:00:00Z",
                                                    "risk_score": 12,
                                                    "recommended_action": "Cancel",
                                                    "risk_details_external": "High risk due to...",
                                                    "calculated_at": "2025-10-11T00:00:01Z"
                                                }
                                            ]
                                        }
                                    

3. Настройте основните данни за вашия магазин (/onboard-store)

Първото задължително поле, което трябва да зададете е category, но за да видите възможните стойности, трябва да изпратите заявка GET https://api.buyercheck.bg/onboard-store

След това, задайте и останалите данни за вашия магазин:



                                        $data = array(
                                            'api_user' => 'buyercheck_user_email',
                                            'domain' => 'domain.com',
                                            'category' => 'electronics',
                                            'webhook_secret' => 'generate_secure_webhook_secret_here',
                                            'webhook_url' => 'https://domain.com/randomstring/v1/webhook/',
                                            'raw_data_consent' => true,
                                            'excluded_test_emails' => array('test@example.com', 'test2@example.com'),
                                            'excluded_test_phones' => array('+359888888888', '0887654321')
                                        );

                                        // Send data to Buyercheck API
                                        $response = wp_remote_post('https://api.buyercheck.bg/onboard-store', array(
                                            'headers' => array(
                                                'x-buyercheck-key' => 'buyercheck_api_key'
                                            ),
                                            'body' => $data
                                        ));
                                        

Обърнете внимание, че сме настроили магазина с excluded_test_emails и excluded_test_phones - така ще изключим имейли и телефони (с които сте тествали или тествате) от синхронизирането на поръчките - както за стари така и за бъдещи поръчки.

3. Синхронизиране на поръчките (/submit-order-data)

Трябва да изградите модул, който ще синхронизира поръчките от вашия магазин към нашите сървъри. Този модул трябва да започне със събиране на всички поръчки, изключвайки маркираните от webhook-а с buyercheck-finalized(виж. т.2.2) от най-старите към най-новите и да ги изпраща към нас, по следния начин и по 20 поръчки на заявка.


                                    ...
                                    $orders = getOrdersExcludingBuyercheckFinalized();

                                    // remap orders to buyercheck format
                                    function remapOrder($order) {

                                        $email = $order->customer_email;
                                        $phone = $order->customer_phone;

                                        // if raw_data_consent is false, hash email, phone and ip address
                                        if (!$raw_data_consent) {
                                            $email = hash('sha256', $email);
                                            $phone = hash('sha256', $phone);
                                        }

                                        return [
                                            'order_id' => $order->id,
                                            'email' => $email, // hash email
                                            'phone' => $phone, // hash phone
                                            'ip_hash' => hash('sha256', $order->ip_address), // hash ip
                                            'order_status' => $order->status, // order status (pending, completed, failed). Order status 'pending' means about to be sent or already sent to customer; not cancelled; not delivered.
                                            'amount' => $order->total_amount, // total amount
                                            'pending_amount' => $order->pending_amount, // pending amount - if status is pending , otherwise 0
                                            'created_at' => $order->created_at // UTC timestamp
                                        ];
                                    }

                                    $remappedOrders = array_map('remapOrder', $orders);

                                    // batch orders in pairs of 20
                                    $batchedOrders = array_chunk($remappedOrders, 20);
                                    
                                    foreach ($batchedOrders as $batch) {
                                        
                                        // POST request to buyercheck api
                                        $response = wp_remote_post('https://api.buyercheck.bg/submit-order-data', array(
                                            'headers' => array(
                                                'x-buyercheck-key' => 'buyercheck_api_key'
                                            ),
                                            'body' => [
                                                'store_id' => 'domain.com',
                                                'api_user' => 'buyercheck_user_email',
                                                'orders' => $batch
                                            ]
                                        ));
                                    }
                                    

Обърнете внимание, че ако сме настроили магазина с raw_data_consent = false, трябва да хешираме със SHA-256 функция email, телефон и ip адрес - ако не го направите, ще получите грешка 400. Единствено изключение е ip_address, което винаги се подава хеширано.

Също обърнете внимание и на статусите - pending е всяка поръчка, която предстои да обработите или сте обработили и изпратили, но все още не е взета или върната.

След като създадете механизма за синхронизиране на поръчките, настройте CRON JOB, който да го изпълянява 3 пъти дневно - през 8 часа или поне веднъж на 12 часа. Също може да използвате и Event-базирани механизми за синхронизиране на поръчките, ако сте на платформа, която ги поддържа.

4. Проверка на поръчка в реално време (/check-risk)

По време на финализиране на поръчката на клиент, след като е задал поне имейла си, можете да използвате API за проверка на риска на поръчката.


                                        // POST request to buyercheck api
                                        $response = wp_remote_post('https://api.buyercheck.bg/check-risk', array(
                                            'headers' => array(
                                                'x-buyercheck-key' => 'buyercheck_api_key'
                                            ),
                                            'body' => [
                                                'store_id' => 'domain.com',
                                                'api_user' => 'buyercheck_user_email',
                                                'email_hash' => hash('sha256', $order->customer_email), // hash email
                                                'phone_hash' => hash('sha256', $order->customer_phone), // hash phone
                                                'ip_hash' => hash('sha256', $order->ip_address), // hash ip
                                                'amount' => $order->total_amount // total amount
                                            ]
                                        ));
                                    

Ще получите отговор в JSON формат:


                                    {
                                        "risk_score": 15, // 0-100
                                        "recommended_action": "Cancel", // Process, Verify, Cancel
                                        "risk_details": "Explanation of the risks in readable format"
                                    }
                                    

Съветваме ви да запазите отговора в текущия чекаут обект на клиента за тази поръчка и да не изпращате нова заявка към API-то на BuyerCheck за същата поръчка, за да не изхабявате квотата ви от проверки към плана ви.