Запутался в пользовательских заголовках soap4r - PullRequest
0 голосов
/ 12 октября 2009

Я пытаюсь настроить веб-сервис для SMS-шлюза Celltrust. У меня есть их SDK, и я пытаюсь использовать soap4r для создания пользовательских заголовков, которые ему нужны. Я не уверен точно, что мне нужно сделать, чтобы получить его в их формате, поскольку они не предоставляют мне фактический документ XML, показывающий, что им нужно; все, что они говорят, это то, что в заголовке нужно указать имя пользователя и пароль.

Учитывая следующий пример кода PHP, как мне это сделать в Ruby?

$URN = "urn:notify.soap.primemessage.com";  
$WSDL="http://pmgateway.net/pmws/services/TxTMessageService?wsdl";  

//SOAP elements (don’t edit, and case sensitive!)  
$CTUSERNAME = "Username";  
$CTPASSWORD = "Password";  
$CTNICKNAME = "nickname";  
$DESTINATION = "destination";  
$MESSAGE = "message";  

$USER_ID = "USERNAME"; //your username at CellTrust  
$NICKNAME = "NICKNAME";           //your nickname at Celltrust  
$PASSWORD = "PASSWORD"; //your password at Celltrust  

//create user and password SOAP header elements  
$UserHdr = new SoapHeader( $URN, $CTUSERNAME, $USER_ID, false);  
$PassHdr = new SoapHeader( $URN, $CTPASSWORD, $PASSWORD, false);  

// call the method here

Я создал производный класс SOAP :: Header :: SimpleHandler. Что я не уверен, так это то, нужно ли мне указывать пространство имен дважды (один раз для имени пользователя, один раз для пароля) или как оно генерируется. Документация не дает никакого имени для пространства имен, и я не уверен, как правильно выполнить вызов «new SoapHeader» в Ruby.

Может ли кто-нибудь помочь мне с этим?

1 Ответ

0 голосов
/ 30 октября 2009

Вам необходимо создать подкласс SOAP :: Header :: SimpleHandler, как вы упомянули:

class MyHandler < SOAP::Header::SimpleHandler

  def initialize(namespace, name, value)
    super(XSD::QName.new(namespace, name))
    @value = value
  end

  def on_simple_outbound
    @value
  end
end

Тогда просто сделайте:

namespace = 'INSERT_NAMESPACE_URL_HERE'
# 'driver' below is the Soap4R driver for the service
driver.headerhandler << MyHandler.new(namespace, 'Username', 'INSERT_USERNAME_HERE')
driver.headerhandler << MyHandler.new(namespace, 'Password', 'INSERT_PASSWORD_HERE')
...