2014-04-15 9 views
20

Tôi đang sử dụng mô-đun xà phòng nodejs để gọi dịch vụ fedex nhưng nhận được một lỗi:Issue với module Nodejs Xà phòng khi gọi dịch vụ fedex

{ 
    "HighestSeverity": "ERROR", 
    "Notifications": [ 
     { 
     "Severity": "ERROR", 
     "Source": "prof", 
     "Code": "1000", 
     "Message": "Authentication Failed" 
     } 
    ], 
"Version": { 
    "ServiceId": {}, 
    "Major": {}, 
    "Intermediate": {}, 
    "Minor": {} 
    } 
}  

Dưới đây là mã nodejs tôi:

var data = {}; 

data["WebAuthenticationDetail"] = { 
    "UserCredential": { 
     "Key": developer_key,//getProperty('key'); 
     "Password": password 
    } 
}; 

//console.log(JSON.stringify(data)); 

data['ClientDetail'] = { 
    'AccountNumber': account_number,//getProperty('shipaccount'); 
    'MeterNumber': meter_number//getProperty('meter'); 
}; 

data['Version'] = { 
    'ServiceId': 'crs', 
    'Major': 14, 
    'Intermediate': 0, 
    'Minor': 0 

}; 

var soap = require('soap'); 
var path = require('path'); 
var path_to_wsdl = path.resolve(__dirname + '/wsdl/RateService_v14.wsdl'); 

soap.createClient(path_to_wsdl, function (err, client) { 
    if (err)throw err; 
    client.getRates(data, function (err, result) { 
     if (err)throw err; 
     res.send(result); 
    }); 
}); 

Nhưng khi tôi đang gửi dữ liệu này với php bên dưới một sau đó nó làm việc.

$path_to_wsdl = "wsdl-testing/RateService_v14.wsdl"; 

ini_set("soap.wsdl_cache_enabled", "0"); 

$client = new SoapClient($path_to_wsdl /*, array('trace' => 1) */); 

$request['WebAuthenticationDetail'] = array(
     'UserCredential' => array(
        'Key' => $developer_key, 
        'Password' => $password 
)); 

$request['ClientDetail'] = array(
         'AccountNumber' => $account_number, 
         'MeterNumber' => $meter_number, 
        ); 

$request['Version'] = array(
          'ServiceId' => 'crs', 
          'Major' => '14', 
          'Intermediate' => '0', 
          'Minor' => '0'); 
$response = $client -> getRates($request); 

Logger::info('here is the response====', $response); 

Mã giống nhau đang hoạt động trong php chứ không phải trong Nodej. Vui lòng cho tôi biết vấn đề ở đâu?

+0

bạn có câu trả lời không? Tôi đang gặp vấn đề tương tự với Magento ... nhận được phản hồi tương tự .. –

+0

Đây là vấn đề với Fedex. Fedex không phân tích cú pháp dữ liệu vào cuối của nó. Bây giờ tôi đang gửi dữ liệu ở định dạng giống như được bao gồm trong các tệp mã mẫu. – Rohit

+0

Tôi sẽ sử dụng một công cụ như fiddler (http://www.telerik.com/fiddler) có thể xem lưu lượng truy cập khi nó đi qua dây. Có lẽ một số tiêu đề hoặc một cái gì đó mà không được thiết lập rõ ràng trong nodejs, nhưng là thông qua php. –

Trả lời

0

Tôi đoán là bạn đang sử dụng URL kiểm tra bằng PHP nhưng URL trực tiếp trong node.js. Trong mã PHP của bạn, bạn sử dụng wsdl-test/ và trong mã node.js bạn sử dụng wsdl/. Nếu bạn thực sự đang sử dụng tệp WSDL thử nghiệm trong PHP, thì tôi nghĩ bạn cuối cùng sẽ giải quyết thành https: // wsbeta .fedex.com: 443/web-services/rate trong khi ở node.js bạn đang giải quyết tới https: // ws .fedex.com: 443/dịch vụ web/tỷ lệ mà bạn có thể chưa có quyền truy cập trực tiếp.

1

Tôi lưu ý bạn dán này:

{ 
    "HighestSeverity": "ERROR", 
    "Notifications": [ 
     { 
     "Severity": "ERROR", 
     "Source": "prof", 
     "Code": "1000", 
     "Message": "Authentication Failed" 
     } 
    ], 
"Version": { 
    "ServiceId": {}, 
    "Major": {}, 
    "Intermediate": {}, 
    "Minor": {} 
    } 
} 

Đây có phải là câu trả lời mà bạn nhận được từ các dịch vụ web SOAP?

Nếu vậy thì bạn đã kết nối thành công và nhận được phản hồi, mặc dù có chứa lỗi xác định những điều sau: Xác thực không thành công.

Trong hàm createClient(), có khả năng đặt không gian tên và tiền tố cụ thể cho dịch vụ web Fedex được đề cập không?

Bạn có bản sao WSDL không? Nếu bạn làm, bạn có thể tìm hiểu thêm chi tiết về chính xác cách thức dịch vụ web cần được gọi và chính xác định dạng mà các hoạt động cần được gọi.

Tôi không chắc về hoạt động bên trong của ứng dụng SODE Node.js nhưng điều tôi biết là trong PHP đôi khi khi tạo một cá thể SimpleXMLElement, cần phải đăng ký các không gian tên đối với đối tượng để đi qua đáp ứng SOAP với XSLT trong PHP.

Các vấn đề liên quan