Bộ ghi cho các yêu cầu SOAP


8

chúng tôi muốn kết nối một đối tác thực hiện bên ngoài với Magento và muốn đăng nhập các yêu cầu API của họ.

Có bất kỳ trình ghi API miễn phí và mã nguồn mở nào không?


1
Tôi đã tìm thấy cái này nhưng không biết về trạng thái github.com/netz98/N98_ApiLogger
Alex

1
Tôi đang sử dụng mô-đun này bởi Marko-M của Inchoo để ghi nhật ký các cuộc gọi SOAP (v1 và v2 và wsi) github.com/Marko-M/Inchoo_SoapLogger
7ochem

Câu trả lời:


2

Tôi sẽ cắn vì tôi vừa mới làm điều này, tuy nhiên đó là một dịch vụ API REST, nhưng điều tương tự đối với yêu cầu SOAP là hoàn toàn có thể. Vì vậy, thay vì chi tiết, đặc biệt chỉ là tổng quan về quy trình tôi đã thực hiện:

1) TẠO MỘT MÔ HÌNH NGUỒN LỰC

Trước tiên, bạn sẽ muốn tạo một mô hình tài nguyên Magento mới, có rất nhiều ví dụ ngoài đó:

Dưới đây là một ví dụ về bảng tôi đang tạo trong quá trình cài đặt mô-đun của mình (rõ ràng điều chỉnh nó phù hợp với nhu cầu / yêu cầu của bạn).

CREATE TABLE IF NOT EXISTS mynamespace_mymodulename_logs (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `timestamp` datetime NOT NULL,
  `requestUrl` varchar(255) DEFAULT NULL,
  `method` varchar(10) DEFAULT NULL,
  `returnHttpCode` varchar(10) DEFAULT NULL,
  `returnError` TEXT NOT NULL,
  `requestXML` TEXT NOT NULL,
  `responseXML` TEXT NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8;

Lưu ý: Tôi cũng đã tranh luận về việc lưu trữ XML yêu cầu và phản hồi theo định dạng gzip để bảo tồn không gian db và XML nén tốt. Tuy nhiên, lưới adminhtml của Magento sẽ cần một trình kết xuất tùy chỉnh, vì vậy tôi vẫn giữ XML được lưu trữ như hiện tại.

2) QUẦN ÁO REST HIỆN TẠI YÊU CẦU VIA PHP

Tôi thường sử dụng một lớp duy nhất, ví dụ: Rest.php với một cái gì đó tương tự cho các cuộc gọi API nhanh và không đau thông qua CURL trong mô-đun của tôi. Tôi tin rằng các tùy chọn lib / Varien và Zendframework cũng có thể là điều cần xem xét, tuy nhiên tôi đã thành công lớn với đoạn trích nhỏ dễ đọc này:

<?php
$url = 'https://www.google.com';
$method = 'POST';

# headers and data (this is API dependent, some uses XML)
$headers = array(
    'Accept: application/json',
    'Content-Type: application/json',
);
$data = json_encode(array(
    'firstName'=> 'John',
    'lastName'=> 'Doe'
));

$handle = curl_init();
curl_setopt($handle, CURLOPT_URL, $url);
curl_setopt($handle, CURLOPT_HTTPHEADER, $headers);
curl_setopt($handle, CURLOPT_RETURNTRANSFER, true);
curl_setopt($handle, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($handle, CURLOPT_SSL_VERIFYPEER, false);

switch($method) {
    case 'GET':
        break;
    case 'POST':
        curl_setopt($handle, CURLOPT_POST, true);
        curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
        break;
    case 'PUT': 
        curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'PUT');
        curl_setopt($handle, CURLOPT_POSTFIELDS, $data);
        break;
    case 'DELETE':
        curl_setopt($handle, CURLOPT_CUSTOMREQUEST, 'DELETE');
        break;
}

$response = curl_exec($handle);
$code = curl_getinfo($handle, CURLINFO_HTTP_CODE);

Nguồn: http://singletonio.blogspot.com/2009/07/simple-php-rest-client-USE-curl.html

