Cách gọi sử dụng RESTful API Caresoft trong wordpress chi tiết

Thảo luận trong 'Mã nguồn mở Wordpress' bắt đầu bởi admin, 18/1/21.

  1. admin

    admin Phạm Công Sơn Thành viên BQT

    Tham gia ngày:
    22/5/13
    Bài viết:
    4,567
    Đã được thích:
    1,111
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Bài viết về Cách gọi sử dụng RESTful API Caresoft trong wordpress chi tiết cách cài đặt vào trong wordpress để truyền dữ liệu vào API của bên phần mềm Caresoft bằng Comment, Contact Form 7, Font liên hệ đặt hàng,... tất tần tật chỉ cần xem ví dụ và cách làm có thể làm được tất cả nhé.

    Ví dụ dưới đây mình hướng dẫn lấy dữ liệu từ Contact Form 7. Thông tin đặt hàng của khách hàng, truyền tới API của phần mềm Caresoft. Lấy ở dữ liệu của bất kỳ form nhập liệu nào tương tự.

    contact-form-7.jpg

    Bước 1: Đầu tiên các bạn phải đọc tài liệu của bên cung cấp dịch vụ API trước link ở dưới:
    Bước 2: Mình sử dụng thư viện RestClient để gọi API nên các bạn tải thư viện ở 2 trong 2 link dưới về.
    Chọn 1 trong 2 cách sau để gọi API thực hiện xử lý nhé.

    Cách 1: Thông qua hook của Contact Form 7

    Cách này sẽ gọi thông qua hành động submit thành công, của khách hàng khi hoàn thành đơn, liên hệ xong. Sử dụng hook wpcf7_before_send_mail để xử lý.

    Bước 3: Mỗi khi khách hàng submit thành công, Contact Form 7 sẽ thực hiện hành động gửi email đi, nên chúng ta chỉ cần bắt sự kiện của hook này truyền vào API là xong.
    PHP:
    add_action("wpcf7_before_send_mail""wpcf7_do_something_else_itseovn");
    function 
    wpcf7_do_something_else_itseovn($cf7) {
        
    // get the contact form object
        
    $wpcf WPCF7_ContactForm::get_current();
        if (
    $wpcf->id == 1944) { //id của form liên hệ
            
    try{
                
    $api = new RestClient([
                    
    'base_url' => "https://api.caresoft.vn/apiitseovn.com/api/v1/",
                    
    'headers' => ['Authorization' => 'Bearer 111111111ELrPw''Content-Type' => 'application/json']
                ]);
                
    //Truyền tham số
                
    $cus_name $_POST['your-name'];
                
    $cus_email = isset($_POST['your-email']) ? $_POST['your-email'] : '';
                
    $cus_phone $_POST['tel-phone'];
                
    $cus_number $_POST['numberpd'];
                
    $cus_address $_POST['your-address'];
                
    $cus_comment 'Tên: '.$cus_name.'. Số lượng: '.$cus_number.'. Địa chỉ: '.$cus_address.'. Email: '.$cus_email.'. SĐT: '.$cus_phone;
      
                
    $tickets = array('ticket' => array(
                        
    'ticket_subject' => 'Tiêu đề của phiếu ghi gủi cho API',
                        
    'ticket_comment' =>  $cus_comment,
                        
    'ticket_source' => 'Web',
                        
    //'assignee_id' => 6878985, //ID của chuyên viên chăm sóc cần add
                        
    'group_id' => 6792// nhóm của pm
                        
    'email' =>  $cus_email,
                        
    'phone' =>  $cus_phone,
                        
    'username' =>  $cus_name
                    
    ));

                
    //Gửi ticket lên service
                
    try
                {
                    
    $result $api->post("tickets",$tickets);

                    if(
    $result->info->http_code == 200){
                        
    //Service trả về dạng chuỗi json
                        
    SaveFile('ok - '.$result->info->http_code);
                       
    // json_encode($result->decode_response());
                    
    }
                    else
                    {
                        
    SaveFile('Error 2 - '.$result->info->http_code);
                      
    // json_encode($result->decode_response());
                    
    }
                }
                catch(
    Exception $ex)
                {
                    
    SaveFile('Error 3 - '.$ex->getMessage());
                }
            }
            catch(
    Exception $ex)
            {
                
    SaveFile('Error 1 - '.$ex->getMessage());
            }
        }
    /*
        else if ($wpcf->id == 1944) { 
              //id của form liên hệ
               //xử lý tiếp nếu có Form khác
        }*/
        
    return $wpcf;
    }
    //lưu lại log xử lý trên web
    function SaveFile($CodeName)
    {
        
    $myFile str_replace(get_home_url().'/'''get_stylesheet_directory_uri())."/js/logapi/logapi.txt";
        
    $filenew 1;
        if(!
    file_exists($myFile))
        {
            
    $filenew 0;
            
    $myfile fopen($myFile,'w');
        }
        
    //$myFile = "test.txt";
        
    $fh fopen($myFile'a');
        if(
    $filenew == 0)
        {
            
    fwrite($fhdate("Y/m/d h:i:sa").': '.$CodeName);
        }
        else
        {
            
    fwrite($fh"\n".date("Y/m/d h:i:sa").': '.$CodeName);
        }
        
    fclose($fh);
    }
    require(
    'includes/restclient.php'); //include thư viện gọi api
    Như vậy là xong rồi, bạn cấu hình lại:
    • 111111111ELrPw: là key API của bên cung cấp.
    • $wpcf->id == 1944 thay 1944 thành id của Form liên hệ.
    • Và các trường khác tại $_POST bạn xem hình dưới nhé, để thay đổi thêm bớt tùy thuộc vào Form của bạn có bao nhiêu trường dữ liệu.
    API-caresoft.jpg

    Cách 2: Thông qua sự kiện Javascript Submit Form on Click.

    Cách này sẽ gọi thông qua hành động submit Form on Click, sự kiện click của khách hàng vào form liên hệ, đặt hàng sẽ gọi javascript thực thi gọi hook api, cách này áp dụng được cho mọi form bất kỳ, không nhất thiết nó là của Contact Form 7.

    Bước 3: (tiếp tục của bước 2 bên trên) Tạo file itseovnajax.js để lắng nghe thao tác từ người dùng để gọi Ajax xử lý API. Và copy nội dung sau bỏ vào:
    HTML:
    (function ($) {
        $(document).ready(function () {
           //Box đặt hàng tìm tới mở cái error xem có bị lỗi gì phát sinh không?
           //đặt hàng
           // wpcf7-id-ctf7 : id của form nhập liệu của Contact Form 7, wpcf7-submit: là nút đặt mua ngay, submit ok, đồng ý
          //Lăng nghe sự kiện submit/click của người dùng, lấy thông tin người dùng nhập gửi vào Ajax truyền tới hàm PHP xử lý API
            $('[id*="wpcf7-id-ctf7"] .wpcf7-submit').on('click', function () {
                var name = $("input[name=your-name]").val();
                var email = $("input[name=your-email]").val();
                var phone = $("input[name=your-phone]").val();
                var comment = "Số lượng: ";
                comment = comment + $("input[name=your-number]").val() + " ";
                comment = comment + "Địa chỉ: " + $("input[name=your-address]").val();
                jQuery.post(
                    ajax_obj.ajax_url,
                    {
                        'action': 'PUT_ORDER_Call_Center',
                        'email' : email,
                        'phone' : phone,
                        'name' : name,
                        'comment' : comment,
                        nonce : ajax_obj.smart_nonce
                    },
                    function (response) {
                        var data = jQuery.parseJSON(response);
                        if(data.code == "ok"){
                            alert("Yêu cầu đặt hàng của bạn đã gửi thành công.");
                            $('[id*=wpcf7-id-ctf7"] .wpcf7-form')[0].reset();
                        }
                    }
                );
            });
        });
    }) (jQuery);
    
    Bước 4: Truy cập vào Function.php của themes chèn code sau xử lý lệnh PHP gọi API truyền dữ liệu tới API
    PHP:
    //API: gọi javascrip nhận file javascript thực hiện chờ đợi dữ liệu từ người dùng truyền vào file

    add_action('after_setup_theme''itseovn_theme_setup');

    if ( ! 
    function_exists'itseovn_theme_setup' ) ){
        function 
    itseovn_theme_setup(){
            
    add_action'wp_enqueue_scripts''itseovn_ajax_script');
        }
    }
    function 
    itseovn_ajax_script() {
        
    wp_enqueue_script('itseovn_ajax'get_template_directory_uri() . '/js/itseovnajax.js', array(), '1.0.0'true );
        
    wp_localize_script'itseovn_ajax''ajax_obj',
            array( 
    'ajax_url' => admin_url'admin-ajax.php' ), 'smart_nonce' => wp_create_nonce'itseovnajax-nonce' )  ) );
    }

    ///API: Nhận lệnh truyền về từ file /js/itseovnajax.js trả về
    /// wp_ajax_ và wp_ajax_nopriv_ khai báo gọi ajax của wordpress
    add_action('wp_ajax_PUT_ORDER_Call_Center''PUT_ORDER_Call_Center');
    add_action('wp_ajax_nopriv_PUT_ORDER_Call_Center''PUT_ORDER_Call_Center');

    function 
    PUT_ORDER_Call_Center(){
        
    //kiển tra xem
        
    $nonce $_POST['nonce'];
        if ( ! 
    wp_verify_nonce$nonce'itseovnajax-nonce' ) ){
            echo 
    '{ "code" : "errors"}';
            die ();
        }
        
    //Thông tin api từ bên nha cung cấp cho bạn
        //apiitseovn.com: là tên user đăng nhập tại CARESOFT, mục Amin -> Dịch Vụ -> API để tạo mới (hoặc xem hình dưới)
        
    try{
            
    $api = new RestClient([
                
    'base_url' => "https://api.caresoft.vn/apiitseovn.com/api/v1/",
                
    'headers' => ['Authorization' => 'Bearer 1111111IELrPw''Content-Type' => 'application/json']
            ]);
        }
        catch(
    Exception $ex)
        {
            echo 
    '{ "code" : "'$ex->getMessage() .'"}';
            die ();
        }
     
        
    //Xem tài liệu CARESOFT tại đây: https://drive.google.com/file/d/1qypYqFtdT7uFodM_R64hbU98U4ztnJIC/view
        //Lấy các tham số từ Ajax truyền về, gán vào các biến truyền đi tới API
        
    $cus_name $_POST['name'];
        
    $cus_email = isset($_POST['email']) ? $_POST['email'] : '';
        
    $cus_phone $_POST['phone'];
        
    $cus_comment $_POST['comment'];

        
    //Truyền dữ liệu vào các biến của API (tùy vào nhà cung cấp API mà có các biến khác nhau, đọc tài liệu nhà cung cấp đưa để biết rõ)
     
        
    $tickets = array('ticket' => array(
                
    'ticket_subject' => 'Tiêu đề của phiếu ghi gủi cho API',
                
    'ticket_comment' =>  $cus_comment,
                
    'ticket_source' => 'Web',
                
    //'assignee_id' => 1234, //ID của USER
                
    'group_id' => 6792//Nhóm, đổi thành nhóm của bạn
                
    'email' =>  $cus_email,
                
    'phone' =>  $cus_phone,
                
    'username' =>  $cus_name
            
    ));

        
    //Gửi ticket lên service
        
    try
        {
            
    $result $api->post("tickets",$tickets); //truyền dạng tickets, còn dạng khác giống vậy, đọc tài liệu bên nhà cung cấp dịch vụ API để biết thêm
            //Kiểm tra kết quả trả về từ API
            
    if($result->info->http_code == 200){
                
    //Service trả về dạng chuỗi json
                
    echo json_encode($result->decode_response());
            }
            else
            {
                echo 
    json_encode($result->decode_response());
            }
        }
        catch(
    Exception $ex)
        {
            echo 
    '{ "code" : "'$ex->getMessage() .'"}';
        }
        die ();
    }

    require(
    'includes/restclient.php'); //include thư viện gọi api của restclient
    api-cua-caresoft.jpg

    Như vậy là xong rồi, giờ hãy test dữ liệu xem đã vào chưa nhé.

    Để lấy đơn hàng woocommerce thì xem bài sau: https://itseovn.com/threads/cach-go...ft-lay-don-hang-woocommerce-wordpress.322440/
     
    Cảm ơn đã xem bài:

    Cách gọi sử dụng RESTful API Caresoft trong wordpress chi tiết

    Chỉnh sửa cuối: 5/9/21
  2. admin

    admin Phạm Công Sơn Thành viên BQT

    Tham gia ngày:
    22/5/13
    Bài viết:
    4,567
    Đã được thích:
    1,111
    Điểm thành tích:
    113
    Giới tính:
    Nam
    Cách 3: sử dụng phần mềm Postman để test và tải code về add vào web ở bước 4 bên trên, áp dụng cho mọi ngôn ngữ mà các developer chuyên nghiệp thường sử dụng.

    Tải phần mềm về tại đây: https://www.postman.com/downloads/

    api-cua-caresoft-tren-postman.jpg

    Code test phần mềm Caresoftcho trường tickets.
    HTML:
    {
     "ticket": {
     "ticket_subject": "Test API caresoft",
     "ticket_comment": "Khách hàng liên hệ tại nacugol... nội dung",
     "email": "phamcongson2003@gmail.com",
     "phone": "0973002201",
     "service_id": "95035783",
     "group_id": 6792,
     "username": "Sơn test API",
     "ticket_priority": "urgent"
     }
    }
    
    api-cua-caresoft-tren-postman-send-thanh-cong.jpg

    api-cua-caresoft-tren-postman-add-to-wordpress.jpg
     
    Chỉnh sửa cuối: 5/9/21
  3. huyitnv

    huyitnv Thành Viên Mới

    Tham gia ngày:
    16/3/22
    Bài viết:
    1
    Đã được thích:
    0
    Điểm thành tích:
    1
    Giới tính:
    Nam
    Chào Anh.
    ---
    Em đã làm như hướng dẫn trên mà không biết lỗi đâu mà không gửi đi thành công.
    Anh có thể hổ trợ giúp e với ạ.
    0938939202
     


Like và Share ủng hộ ITSEOVN