2010-10-14 40 views
5

Tôi cần kết nối với dịch vụ web yêu cầu thông tin đăng nhập xác thực dưới dạng tên người dùng và mật khẩu thuần văn bản.Xác thực SOAP bằng PHP

Tôi có hiểu biết cơ bản về SOAP và đã quản lý kết nối với các dịch vụ web mở khác không yêu cầu tên người dùng hoặc mật khẩu bằng NuSOAP.

Sau đây đã được gửi đến cho tôi:

<?php 

// Set up security options 
$security_options = array("useUsernameToken" => TRUE); 
$policy = new WSPolicy(array("security" => $security_options)); 

$security_token = new WSSecurityToken(array(
    "user" => "xxx", 
    "password" => "xxx", 
    "passwordType" => "basic")); 

// Create client with options 
$client = new WSClient(array("wsdl" => "https://xxx.asmx?wsdl", 
    "action" => "http://xxx", 
    "to" => "https://xxx", 
    "useWSA" => 'submission', 
    "CACert" => "cert.pem", 
    "useSOAP" => 1.1, 
    "policy" => $policy, 
    "securityToken" => $security_token)); 

// Send request and capture response 
$proxy = $client->getProxy(); 

$input_array = array("From" => "2010-01-01 00:00:00", 
    "To" => "2010-01-31 00:00:00"); 

$resMessage = $proxy->xxx($input_array); 
?> 

Sau khi một số nghiên cứu Tôi hiểu rằng việc thực hiện trên sử dụng WSO2. Tôi cần để có thể làm điều này mà không cần sử dụng wso2.

Tôi đã cố hết sức để tìm kiếm các tài nguyên (Google, diễn đàn, v.v.) về những điều trên nhưng không thể tìm thấy bất kỳ điều gì. Tôi đã đọc một số hướng dẫn về SOAP và đã có thể thiết lập một khách hàng SOAP bằng cách sử dụng PHP nhưng không thể có được đầu của tôi xung quanh tất cả các xác thực và "chính sách".

Giải thích về cách đạt được điều này và có thể một số liên kết để đọc thêm về điều này sẽ rất được đánh giá cao khi tôi xé tóc ra! Lý tưởng nhất là tôi muốn một số liên kết đến tài nguyên cho người mới bắt đầu tuyệt đối để xác thực SOAP.

Cảm ơn. P.S một số liên kết/thông tin đăng nhập ở trên có thể đã được xxx'd cho quyền riêng tư.

Trả lời

9

Nếu bạn đã bật tiện ích SOAP trong php (phiên bản php> = 5.0.1), bạn có thể sử dụng lớp SoapClient để xử lý yêu cầu của mình. Để xác thực, bạn có thể chuyển tên người dùng và mật khẩu cho lớp học với URL mục tiêu:

$soapURL = "https://www.example.com/soapapi.asmx?wsdl" ; 
$soapParameters = Array('login' => "myusername", 'password' => "mypassword") ; 
$soapFunction = "someFunction" ; 
$soapFunctionParameters = Array('param1' => 42, 'param2' => "Search") ; 

$soapClient = new SoapClient($soapURL, $soapParameters); 

$soapResult = $soapClient->__soapCall($soapFunction, $soapFunctionParameters) ; 

if(is_array($soapResult) && isset($soapResult['someFunctionResult'])) { 
    // Process result. 
} else { 
    // Unexpected result 
    if(function_exists("debug_message")) { 
     debug_message("Unexpected soapResult for {$soapFunction}: ".print_r($soapResult, TRUE)) ; 
    } 
} 

Nếu bạn không chắc chắn về các chức năng bạn có thể gọi, bạn có thể xem URL mục tiêu (ví dụ: kết thúc bằng ". asmx? wsdl ") trong trình duyệt của bạn. Bạn sẽ nhận được một phản hồi XML cho bạn biết các hàm SOAP có sẵn mà bạn có thể gọi và các tham số dự kiến ​​của các hàm đó.

+0

tôi đã cố gắng nêu trên và cũng có thể bao gồm các thông số thêm từ mã ban đầu của tôi trong $ soapFunctionParameters nhưng tôi nhận được ngoại lệ "Hành động vì người nhận cuối cùng là cần thiết nhưng không có mặt trong thông báo". Bạn nghĩ chức năng WSPolicy và mã thông báo WSSecurity hoạt động như thế nào? Một lần nữa, tôi là một người ăn xin hoàn toàn thực sự. –

+0

FYI- $ soapFunctionParameters trong $ soapResult = ... soapCall() được viết không chính xác. Tôi đã xem xét điều này trong khi tìm kiếm thông tin này và đang sử dụng mã của bạn để kiểm tra. Có thể không quan trọng vì đây là từ năm 2010. – Travis

+0

@guss Làm thế nào để máy chủ xà phòng sau đó xác thực dữ liệu đăng nhập được truyền với mảng '$ soapParameters' vào soapclient? Trong kịch bản máy chủ xà phòng PHP của tôi, '$ _SERVER ['PHP_AUTH_USER']' không được thiết lập, vậy làm cách nào tôi nên xác thực? –

0

Kiểm tra các soap_wsse library

+0

Thậm chí không phải là một liên kết .... – DanMan

+0

Xin lỗi ... http://www.sis.utoronto.ca/web_services/code_samples.html – a77icu5