2011-07-26 19 views
7

Tôi đang kết nối thành công, sử dụng Microsoft C#, với dịch vụ web của Microsoft. Tôi phải cung cấp tên người dùng, mật khẩu (trong mã C#); và cài đặt chứng chỉ (ở định dạng .cer) vào phần "Tổ chức phát hành chứng chỉ gốc" của chứng chỉ của hệ thống.Kết nối với dịch vụ web bằng PHP chỉ cung cấp tên người dùng, mật khẩu và cơ quan cấp chứng chỉ

Tôi làm cách nào để kết nối với dịch vụ web như vậy trong PHP? Lý do tôi hỏi là tất cả các phương thức mà tôi đã thấy (chẳng hạn như wsdl2php, tạo lớp con SoapClient), dường như thừa nhận nhiều thứ khác nhau, chẳng hạn như chứng chỉ SSL, tệp khóa SSL và cụm mật khẩu khóa SSL.

Vì vậy, tất cả đều gây nhầm lẫn cho tôi. Tôi không chắc nên đi đâu. Tôi không chắc chắn nơi "thẩm quyền chứng chỉ gốc" của tôi (tệp .cer) nên đi, và nơi tên người dùng và mật khẩu sẽ đi. Bất kỳ ý tưởng?

Trả lời

5

tất cả có thể được thực hiện whith soapclientstream_context_create sử dụng ssl options

<?php 
$context = stream_context_create(array(
    'https' => array(
    'cafile' => '/path to file', 
    'verify_peer' => true 
))); 

new soapclient("https://localhost/index.php?wsdl",array(
    'login'=>'admin', 
    'password'=>'passss', 
    'stream_context'=> $context 
)); 

nó không phải là không phổ biến trong xà phòng để không sử dụng http auth nhưng chỉ là một xà phòng gọi, documnetation là điều cần thiết

nó có thể được bổ ích khi sử dụng các lớp whith soapclient bằng cách sử dụng classmap để ánh xạ soaptypes tới các clases php

+0

Bạn có một số mã có thể làm điều này với NuSOAP không? Nếu tôi sử dụng mã của bạn, tôi luôn luôn nhận được lỗi này: PHP Cảnh báo: SoapClient :: __ doRequest(): SSL: Kết nối thiết lập lại bởi peer trong /Users/enchilada/Desktop/test.php trên dòng 22 PHP Fatal error: Uncaught SoapFault exception: Lỗi [HTTP] Tìm nạp tiêu đề http trong /Users/enchilada/Desktop/test.php:22 – Enchilada

+1

cài đặt libssl, curl, libxml (nếu không phải là inst. & Linux) và cập nhật php, có lỗi trỏ đến lỗi này, hãy thử thêm theo dõi tùy chọn trong việc tạo ra cá thể, nếu điều đó đã không làm việc bắt đầu wireshark – borrel

+0

Tôi sẽ thử những. Cảm ơn. Tôi sẽ liên lạc lại với bạn nếu nó vẫn không hoạt động. – Enchilada

0

Thông thường nếu bạn đang gọi điện thoại một webservice sử dụng SSL thường xuyên URL của bạn sẽ trông giống như:

https://username:[email protected]/mywebservice.php

Sau đó là vấn đề của các chứng chỉ SSL. Tôi đang sử dụng một cái gì đó tương tự như đọc từ một mặt trận web SVN SSL bảo vệ. Tôi không biết bất kỳ giải pháp nào khác ngoài việc đăng nhập vào máy chủ khi người dùng đang chạy máy chủ web của bạn (apache/IIS) và chấp nhận chứng chỉ theo cách thủ công. Trong trường hợp của SVN bạn có thể thực hiện thanh toán và nó sẽ yêu cầu bạn chấp nhận chứng chỉ. Tôi không hoàn toàn chắc chắn làm thế nào điều này sẽ làm việc cho một yêu cầu HTTPS đồng bằng nhưng có lẽ bạn có thể nhận được giấy chứng nhận bằng cách tải các webservice trong một trình duyệt? (hoặc sử dụng wget hoặc thứ gì đó lạ mắt nếu bạn đủ may mắn để chạy Linux)

Ngoài ra, mã của bạn có phải là mã PHP hoặc mã C# không? Nếu đó là C# bạn có thể cần phải làm một cái gì đó khác hoàn toàn.

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