0

我正在尝试为 Celltrust 的 SMS 网关设置 Web 服务。我有他们的 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 的派生类。我不确定是否需要指定命名空间两次(一次用于用户名,一次用于密码)或它是如何生成的。文档没有给出命名空间的任何名称,我不确定如何正确调用 Ruby 中的“new SoapHeader”。

谁能帮我这个?

4

1 回答 1

0

正如您提到的,您需要创建 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')
于 2009-10-30T12:23:31.560 回答