Tôi cũng sử dụng một thư viện riêng khác có tên Array2XML để xây dựng POSTcác yêu cầu của mình được sử dụng với đoạn yêu cầu REST đơn giản này.

 * @param type $method
 * @param type $data
 * @param type $url
 * @param type $header
 * @param type $topNode
 * @return boolean|xml
 */
public function RESTRequest($method, $url, $header, $data = array(), $topNode = array()) {

Dưới đây là ví dụ sử dụng của lớp Rest.php của tôi: (LƯU Ý : $restUrl, $apiKeyđược điều khiển từ cấu hình).

// Available Invetory Product
$requestUrl = $restUrl . "inventory/item/test/111/111";
$inventory = Mage::getModel('mynamespace/mymodulename')->RESTRequest('GET', '', $requestUrl, $apiKey);
//zend_debug::dump($inventory->inventory_item->quantity_on_hand);
header("Content-Type: text/xml");
echo $inventory->asXML();
exit;

3) THÊM ĐĂNG NHẬP VÀO YÊU CẦU / TRÁCH NHIỆM

Sau đó bọc mô hình tài nguyên mới tạo của bạn xung quanh Rest.phpcác lệnh gọi để thu thập dữ liệu trước và sau khi hoàn trả được thực hiện từ API của bên thứ 3.

Một cái gì đó như thế này trước đây curl_exec :

    if (Mage::helper('mymodulename')->getAPILoggingEnable()) {
        $logModel->setData('timestamp', time())
                ->setData('requestUrl', $url)
                ->setData('method', $method)
                ->setData('requestXML', @$postFields);
    }

...

sau khi các curl_exec:

    $xmlResponse = new SimpleXMLElement($response);

    if ($xmlResponse->error) {
        $logModel->setData('returnError', $xmlResponse->error->error_description);
    }

    if (Mage::helper('mymodulename')->getAPILoggingEnable()) {
        $logModel->setData('returnHttpCode', $code)
                ->setData('responseXML', $xmlResponse->asXML())
                ->save();
    }

Thay vì chỉ trả về đối tượng cURL, tôi sử dụng SimpleXMLEuity ($ reply) để chuyển đổi phản hồi API thành XML.

A try/ catchvới a $logModel->save();và a Mage::logException($e);trong Rest.php có thể giúp gỡ lỗi tốt hơn mọi vấn đề với tích hợp. Vì các ngoại lệ gây tử vong sẽ vẫn được đăng nhập một phần trong mô hình tài nguyên của bạn nhưng cũng xuất hiện trongvar/log/excpetions.log

4) QUẢNG CÁO HTML

Bây giờ chỉ cần tạo một lưới Magento adminhtml tùy chỉnh mới vào bảng của bạn chứa dữ liệu nhật ký.

Nhấp chuột vào lưới của tôi về các chi tiết đơn hàng đi vào chi tiết cho một yêu cầu với dữ liệu XML Phản hồi và Yêu cầu vì việc hiển thị lượng dữ liệu lớn này trên Lưới có thể gặp vấn đề.

GHI CHÚ

Luôn thêm tùy chọn Hệ thống -> Cấu hình để bật / tắt đăng nhập vì với một số lượng lớn yêu cầu đi qua giao tiếp API, bảng có thể trở nên khá nặng và hiệu quả. Tôi thường sẽ vô hiệu hóa đăng nhập sau khi tích hợp đã hoạt động đúng một lúc.

Lý tưởng nhất là bạn có thể tận dụng Mage_Log và chỉ cần thêm bảng tùy chỉnh của mình vào danh sách các bảng sẽ được cắt theo từng khoảng để giữ cho nó mỏng, tuy nhiên tôi không chắc chắn về quy trình thích hợp cho các trường ngày / giờ cụ thể có thể được yêu cầu.

Bạn cũng có thể xem xét sử dụng các thuộc tính tùy chỉnh để lưu trữ dữ liệu quan hệ của mình giữa Magento và API của bên thứ 3.

Hy vọng rằng điều này sẽ giúp theo hướng chung trong việc loại bỏ sự tích hợp của bên thứ 3. Vì không phải tất cả các yêu cầu đều giống nhau. Tuy nhiên, với cơ chế ghi nhật ký API tổng quát có thể có lợi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.