Tôi đang cố gắng để thiết lập một khách hàng Xà phòng với đoạn mã sau:khách hàng SOAP PHP với giấy chứng nhận qua SSL
<?php
$wsdl = 'https://domain.com/?wsdl';
$endpoint = 'https://domain.com';
$certificate = dirname(__FILE__) . '/CertWithKey.pem';
$password = 'pwd';
$options = array(
'location' => $endpoint,
'keep_alive' => true,
'trace' => true,
'local_cert' => $certificate,
'passphrase' => $password,
'cache_wsdl' => WSDL_CACHE_NONE
);
try {
$soapClient = new SoapClient($wsdl, $options);
} catch(Exception $e) {
var_dump($e);
}
tôi đã được đưa ra một đuôi .p12 khóa tập tin với một tệp giấy chứng nhận .crt. Sử dụng openssl Tôi đã chuyển đổi tệp .p12 thành tệp .pem và sau đó hợp nhất tệp đó với tệp .crt. CertWithKey.pem có vẻ tốt với tôi, hai khối chứng chỉ có trong tệp.
Bất kể tôi cố gắng làm gì, tôi vẫn nhận được ngoại lệ với thông báo SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://domain.com/?wsdl' : failed to load external entity "https://domain.com/?wsdl"
.
Sau khi gọi điện với bên từ xa, họ thừa nhận rằng yêu cầu sẽ đến nhưng họ đang ghi nhật ký lỗi này: ssl handshake interrupted by system [hint: stop button pressed in browser?!]
.
Vì tôi không tìm thấy bất kỳ thông tin hữu ích nào trên mạng nên tôi đã tìm hiểu các bạn về một số thông tin chi tiết về vấn đề này.
Bất kỳ đề xuất nào có thể được thử? Tôi đang chạy PHP 5.3.8 và địa chỉ IP của máy chủ là màu trắng được liệt kê trong tường lửa tại bên từ xa.
Tôi cũng đang cố gắng gửi yêu cầu SOAP đến một máy chủ. Tôi đang đối mặt với một vấn đề tương tự mà tôi không thể giao tiếp với máy chủ thông qua ứng dụng php của mình. nhưng hoạt động thông qua GUI SOAP. Tôi có tệp .p12 mà tôi đã cố gắng sử dụng bằng cách chuyển đổi thành tệp .pem. Khi tôi tạo đối tượng khách hàng SOAP, tôi nhận được lỗi: SOAP-ERROR: Phân tích cú pháp WSDL: Không thể tải từ https: //? Wsdl: không tải được thực thể bên ngoài https: // ? Wsdl Có thể bạn hãy cho tôi biết những gì đang xảy ra ở đây? –
Nếu bạn đã làm theo câu trả lời của tôi và các tập tin quan trọng và crt được hợp nhất thành công, máy chủ từ xa có thể đã kích hoạt tường lửa và chặn địa chỉ IP của bạn. Nếu không tôi không thể nói được, có lẽ bạn nên mở một câu hỏi sau đó. – Ben
Tôi gặp vấn đề tương tự. Và tôi đã làm theo các bước chính xác mà @Ben đã cung cấp. Các p12 đã được chuyển đổi thành .pem bằng cách sử dụng liên kết được cung cấp.Nhưng tôi vẫn nhận được lỗi: curl: (58) Không thể tải khách hàng cert -8018 Kỳ lạ thay, tôi đã nhận ra rằng cụm từ mật khẩu mà tôi đang cung cấp là 3 -digits '123', thay vào đó tôi phải cung cấp một số cụm từ mật khẩu hợp lệ gồm 6 ký tự chữ cái. Vì vậy, tôi tin rằng, phải có một số cụm từ mật khẩu dài (Không biết chiều dài tối thiểu). Điều tiếp theo bị thiếu là các tùy chọn 'local_cert', 'mật khẩu' cần được cung cấp trong khởi tạo đối tượng SoapClient. –