A simple ruby wrapper for paypal.
Currently paypal supports the following:
- Verifying Paypal IPN's
- MassPay Requests
- Permissions Service
- Authentication Service
Paypal.setup do |config|
config.environment = "sandbox" # replace with "live" in production
config.api_username = "Replace me with your api username"
config.api_password = "Replace me with your api password"
config.api_signature = "Replace me with your api signature"
end
class PaypalIpn
include Paypal::Ipn
attr_accessor :params
end
Note: Your class must respond to params
and return a hash of paypal ipn parameters
payment_completed?
payment_status
txn_id
verify
Verifies the IPN with paypal and returns true or falsereceiver_email
self.txn_type(params)
self.masspay_transaction?(params)
class BuyerPaypalIpn
include Paypal::Ipn::Buyer
attr_accessor :params
end
customer_address
Convienence method. e.g. John Smith, 5 Some Street, Some City, Some State, Australia 1234customer_address_name
customer_address_street
customer_address_city
customer_address_state
customer_address_zip
customer_address_country
class ItemPaypalIpn
include Paypal::Ipn::Item
attr_accessor :params
end
item_name(index = nil)
If index is supplied it will return item_name#index otherwise simply item_nameitem_number(index = nil)
item_quantity(index = nil)
number_of_cart_items
class MasspayPaypalIpn
include Paypal::Ipn::Masspay
attr_accessor :params
end
Note: Currently Masspay IPN's only support a single transaction
payment_status
Returns the payment status for the 1st transactiontxn_id
Returns the transaction id for the 1st transactionpayment_unclaimed?
Returns whether the payment status for the 1st transaction was unclaimed or not
unique_id
Returns the unique_id for the 1st transaction
class Masspay
include Paypal::Masspay
attr_accessor :payment_response
end
Note: Your class must respond to payment_response
and return the payment response as a hash
successful_payment?
Returns whether the masspay request was successful or not. Note: This only tells you if the request was successful or not. You should wait for an IPN to verify the receiver has been paid.
-
masspay(payer_email, receiver_email, amount, currency, note, unique_id)
Sends a mass pay request from payer_email to receiver_email for amount in currency. The note will appear on the receivers paypal account and the unique_id will be passed back in the Paypal IPN. Returns the response from paypal. -
payment_error_type
Returns :unauthorized or :insufficient_funds for these types of errors otherwise returns :unknown -
payment_error_message
Returns the paypal long error message
Note: Currently Masspay payments only support a single recipient
class Permissions
include Paypal::Permissions
end
-
Make a call to
set_paypal_permissions_url
setting the return_url to your application's callback url and with your required_permissions -
Redirect the user to that url
-
When Paypal redirects the user back to your application at return_url make a call to
get_paypal_permissions
with the token parameter
See below for further details:
set_paypal_permissions_url(return_url, required_permissions = {})
Returns a url where the user can sign in to Paypal and authorize the requested permissions. Paypal will then redirect the user to the return_url. Specify required_permissions by supplying a hash in the following format:
{
:mass_pay => true,
:refund_transaction => true,
:get_transaction_details => true
}
First name, Last name and email are always required permissions so you never have to specify these manually.
get_paypal_permissions(token)
Returns a hash of user information and permission details for the given token in the following format:
{
:email => "joe@example.com",
:first_name => "Joe",
:last_name => "Bloggs",
:payer_id => "VK7XZU4BDY79",
:permissions => {
:mass_pay => true,
:refund_transaction => true,
:get_transaction_details => true
}
}
gem install paypal-ipn
Place the following in your Gemfile:
gem 'paypal-ipn', :require => 'paypal'
To generate a stub initializer under config/initializers run:
rails g paypal:initializer
Copyright (c) 2010 David Wilkie, released under the MIT license