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 таг или мета свойство, в зависимост от структурата на базата данни на вашия магазин.

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/'
                                        );

                                        // 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
                                        ));
                                        

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

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


                                    ...
                                    $orders = getOrdersExcludingBuyercheckFinalized();

                                    // remap orders to buyercheck format
                                    function remapOrder($order) {
                                        return [
                                            'order_id' => $order->id,
                                            '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
                                            '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
                                            ]
                                        ));
                                    }
                                    

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

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

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

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 за същата поръчка, за да не изхабявате квотата ви от проверки към плана ви.