2013-01-24 40 views
6

Tôi đang cố gắng tích hợp phần mềm của chúng tôi với cổng SecureNet. Họ có một API dựa trên SOAP.Tích hợp với cổng thanh toán SecureNet

Sự cố tôi gặp phải là tệp WSDL của họ thực sự không hoạt động với PHP. Cụ thể tệp WSDL của họ được chia thành nhiều tệp với câu lệnh wsdl:import và vị trí nhập là http. Trên máy chủ thử nghiệm của họ httphttps cổng đang mở, vì vậy PHP có thể đọc tệp WSDL. Trên máy chủ sản xuất của họ chỉ https đang mở, nhưng khối vị trí của họ vẫn tham chiếu http, vì vậy, PHP hết giờ! Nếu nó là https, nó sẽ hoạt động tốt.

Đề xuất của họ là kéo tệp WSDL từ máy chủ thử nghiệm của họ, nhưng ghi đè vị trí. Họ nói với tôi rằng máy chủ thử nghiệm của họ phải luôn luôn hoạt động, nhưng tôi không cảm thấy thoải mái khi dựa vào hai hệ thống để giao dịch của chúng tôi hoạt động.

Cách khác là sử dụng API bài XML của họ ... Nhưng vấn đề với điều đó là bạn phải chỉ định mọi trường (cần thiết hay không) theo đúng thứ tự. Phần tồi tệ nhất là thông báo lỗi cho API này chỉ đơn giản là Unknown Error., vì vậy gần như không thể tìm ra những gì tôi đang thiếu.

Tôi cần tùy chọn thứ ba. Xà phòng hoạt động tốt, nếu tôi có thể tải tệp WSDL (có thể thử nghiệm, không phải sản xuất). Tôi nghĩ rằng họ đang sử dụng WCF, đó là một điều NET. Tôi tin. Có nghĩa vụ phải là một "? SimpleWSDL" câu "wsdl" tùy chọn, nhưng trên phiên bản của WCF không có nó.

Đây là tập tin WSDL của họ (server test): https://certify.securenet.com/API/Gateway.svc?wsdl

EDIT:

Đây là mã tái sản xuất:

$client = new SoapClient("https://gateway.securenet.com/API/Gateway.svc?wsdl"); 
// Hangs and throws exception in construct 

Trả lời

0

Bạn có thể kéo WSDL từ máy chủ sản xuất và ghi đè vị trí theo chương trình bằng cách sử dụng SoapClient::__setLocation

+0

này đặt điểm kết thúc. Vấn đề là tệp WSDL nhập một số tệp khác và bắt đầu nhập URL bằng http: //. Họ đề nghị kéo WSDL từ môi trường phát triển của họ và sử dụng setLocation, nhưng tôi không muốn dựa vào môi trường dev của họ đang được lên. – Luke

0

Nghe có vẻ nhiều hơn giống như một lỗi trong tệp WSDL từ xa, tương tự như cách truy cập các trang web qua SSL có nội dung không phải SSL bao gồm gây ra cảnh báo.

May thay có vẻ như chúng tôi có thể làm việc xung quanh nó. The SoapClient Manual Page có giải pháp tương tự cho số cổng, được đăng bởi người dùng jjlopez.

Cách giải quyết là để mở rộng các lớp cơ sở SoapClient để viết lại các URL mà nó sẽ đưa ra yêu cầu để, như vậy:

class SecureSoapClient extends \SoapClient 
{ 
    protected $_scheme; 

    public function __construct($wsdl, $options) 
    { 
     $this->_scheme = parse_url($wsdl, PHP_URL_SCHEME); 
     return parent::__construct($wsdl, $options); 
    } 

    public function __doRequest($request, $location, $action, $version, $one_way = 0) { 
     $currentScheme = parse_url($location, PHP_URL_SCHEME); 
     $location = preg_replace('^' . $currentScheme, $this->_scheme, $location); 
     return parent::__doRequest($request, $location, $action, $version, $one_way); 
    } 
} 
Các vấn đề liên quan