When I started working on the Paypal Mass API I found very few resources on it. So Im guessing this might serve as a useful guide for people starting off.
This post only describes the setting up of the payment module and sending the data to paypal. Hope this is useful.
Please correct me if there are any glaring mistakes in my sample code.
require 'net/http' require 'open-uri' require "system_timer" module PayExpert PAYPAL_END_POINT_URL_TEST = "https://api-3t.sandbox.paypal.com/nvp" LOGIN = URI.escape("XXXXXXXXXX") PASSWORD = URI.escape("XXXXXXXX") SIGNATURE = URI.escape("xXXXXXXXXXXXXXXXXXXXXXXXXX") # needs an array of hashes to be passed as the users list # ------------------------Example------------------------------------------------ #user_1 = {:email=>"buyer_1254479426_per_1257321861_per@XXXXX.com", # :amount=>10, :unique_id=>"020484", :note=>"Heres your money"} #user_2={:email=>"buyer2_1254493228_per@XXXXX.com", :amount=>10, # :unique_id=>"270484", :note=>"more money for you"} #user_list = [user_1, user_2] #setup_payment (user_list) #---------------------------------------------------------------------------------- def setup_payment(user_list) response = nil header = {"Content-Type"=>"application/x-www-form-urlencoded"} email_subject = URI.escape("Payment Notification") receiver_type =URI.escape("EmailAddress") currency = URI.escape("USD") version = URI.escape("56") method =URI.escape("MassPay") end_point_url = paypal_end_point user_information = payable_expert_info(user_list) final_url_string = "#{end_point_url}?METHOD=#{method}" + "&PWD=#{PASSWORD}" + "&USER=#{LOGIN}" + "&SIGNATURE=#{SIGNATURE}"+ "&VERSION=#{version}"+ "&EMAILSUBJECT=#{email_subject}"+ "&CURRENCYCODE=#{currency}"+ "&RECEIVERTYPE=#{receiver_type}"+ "#{user_information}" SystemTimer.timeout_after(20.seconds) do response = open(final_url_string) end rescue OpenURI::HTTPError => error status_code = error.io.status[0] RAILS_DEFAULT_LOGGER.debug "[ERROR][Paypal] #{error.message } : #{error.backtrace} " rescue Timeout::Error=>time_out_error RAILS_DEFAULT_LOGGER.debug "[ERROR][Timeout Error] #{time_out_error.message} : #{time_out_error.backtrace}" rescue =>err RAILS_DEFAULT_LOGGER.debug "[ERROR][Something went wrong] #{err.message} : #{err.backtrace}" end #accepts an array of hash def payable_info(user_values) final_url_string="" array_size = user_values.size - 1 0.upto(array_size) do |index| final_url_string += "&L_EMAIL" + index.to_s + "=#{URI.escape(user_values[index][:email])}" final_url_string += "&L_AMT" + index.to_s + "=#{(user_values[index][:amount])}" final_url_string += "&L_UNIQUEID" + index.to_s + "=#{URI.escape(user_values[index][:unique_id])}" final_url_string += "&L_NOTE" + index.to_s + "=#{URI.escape(user_values[index][:note])}" end final_url_string end # defines the paypal_end_point def paypal_end_point (ENV['RAILS_ENV'] == 'development') ? PAYPAL_END_POINT_URL_TEST : "something else" end end
Filed under: API, Paypal Mass Pay Api, Rails, Ruby Tagged: Ruby Rails Paypal Mass Pay API