За последние 24 часа нас посетили 15955 программистов и 1573 робота. Сейчас ищут 667 программистов ...

Помогите пожалуйста с WP API Frontpad

Тема в разделе "Сделайте за меня", создана пользователем Samurai05, 9 авг 2021.

  1. Samurai05

    Samurai05 Новичок

    С нами с:
    9 авг 2021
    Сообщения:
    1
    Симпатии:
    0
    Всем привет
    Уже какой день пытаюсь выполнить интеграцию, но плохо получается
    Один раз отправил заказ в Frontpad, а потом всё, заглох
    Не понимаю в чём проблема

    PHP:
    1. <?php
    2.  
    3. /*
    4. * Send order data to Frontpad
    5. * Отправка данных заказа во Frontpad
    6. */
    7.  
    8.  
    9.  
    10. require(dirname(__FILE__) . '/wp-load.php');
    11.  
    12. add_action('woocommerce_thankyou', 'send_order_to_frontpad');
    13.  
    14. function send_order_to_frontpad($order_id)
    15. {
    16.     $order         = wc_get_order($order_id);
    17.     $api_password  = '000';
    18.     $email         = $order->billing_email;
    19.     $phone         = $order->billing_phone;
    20.     $shipping_type = $order->get_shipping_method();
    21.     if ($order->get_payment_method_title() == 'Оплата при получении') {
    22.         $shipping_type = '';
    23.     } else {
    24.         $shipping_type = 947;
    25.     }
    26.     $shipping_cost = $order->get_total_shipping();
    27.  
    28.     // get product details
    29.     // получение данных товара
    30.  
    31.     $items      = $order->get_items();
    32.     $item_name  = array();
    33.     $item_qty   = array();
    34.     $item_price = array();
    35.     $item_sku   = array();
    36.  
    37.     // set the address fields
    38.     // установка полей адреса
    39.  
    40.     $user_id        = $order->user_id;
    41.     $address_fields = array(
    42.         'country',
    43.         'title',
    44.         'given_name',
    45.         'surname',
    46.         'street',
    47.         'house',
    48.         'pod',
    49.         'et',
    50.         'apart',
    51.     );
    52.  
    53.     $order_details = array();
    54.     foreach ($order->get_meta_data() as $item) {
    55.         $order_details[$item->jsonSerialize()['key']] = $item->jsonSerialize()['value'];
    56.     }
    57.     $address = array();
    58.     if (is_array($address_fields)) {
    59.         foreach ($address_fields as $field) {
    60.             $address['billing_' . $field]  = get_user_meta($user_id, 'billing_' . $field, true);
    61.             $address['shipping_' . $field] = get_user_meta($user_id, 'shipping_' . $field, true);
    62.             $address['billing_' . $field]  = $order_details['_billing_' . $field];
    63.             $address['shipping_' . $field] = $order_details['_shipping_' . $field];
    64.         }
    65.     }
    66.     $address['pre_order'] = get_post_meta($order_id, 'pre_order', true);
    67.  
    68.     foreach ($items as $item_id => $item) {
    69.  
    70.         $item_name[]          = $item['name'];
    71.         $item_qty[]           = $item['qty'];
    72.         $item_price[]         = $item['line_total'];
    73.         $item_id              = $item['product_id'];
    74.         $product              = new WC_Product($item['product_id']);
    75.         $product_variation_id = $item['variation_id'];
    76.         $product              = $order->get_product_from_item($item);
    77.         // Get SKU
    78.         // Получение артикула
    79.         $item_sku[] = $product->get_sku();
    80.     }
    81.  
    82.  
    83.     // setup the data which has to be sent
    84.     // сбор данных для отправки
    85.     $data = array(
    86.         'secret'   => $api_password,
    87.         'street'   => $address['billing_street'],
    88.         'home'     => $address['billing_house'],
    89.         'pod'      => $address['billing_pod'],
    90.         'et'       => $address['billing_et'],
    91.         'apart'    => $address['billing_apart'],
    92.         'phone'    => $phone,
    93.         'mail'     => $email,
    94.         'descr'    => $order->get_customer_note(),
    95.         'name'     => $address['billing_given_name'] . ' ' . $address['billing_surname'],
    96.         'pay'      => $shipping_type,
    97.         'datetime' => date('Y-m-d G:i:s', $order->get_date_created()->getOffsetTimestamp()),
    98.     );
    99.     //get data from shipping address if is not empty
    100.     // если указан адрес доставки, берем данные оттуда, если нет, то из платежного адреса
    101.     if ($address['shipping_street'] != "") {
    102.         $data['street'] = $address['shipping_street'];
    103.     }
    104.     if ($address['shipping_house'] != "") {
    105.         $data['home'] = $address['shipping_house'];
    106.     }
    107.     if ($address['shipping_pod'] != "") {
    108.         $data['pod'] = $address['shipping_pod'];
    109.     }
    110.     if ($address['shipping_et'] != "") {
    111.         $data['et'] = $address['shipping_et'];
    112.     }
    113.     if ($address['shipping_apart'] != "") {
    114.         $data['apart'] = $address['shipping_apart'];
    115.     }
    116.     if (($address['shipping_given_name'] != "") && ($address['shipping_surname'] != "")) {
    117.         $data['name'] = $address['shipping_given_name'] . ' ' . $address['shipping_surname'];
    118.     }
    119.     if ($address['pre_order'] != '') {
    120.         $data['datetime'] = date('Y-m-d G:i:s', strtotime($address['pre_order']));
    121.     }
    122.     foreach ($order->get_items('shipping') as $item_id => $shipping_item_obj) {
    123.         $data['descr'] = $data['descr'] . ' Доставка: ' . $shipping_item_obj->get_method_title();
    124.     }
    125.  
    126.     $query = '';
    127.     // request preparation
    128.     // подготовка запроса
    129.     foreach ($data as $key => $value) {
    130.         $query .= "&" . $key . "=" . $value;
    131.     }
    132.  
    133.     // order contents
    134.     // содержимое заказа
    135.     foreach ($item_sku as $key => $value) {
    136.         $query .= "&product[" . $key . "]=" . $value . "";
    137.         $query .= "&product_kol[" . $key . "]=" . $item_qty[$key] . "";
    138.     }
    139.  
    140.     // send API request via cURL
    141.     // отправка запроса API через cURL
    142.     $ch = curl_init();
    143.  
    144.     curl_setopt($ch, CURLOPT_URL, "https://app.frontpad.ru/api/index.php?new_order");
    145.     curl_setopt($ch, CURLOPT_FAILONERROR, 1);
    146.     curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    147.     curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    148.     curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    149.     curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    150.     curl_setopt($ch, CURLOPT_POST, 1);
    151.     curl_setopt($ch, CURLOPT_HEADER, false);
    152.     curl_setopt($ch, CURLOPT_POSTFIELDS, $query);
    153.  
    154.     $response = curl_exec($ch);
    155.  
    156.     curl_close($ch);
    157.  
    158.     $response = json_decode($response, true);
    159.  
    160.     if ($response['result'] == 'success') {
    161.         update_post_meta($order_id, 'Frontpad Order ID', sanitize_text_field($response['order_id']));
    162.         update_post_meta($order_id, 'Frontpad Order Number', sanitize_text_field($response['order_number']));
    163.         // sending SMS to restaurant administrator
    164.         // отправка запроса администратору ресторана
    165.         $message = 'Новый онлайн-заказ №' . $response['order_number'] . '. Проверьте FrontPad. ';
    166.         $message = urlencode($message);
    167.         // $curl    = curl_init();
    168.         // curl_setopt($curl, CURLOPT_URL, "https://sms.ru/sms/send?api_id=A9E14A13-D771-2D94-0E03-827654F39624&to=79923050626&msg=$message&json=1");
    169.         // curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
    170.         // $out = curl_exec($curl); // delivery data of SMS (данные до доставке SMS)
    171.         // curl_close($curl);
    172.     } else {
    173.         switch ($response['error']) {
    174.             case 'cash_close':
    175.                 echo 'Cмена закрыта';
    176.                 echo "<script>jQuery(document).ready(function ($) {
    177.    var popup_id = 948;
    178.    MasterPopups.open(popup_id);
    179.    //Or using a jQuery selector
    180.    $('.mpp-popup-' + popup_id).MasterPopups();
    181. });
    182. </script>";
    183.                 $order->update_status('failed');
    184.                 break;
    185.             case 'invalid_product_keys':
    186.                 echo 'Неверный массив товаров';
    187.                 $order->update_status('failed');
    188.                 break;
    189.         }
    190.     }
    191. }
    192.  
    193. /*
    194. * If order has been cancelled or failed, e-mails will be not sent
    195. * Если заказ отменен или не удался, не отправлять сообщения на e-mail
    196. */
    197.  
    198. add_action('woocommerce_order_status_changed', 'custom_send_email_notifications', 10, 4);
    199. function custom_send_email_notifications($order_id, $old_status, $new_status, $order)
    200. {
    201.     if ($new_status == 'cancelled' || $new_status == 'failed') {
    202.         $wc_emails      = WC()->mailer()->get_emails(); // Get all WC_emails objects instances
    203.         $customer_email = $order->get_billing_email(); // The customer email
    204.     }
    205.  
    206.     if ($new_status == 'cancelled') {
    207.         // change the recipient of this instance
    208.         $wc_emails['WC_Email_Cancelled_Order']->recipient = $customer_email;
    209.         // Sending the email from this instance
    210.         $wc_emails['WC_Email_Cancelled_Order']->trigger($order_id);
    211.     } elseif ($new_status == 'failed') {
    212.         // change the recipient of this instance
    213.         $wc_emails['WC_Email_failed_Order']->recipient = $customer_email;
    214.         // Sending the email from this instance
    215.         $wc_emails['WC_Email_failed_Order']->trigger($order_id);
    216.     }
    217. }
     
  2. don.bidon

    don.bidon Активный пользователь

    С нами с:
    28 мар 2021
    Сообщения:
    914
    Симпатии:
    143
    Вам во фриланс с указанием бюджета.