PHP Sabun cehennem

3 Cevap php

Ben bu çalıştırırsanız

$HostTransactionInfo = new HostTransactionInfo();  // std Object
$HostTransactionInfo->SecurenetID = $cc->merchant->data[$this->name]['secure_net_id'];
$HostTransactionInfo->SecureKey = $cc->merchant->data[$this->name]['secure_key'];
$HostTransactionInfo->Test = self::TEST;

$securenet = new SoapClient(self::WSDL, array('features' => SOAP_SINGLE_ELEMENT_ARRAYS));
$host_trans_info = new SoapVar($HostTransactionInfo, SOAP_ENC_OBJECT);
var_dump($host_trans_info);

$save = $securenet->Process_Save($host_trans_info);

Ben her varyasyon Bu alırsınız: "Sunucu isteği işleyemedi ---> Nesne başvurusu bir nesnenin örneğine ayarlanmadı.."

Benim SoapClient :: __getTypes () isteği bana bu verir:

array(
 [2] => struct HostTransactionInfo {
 string SecurenetID;
 string SecureKey;
 string Test;
}
 [6] => struct Process_Save {
 HostTransactionInfo oTi;
}
)

Benim SoapClient :: __getFunctions () isteği bana bu verir:

array (
    [2] => Process_SaveResponse Process_Save(Process_Save $parameters)
)

Herkes yanlış yapıyorum ne olarak herhangi bir ipucu var mı?

3 Cevap

Hata securenet webservice tarafından döndürülür. Neden onların temas support?

Ama her durumda, sunucu "bir nesnenin örneğine ayarlanmadı nesnesi referans" daha bilgilendirici bir mesaj dönmelidir. Bazı beklenmedik girdi aldığında kendi kod boş işaretçileri dereferences gerçeği bir "güvenli" ödeme sistemi olması gerekiyordu şey için iyiye işaret değil.

Eğer geri almak sunucu ve XML yanıt gönderilen XML isteği kontrol edin:

// ...
$securenet = new SoapClient(self::WSDL, array(
    'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
    'trace'    => true  // that's important for the debugging methods to work
));
// ...
$save = $securenet->Process_Save($host_trans_info);
var_dump($securenet-> __getLastRequestHeaders());
var_dump($securenet-> __getLastRequest());
var_dump($securenet-> __getLastResponseHeaders());
var_dump($securenet-> __getLastResponse());

Bu size tel üzerinde neler olup bittiğini bir bakış elde etmek için yardımcı olacaktır. Eğer herhangi bir sunucu ile ilgili bir sorun ekarte durumunda, hata büyük olasılıkla gerekli biçimde değil, bir XML-SOAP istek ile ilgili olacaktır.

Merhaba bu geç orijinal soranın için, ama aynı hata olabilir herkes için olabilir ...

Bu i M $. Net veya C # (CVS) veya M $ Sabun sunucularının başka lezzet ile çalışırken öğrendim ben bir hiledir ... M $ zarf içinde bir şeyler değişir ve terslik nerede olduğunu ...

class MSSoapClient extends SoapClient {
   function __doRequest($request, $location, $action, $version) {
        $namespace = "http://tempuri.org/";

        $request = preg_replace('/<ns1:(\w+)/', '<$1 xmlns="'.$namespace.'"', $request, 1);
        $request = preg_replace('/<ns1:(\w+)/', '<$1', $request);
        $request = str_replace(array('/ns1:', 'xmlns:ns1="'.$namespace.'"'), array('/', ''), $request);        

        // parent call
        return parent::__doRequest($request, $location, $action, $version);
    }
}

Bu $namespace = "http://tempuri.org/"; emin olun bu WSDL dosyasına göre doğru yapmak değişken bakmak ... zarfı düzeltmek ve çoğu durumda hatayı düzeltecektir

Ben bu KULLANıCı'nın hatayı düzeltmek eğer bilmiyorum ama benzer hatalar ile başkalarına yardımcı olabilir