Bir Zend_Soap Hizmet için SOAP üstbilgileri belirtme

1 Cevap php

Ben (aynı hizmeti bir Java uygulaması gelen ZF kod dönüştürme ve mümkün olduğunca aynı wsdl yapısını korumak için çalışıyor) yazdım genellikle yalındır web hizmeti var. Hizmet yerine bireysel işlevleri yerine, bir PHP sınıfı yükler. PHP sınıf içinde üç farklı işlevleri içerir.

Her şey belirli bir işlev parametresi bir soap üstbilgisi olarak geçirilmesi gerektiğini belirtmek için nasıl anlamaya görünüyor olamaz dışında, sadece iyi çalışıyor gibi görünüyor. Ben bir sunucuya bir istemci ile başlık parametreleri geçmek sadece nasıl, sunucu bağlamında soap üstbilgileri herhangi bir söz görmedim.

Soap gövde gönderilen ve bilgilendirme kısmı ayrıntılı olacağını fonksiyonu için standart parametrelere ek olarak, ben bir SOAP başlığında gönderilecek iki parametre (bir kullanıcı adı ve şifre) belirtmek isterim.

Bu mümkün olduğunu varsaymak zorunda, ancak online bir şey bulmak mümkün olmamıştır, ne de ben zerdüştlerin forumunda benzer bir mesaja herhangi bir yanıt oldu. Bir başlık olarak bir parametre belirtmek için bilgilendirme kısmı alanında eklenebilir bir şey var mı (WebParam kullanarak belki benzer şekilde?)? Bu başarılı almak konusunda herhangi bir öneri / örnekleri büyük takdir!

1 Cevap

Ben sadece bu sorunun içine kendimi koştu. Benim SOAP isteği şöyle yapılandırılmıştır:

<SOAP-ENV:Envelope>
  <SOAP-ENV:Header>
    <Header>
      <APIKey>$key</APIKey>
      <SiteID>$id</SiteID>
    </Header>
  </SOAP-ENV:HEADER>
  (body)
</SOAP-ENV:Envelope>

Benim <SOAP-ENV:Header> etiketinin içeriği <Header> muhafaza içinde Çünkü, benim SoapServer örneği yükler {[(3)] denilen sınıfında bir kamu yöntemi yarattı API anahtarı ve Site Kimliği geçerli olmadığını} o zaman gerçek bir özel sınıf değişkeni ayarlar. Istek gövdesini işlemek benim sınıfımda diğer yöntemler o değişken geçmeden önce doğru olup olmadığını görmek için kontrol edin. Çirkin, biliyorum, ama söz, hiçbir belge var ve bu kolay yolu gibi görünüyor. Bu şuna benzer:

class MySoapRequestHandler
{
    private $authenticated;

    public function Header($data)
    {
      //your logic here
      if($request_is_valid)
      {
        $this->authenticated = true;
      }
      else
      {
        $this->authenticated = false;
      }
    }

    public function ProcessBody($data) //of course named whatever your body element is named
    {
      if($this->authenticated === true)
      {
        //process the request
      }
      else
      {
        //throw a soap fault?
      }
    }
  }

Eğer daha fazla sorunuz varsa bana bildirin; Ben mümkün olduğunca çok yardımcı olmak mutlu.