2013-01-24 76 views
6

के साथ एकीकृत करना मैं अपने सॉफ़्टवेयर को सिक्योरनेट गेटवे के साथ एकीकृत करने की कोशिश कर रहा हूं। उनके पास एक एसओएपी आधारित एपीआई है।सिक्योरनेट भुगतान गेटवे

मेरी समस्या यह है कि उनकी डब्लूएसडीएल फ़ाइल वास्तव में PHP के साथ काम नहीं करती है। विशेष रूप से उनकी डब्लूएसडीएल फ़ाइल wsdl:import कथन के साथ कई फ़ाइलों में विभाजित होती है, और आयात स्थान http है। उनके परीक्षण सर्वर http और https बंदरगाहों पर खुले हैं, इसलिए PHP WSDL फ़ाइल को पढ़ सकता है। उनके उत्पादन सर्वर पर केवल https खुला है, लेकिन उनका स्थान ब्लॉक अभी भी http का संदर्भ देता है, इसलिए PHP समय समाप्त हो गया है! अगर यह https था तो यह ठीक काम करेगा।

उनकी सिफारिश WSDL फ़ाइल को उनके परीक्षण सर्वर से खींचाना था, लेकिन स्थान को ओवरराइड करना था। वे मुझे बताते हैं कि उनका टेस्ट सर्वर हमेशा ऊपर होना चाहिए, लेकिन मुझे अपने लेनदेन के लिए काम करने के लिए दो प्रणालियों पर निर्भर रहने में सहज महसूस नहीं होता है।

दूसरा विकल्प उनके एक्सएमएल पोस्ट एपीआई का उपयोग करना है ... लेकिन इसके साथ समस्या आपको सही क्रम में प्रत्येक फ़ील्ड (आवश्यक या नहीं) निर्दिष्ट करना है। सबसे बुरा हिस्सा यह है कि इस एपीआई के लिए त्रुटि संदेश बस Unknown Error. है, इसलिए यह पता लगाना लगभग असंभव है कि मैं क्या खो रहा हूं।

मुझे तीसरे विकल्प की आवश्यकता है। साबुन अच्छी तरह से काम करता है, अगर मैं डब्लूएसडीएल फ़ाइल लोड कर सकता हूं (परीक्षण पर, उत्पादन नहीं कर सकता)। मुझे लगता है कि वे डब्ल्यूसीएफ का उपयोग कर रहे हैं, जो एक .NET चीज है जो मुझे विश्वास है। एक "? सरल WSDL" छंद "wsdl" विकल्प होना चाहिए, लेकिन डब्ल्यूसीएफ के उनके संस्करण पर यह नहीं है।

यहाँ उनके WSDL फ़ाइल (परीक्षण सर्वर) है: https://certify.securenet.com/API/Gateway.svc?wsdl

संपादित करें:

यहाँ प्रतिलिपि प्रस्तुत करने योग्य कोड है:

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

उत्तर

0

आप उत्पादन सर्वर से डबल्यूएसडीएल खींच सकते हैं और SoapClient::__setLocation

+0

यह अंत बिंदु सेट:

वैकल्पिक हल यूआरएल है कि यह कर देगा तो जैसे अनुरोध करने के लिए, के पुनर्लेखन के लिए आधार SoapClient वर्ग का विस्तार करने के लिए है। समस्या यह है कि डब्लूएसडीएल फ़ाइल कई अन्य फाइलों का आयात करता है, और आयात यूआरएल http: // से शुरू होता है। उन्होंने डब्ल्यूएसडीएल को अपने विकास पर्यावरण से और सेटलोकेशन का उपयोग करने का सुझाव दिया, लेकिन मैं अपने देव पर्यावरण पर भरोसा नहीं करना चाहता हूं। – Luke

0

का उपयोग करके प्रोग्रामेटिक रूप से स्थान को ओवरराइड करें रिमोट डब्लूएसडीएल फ़ाइल में एक बग की तरह, एसएसएल पर वेबसाइटों पर जाने वाली वेबसाइटों के समान, जिनमें गैर-एसएसएल संपत्तियां शामिल हैं, एक चेतावनी का कारण बनती है।

सौभाग्य से ऐसा लगता है कि हम इसके आसपास काम कर सकते हैं। The SoapClient Manual Page में उपयोगकर्ता संख्या jjlopez द्वारा पोस्ट पोर्ट नंबर के लिए एक समान कामकाज है।

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); 
    } 
}