Adding a header to a SOAP request

Hi all,

I want to use ruby to integrate my site with PayPal's new Website Direct Pro API. I tried the code below, and it seems to work once I upgraded to soap4r-1_5_4:

   require 'soap/wsdlDriver'
   server = SOAP::WSDLDriverFactory.new("http://www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl")
   @driver = server.createDriver

One problem I'm having is Paypal requires that I set a header in the request (user id & password). How do I add this before performing a request?

Any help or pointers to some SOAP/WSDL ruby documentation would be greatly appreciated.

Thanks!
--Dave.

something like that works: that's what I use for the Google Adwords API.
The soap4r sample for adwords has a bug, but the code below works.
Just adapt it to your needs for the paypal headers.
In my code headers is a hash with tag, value pairs.
I load it from a yaml file but you can set it up the way you want.
I hope this helps.

···

---
wsdl = 'https://adwords.google.com/api/adwords/v2/CampaignService?WSDL'

class HeaderHandler < SOAP::Header::SimpleHandler
  def initialize(tag, value)
    super(XSD::QName.new(nil, tag))
    @tag = tag
    @value = value
  end

#the initial handler from the sample was wrong, it generated 2 level of tags
  def on_simple_outbound
    @value
  end
end

require 'defaultDriver.rb'
require 'yaml'

prefs = YAML::load( File.open('adwords.yaml', 'r'))
headers = prefs['headers']

drv = CampaignService.new()

#problem: http protocol properties set in soap/property from rubyhome
are not picked up
drv.loadproperty('soap/property')
#problem: wiredump_dev does not output anything when running in SSL mode
#drv.wiredump_dev = STDOUT
#the file based logger works
drv.wiredump_file_base = "log"

headers.each {|key, value| drv.headerhandler << HeaderHandler.new(key, value)}
---

P@

On 6/27/05, David Teare <dteare@tearesolutions.com> wrote:

Hi all,

I want to use ruby to integrate my site with PayPal's new Website
Direct Pro API. I tried the code below, and it seems to work once I
upgraded to soap4r-1_5_4:

   require 'soap/wsdlDriver'
   server = SOAP::WSDLDriverFactory.new("http://
www.sandbox.paypal.com/wsdl/PayPalSvc.wsdl")
   @driver = server.createDriver

One problem I'm having is Paypal requires that I set a header in the
request (user id & password). How do I add this before performing a
request?

Any help or pointers to some SOAP/WSDL ruby documentation would be
greatly appreciated.

Thanks!
--Dave.