# Paypal ipn returns nil

**URL:** <https://www.ruby-forum.com/t/paypal-ipn-returns-nil/66810>\
**Category:** Rails\
**Created:** [August 29, 2006, 2:57pm UTC](https://www.ruby-forum.com/t/paypal-ipn-returns-nil/66810 "2006-08-29T14:57:14Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![Dion\_H](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/839c29/32.png) [@Dion\_H](https://www.ruby-forum.com/u/Dion_H)\
**Post date:** [August 29, 2006, 2:57pm UTC](https://www.ruby-forum.com/t/paypal-ipn-returns-nil/66810/1 "2006-08-29T14:57:14Z")

</div>

while testing IPN validations with the PayPal gem,

I keep getting a nil object message for notify.acknowledge

even though notify is not empty

notify = Paypal::Notification.new(request.raw\_post)

> > notify  
> > =\> #\<Paypal::Notification:0x398d9d0  
> > @raw="receiver\_id=D31B7IUDQITUL&business=paypal%40yourdo…etc etc

> > notify.acknowledge  
> > NoMethodError: You have a nil object when you didn’t expect it!  
> > The error occured while evaluating nil.verify\_mode  
> > from d:/ruby/lib/ruby/1.8/net/http.rb:565:in `connect' from d:/ruby/lib/ruby/1.8/net/http.rb:555:in `do\_start’  
> > from d:/ruby/lib/ruby/1.8/net/http.rb:544:in `start' from d:/ruby/lib/ruby/1.8/net/http.rb:1031:in `request’  
> > from  
> > ./script/…/config/…/config/…/vendor/plugins/paypal/lib/notification.rb:209:in  
> > `acknowledge’  
> > from (irb):107  
> > from :0

has anyone seen this before?

cheers

dion

–

[www.blogsaic.com](http://www.blogsaic.com)  
search, post, blog

---

<div class="post-metadata">

**Author:** ![Dion\_H](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/839c29/32.png) [@Dion\_H](https://www.ruby-forum.com/u/Dion_H)\
**Post date:** [August 29, 2006, 3:07pm UTC](https://www.ruby-forum.com/t/paypal-ipn-returns-nil/66810/2 "2006-08-29T15:07:15Z")

</div>

Hello Dion,

2006/8/29, Dion H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> while testing IPN validations with the PayPal gem,  
> …  
> ./script/…/config/…/config/…/vendor/plugins/paypal/lib/notification.rb:209:in  
> `acknowledge’  
> from (irb):107  
> from :0

Did you look at line 209 of notification ? That should give you a clue.

Check Paypal::Notification.ipn\_url is not nil before calling too.

## Hope that helps !

FranÃ§ois Beausoleil  
[http://blog.teksol.info/](http://blog.teksol.info/)  
[http://piston.rubyforge.org/](http://piston.rubyforge.org/)

---

<div class="post-metadata">

**Author:** ![Dion\_H](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/839c29/32.png) [@Dion\_H](https://www.ruby-forum.com/u/Dion_H)\
**Post date:** [August 29, 2006, 3:53pm UTC](https://www.ruby-forum.com/t/paypal-ipn-returns-nil/66810/3 "2006-08-29T15:53:19Z")

</div>

hi there

I set ipn.url in my controller to the test script I am using

notify.ipn\_url = ‘[http://www.eliteweaver.co.uk/cgi-bin/webscr](http://www.eliteweaver.co.uk/cgi-bin/webscr)’

how can I test line 204 http = Net::HTTP.new(uri.host, uri.port) from  
the  
console

as I suspect it is http that is nil

## notification.rb

def acknowledge  
payload = raw

```
  uri = URI.parse(self.class.ipn_url)
  request_path = "#{uri.path}?cmd=_notify-validate"

  request = Net::HTTP::Post.new(request_path)
  request['Content-Length'] = "#{payload.size}"
  request['User-Agent'] = "paypal-ruby --

```

[http://rubyforge.org/projects/paypal/](http://rubyforge.org/projects/paypal/)"

```
  http = Net::HTTP.new(uri.host, uri.port)

  http.verify_mode = OpenSSL::SSL::VERIFY_NONE unless @ssl_strict
  http.use_ssl = true

  request = http.request(request, payload)

  raise StandardError.new("Faulty paypal result: #{request.body}")

```

unless [“VERIFIED”, “INVALID”].include?(request.body)

```
  request.body == "VERIFIED"
end

```

cheers

dion

On 8/29/06, Francois B. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > ```
> > from :0
> > 
> > ```
> 
> >

–

[www.blogsaic.com](http://www.blogsaic.com)  
search, post, blog

---

<div class="post-metadata">

**Author:** ![Dion\_H](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/839c29/32.png) [@Dion\_H](https://www.ruby-forum.com/u/Dion_H)\
**Post date:** [August 29, 2006, 3:59pm UTC](https://www.ruby-forum.com/t/paypal-ipn-returns-nil/66810/4 "2006-08-29T15:59:19Z")

</div>

while evaluating this from the console, http returns false, which is why  
I  
must be getting nil

> > @notify.ipn\_url = ‘[http://www.eliteweaver.co.uk/testing/ipntest.php](http://www.eliteweaver.co.uk/testing/ipntest.php)’  
> > =\> “[http://www.eliteweaver.co.uk/testing/ipntest.php](http://www.eliteweaver.co.uk/testing/ipntest.php)”

> > uri = URI.parse(@notify.ipn\_url)  
> > =\> #\<URI::HTTP:0x1c53c50 URL:  
> > [http://www.eliteweaver.co.uk/testing/ipntest.php](http://www.eliteweaver.co.uk/testing/ipntest.php)\>

> > http = Net::HTTP.new(uri.host, uri.port)  
> > =\> #\<Net::HTTP [www.eliteweaver.co.uk:80](http://www.eliteweaver.co.uk:80) open=false\>

On 8/29/06, Dion H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> as I suspect it is http that is nil  
> request[‘Content-Length’] = “#{payload.size}”  
> raise StandardError.new(“Faulty paypal result: #{request.body}”)  
> On 8/29/06, Francois B. \< removed\_email\_address@domain.invalid\> wrote:
> 
> > > ```
> > > from (irb):107
> > > 
> > > ```
> > 
> > [http://piston.rubyforge.org/](http://piston.rubyforge.org/)
> > 
> > > >
> 
> –
> 
> [www.blogsaic.com](http://www.blogsaic.com)  
> search, post, blog

–

[www.blogsaic.com](http://www.blogsaic.com)  
search, post, blog

---

<div class="post-metadata">

**Author:** ![Dion\_H](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/d/839c29/32.png) [@Dion\_H](https://www.ruby-forum.com/u/Dion_H)\
**Post date:** [August 30, 2006, 6:07pm UTC](https://www.ruby-forum.com/t/paypal-ipn-returns-nil/66810/5 "2006-08-30T18:07:31Z")

</div>

2006/8/29, Dion H. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> > > http = Net::HTTP.new(uri.host, uri.port)  
> > > =\> #\<Net::HTTP [www.eliteweaver.co.uk:80](http://www.eliteweaver.co.uk:80) open=false\>

That only says that the connection is not open. Not that it’s false.  
You need to initiate the request. Continue testing in the console /  
irb to see where it leads you.

Sorry I can’t be more specific. You’re on the right track though.

Also, nothing prevents you from editing notification.rb and adding  
logging statements. I often do:

RAILS\_DEFAULT\_LOGGER.debug “some logging statement”

in the libraries. Since the library’s running under Rails, it  
automatically gets access to the same logger the rest of Rails is  
using.

## Bye !

FranÃ§ois Beausoleil  
[http://blog.teksol.info/](http://blog.teksol.info/)  
[http://piston.rubyforge.org/](http://piston.rubyforge.org/)
