2013-01-24 33 views
6

Yazılımımızı SecureNet ağ geçidiyle bütünleştirmeye çalışıyorum. SOAP tabanlı bir API var.SecureNet ödeme ağ geçidi ile tümleştirme

Yapmakta olduğum sorun onların WSDL dosyası gerçekten PHP ile çalışmıyor. Özellikle, WSDL dosyaları, bir wsdl:import bildirimi ile birden çok dosyaya bölünür ve içe aktarma konumu http'dur. Test sunucularında http ve https portları açık, bu yüzden PHP WSDL dosyasını okuyabilir. Üretim sunucularında yalnızca https açık, ancak konum blokları hala http referansıdır, bu yüzden PHP zaman aşımına uğradı! https ise, iyi çalışır.

Önerileri, WSDL dosyasını test sunucusundan çekmek, ancak konumu geçersiz kılmaktı. Test sunucularının her zaman hazır olması gerektiğini söylüyorlar, ancak işlemlerin işe yaraması için iki sisteme güvenmemekte rahat hissetmiyorum.

Diğer alternatif, XML post API'sini kullanmaktır ... Ancak, bununla ilgili her alanı (gerekli veya değil) doğru sırada belirtmeniz gerekir. En kötüsü bu API için sadece Unknown Error. hata mesajıdır, bu yüzden neyi kaçırdığımı anlamak neredeyse imkansız.

Üçüncü bir seçeneğe ihtiyacım var. Sabun iyi çalışır, eğer WSDL dosyasını yükleyebilirsem (test edilip üretime alınamaz). Sanırım WCF kullanıyorlar, ki ben inanıyorum bir .NET şey. "? WSSD" seçeneği "wsdl" seçeneği olması gerekiyordu, ancak WCF sürümlerinde buna sahip değil. İşte

onların WSDL dosyası (test sunucusu) 'dir: https://certify.securenet.com/API/Gateway.svc?wsdl

DÜZENLEME: İşte

tekrarlanabilir kod şudur: Üretim sunucudan WSDL indirebiliriz

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

cevap

0
+0

:

geçici çözüm istekleri için, şöyle yapacak URL'leri yeniden taban SoapClient sınıfını uzatmaktır. Sorun, WSDL dosyasının diğer birkaç dosyayı içe aktarması ve içe aktarma URL'lerinin http: // ile başlamasıdır. WSDL'yi geliştirme ortamlarından ve setLocation'ı kullanarak çekmeyi önerdiler, ama onların dev ortamına güvenmek istemiyorum. – Luke

0

Daha fazla bilgi Uzak WSDL dosyasındaki bir hata gibi, SSL üzerinden olmayan varlıklara sahip olan web sitelerinin dahil edilmesine nasıl dahil edildiğine benzer bir uyarı verilir.

Neyse ki etrafta çalışabiliriz. The SoapClient Manual Page, jjlopez kullanıcısı tarafından yayınlanan bağlantı numaraları için benzer bir çözüm sunmaktadır. Bu son noktayı belirler

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); 
    } 
} 
İlgili konular