paypal-payment 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. data/.gitignore +19 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +18 -0
  4. data/Guardfile +24 -0
  5. data/README.rdoc +107 -0
  6. data/Rakefile +5 -0
  7. data/docs/AdaptivePayments.rdoc +84 -0
  8. data/docs/PP_NVPAPI_DeveloperGuide.pdf +0 -0
  9. data/docs/PP_WPP_IntegrationGuide.pdf +0 -0
  10. data/docs/adaptive_payments.md +55 -0
  11. data/docs/api.txt +67 -0
  12. data/docs/design.txt +38 -0
  13. data/docs/express_checkout.md +172 -0
  14. data/docs/requirements.txt +32 -0
  15. data/lib/paypal-payment.rb +10 -0
  16. data/lib/paypal/adaptive_payments.rb +31 -0
  17. data/lib/paypal/adaptive_payments/api.rb +51 -0
  18. data/lib/paypal/adaptive_payments/base.rb +11 -0
  19. data/lib/paypal/adaptive_payments/client_details.rb +14 -0
  20. data/lib/paypal/adaptive_payments/display_options.rb +10 -0
  21. data/lib/paypal/adaptive_payments/funding_constraint.rb +11 -0
  22. data/lib/paypal/adaptive_payments/funding_type_info.rb +8 -0
  23. data/lib/paypal/adaptive_payments/funding_type_list.rb +11 -0
  24. data/lib/paypal/adaptive_payments/initiating_entity.rb +11 -0
  25. data/lib/paypal/adaptive_payments/institution_customer.rb +13 -0
  26. data/lib/paypal/adaptive_payments/invoice_data.rb +13 -0
  27. data/lib/paypal/adaptive_payments/invoice_item.rb +11 -0
  28. data/lib/paypal/adaptive_payments/payment.rb +105 -0
  29. data/lib/paypal/adaptive_payments/payment_info.rb +18 -0
  30. data/lib/paypal/adaptive_payments/payment_info_list.rb +11 -0
  31. data/lib/paypal/adaptive_payments/payment_options.rb +39 -0
  32. data/lib/paypal/adaptive_payments/phone.rb +9 -0
  33. data/lib/paypal/adaptive_payments/preapproval.rb +52 -0
  34. data/lib/paypal/adaptive_payments/receiver.rb +17 -0
  35. data/lib/paypal/adaptive_payments/receiver_list.rb +49 -0
  36. data/lib/paypal/adaptive_payments/receiver_options.rb +19 -0
  37. data/lib/paypal/adaptive_payments/request.rb +51 -0
  38. data/lib/paypal/adaptive_payments/response.rb +38 -0
  39. data/lib/paypal/adaptive_payments/response/address.rb +13 -0
  40. data/lib/paypal/adaptive_payments/response/address_list.rb +11 -0
  41. data/lib/paypal/adaptive_payments/response/base_address.rb +13 -0
  42. data/lib/paypal/adaptive_payments/response/details.rb +19 -0
  43. data/lib/paypal/adaptive_payments/response/error_list.rb +15 -0
  44. data/lib/paypal/adaptive_payments/response/pay.rb +31 -0
  45. data/lib/paypal/adaptive_payments/response/pay_error.rb +16 -0
  46. data/lib/paypal/adaptive_payments/response/pay_error_list.rb +15 -0
  47. data/lib/paypal/adaptive_payments/response/pay_options.rb +7 -0
  48. data/lib/paypal/adaptive_payments/response/preapproval.rb +47 -0
  49. data/lib/paypal/adaptive_payments/response/refund.rb +16 -0
  50. data/lib/paypal/adaptive_payments/response/refund_info.rb +24 -0
  51. data/lib/paypal/adaptive_payments/response/refund_info_list.rb +11 -0
  52. data/lib/paypal/adaptive_payments/response/shipping_address.rb +11 -0
  53. data/lib/paypal/adaptive_payments/sender_identifier.rb +7 -0
  54. data/lib/paypal/adaptive_payments/sender_options.rb +8 -0
  55. data/lib/paypal/api.rb +94 -0
  56. data/lib/paypal/cacert.pem +3987 -0
  57. data/lib/paypal/common.rb +11 -0
  58. data/lib/paypal/common/base.rb +83 -0
  59. data/lib/paypal/common/error_data.rb +15 -0
  60. data/lib/paypal/common/request.rb +45 -0
  61. data/lib/paypal/common/request_envelope.rb +13 -0
  62. data/lib/paypal/common/response.rb +34 -0
  63. data/lib/paypal/common/response_envelope.rb +19 -0
  64. data/lib/paypal/express_checkout.rb +19 -0
  65. data/lib/paypal/express_checkout/account.rb +16 -0
  66. data/lib/paypal/express_checkout/api.rb +43 -0
  67. data/lib/paypal/express_checkout/base.rb +37 -0
  68. data/lib/paypal/express_checkout/billing.rb +7 -0
  69. data/lib/paypal/express_checkout/callback.rb +17 -0
  70. data/lib/paypal/express_checkout/checkout.rb +144 -0
  71. data/lib/paypal/express_checkout/fields.rb +449 -0
  72. data/lib/paypal/express_checkout/fmf.rb +7 -0
  73. data/lib/paypal/express_checkout/payment.rb +76 -0
  74. data/lib/paypal/express_checkout/payment_item.rb +7 -0
  75. data/lib/paypal/express_checkout/recurring.rb +131 -0
  76. data/lib/paypal/express_checkout/request.rb +212 -0
  77. data/lib/paypal/express_checkout/response.rb +52 -0
  78. data/lib/paypal/express_checkout/response/account.rb +30 -0
  79. data/lib/paypal/express_checkout/response/address.rb +29 -0
  80. data/lib/paypal/express_checkout/response/authorization.rb +25 -0
  81. data/lib/paypal/express_checkout/response/base.rb +125 -0
  82. data/lib/paypal/express_checkout/response/callback_request.rb +10 -0
  83. data/lib/paypal/express_checkout/response/callback_response.rb +8 -0
  84. data/lib/paypal/express_checkout/response/capture.rb +14 -0
  85. data/lib/paypal/express_checkout/response/checkout.rb +11 -0
  86. data/lib/paypal/express_checkout/response/details.rb +35 -0
  87. data/lib/paypal/express_checkout/response/manage_profile.rb +9 -0
  88. data/lib/paypal/express_checkout/response/notification.rb +85 -0
  89. data/lib/paypal/express_checkout/response/payment.rb +24 -0
  90. data/lib/paypal/express_checkout/response/profile.rb +58 -0
  91. data/lib/paypal/express_checkout/response/reference.rb +11 -0
  92. data/lib/paypal/express_checkout/response/refund.rb +13 -0
  93. data/lib/paypal/express_checkout/response/search.rb +33 -0
  94. data/lib/paypal/express_checkout/response/transaction_details.rb +11 -0
  95. data/lib/paypal/express_checkout/shipping_option.rb +7 -0
  96. data/lib/paypal/express_checkout/utils.rb +26 -0
  97. data/lib/paypal/express_checkout/version.rb +10 -0
  98. data/lib/paypal/invoice.rb +22 -0
  99. data/lib/paypal/invoice/api.rb +51 -0
  100. data/lib/paypal/invoice/base.rb +11 -0
  101. data/lib/paypal/invoice/base_address.rb +11 -0
  102. data/lib/paypal/invoice/business_info.rb +17 -0
  103. data/lib/paypal/invoice/date_range.rb +8 -0
  104. data/lib/paypal/invoice/invoice.rb +117 -0
  105. data/lib/paypal/invoice/invoice_details.rb +38 -0
  106. data/lib/paypal/invoice/invoice_item.rb +13 -0
  107. data/lib/paypal/invoice/invoice_item_list.rb +10 -0
  108. data/lib/paypal/invoice/invoice_summary.rb +22 -0
  109. data/lib/paypal/invoice/invoice_summary_list.rb +10 -0
  110. data/lib/paypal/invoice/other_payment_details.rb +13 -0
  111. data/lib/paypal/invoice/payment_details.rb +16 -0
  112. data/lib/paypal/invoice/paypal_payment_details.rb +11 -0
  113. data/lib/paypal/invoice/request.rb +43 -0
  114. data/lib/paypal/invoice/response.rb +27 -0
  115. data/lib/paypal/invoice/response/details.rb +23 -0
  116. data/lib/paypal/invoice/response/invoice.rb +10 -0
  117. data/lib/paypal/invoice/response/search.rb +15 -0
  118. data/lib/paypal/invoice/search.rb +19 -0
  119. data/lib/paypal/invoice/search_parameters.rb +20 -0
  120. data/lib/paypal/permissions.rb +12 -0
  121. data/lib/paypal/permissions/api.rb +60 -0
  122. data/lib/paypal/permissions/base.rb +11 -0
  123. data/lib/paypal/permissions/permission.rb +33 -0
  124. data/lib/paypal/permissions/personal_data.rb +17 -0
  125. data/lib/paypal/permissions/request.rb +52 -0
  126. data/lib/paypal/permissions/response.rb +24 -0
  127. data/lib/paypal/permissions/response/permission.rb +14 -0
  128. data/lib/paypal/permissions/response/personal_data.rb +8 -0
  129. data/lib/paypal/permissions/response/token.rb +10 -0
  130. data/lib/paypal/permissions/token.rb +13 -0
  131. data/lib/paypal/recurring.rb +110 -0
  132. data/lib/paypal/request.rb +82 -0
  133. data/lib/paypal/version.rb +8 -0
  134. data/paypal-payment.gemspec +30 -0
  135. data/spec/fixtures/adaptive_payments/payment/create/failure.yml +62 -0
  136. data/spec/fixtures/adaptive_payments/payment/create/success.yml +58 -0
  137. data/spec/fixtures/adaptive_payments/payment/details/success.yml +113 -0
  138. data/spec/fixtures/adaptive_payments/payment/pay/failure.yml +62 -0
  139. data/spec/fixtures/adaptive_payments/payment/pay/preapproval.yml +58 -0
  140. data/spec/fixtures/adaptive_payments/payment/pay/success.yml +58 -0
  141. data/spec/fixtures/adaptive_payments/payment/pay/with_pay_key.yml +58 -0
  142. data/spec/fixtures/adaptive_payments/payment/refund/failure.yml +62 -0
  143. data/spec/fixtures/adaptive_payments/payment/refund/success.yml +58 -0
  144. data/spec/fixtures/adaptive_payments/payment/shipping_addresses/success.yml +113 -0
  145. data/spec/fixtures/adaptive_payments/payment_options/get/success.yml +174 -0
  146. data/spec/fixtures/adaptive_payments/payment_options/set/success.yml +113 -0
  147. data/spec/fixtures/adaptive_payments/preapproval/create/success.yml +58 -0
  148. data/spec/fixtures/adaptive_payments/preapproval/details/success.yml +168 -0
  149. data/spec/fixtures/express_checkout/account/balance/success.yml +32 -0
  150. data/spec/fixtures/express_checkout/account/pal_details/success.yml +32 -0
  151. data/spec/fixtures/express_checkout/checkout/checkout/sales/success.yml +61 -0
  152. data/spec/fixtures/express_checkout/checkout/checkout/success.yml +32 -0
  153. data/spec/fixtures/express_checkout/checkout/details/failure.yml +32 -0
  154. data/spec/fixtures/express_checkout/checkout/details/success.yml +61 -0
  155. data/spec/fixtures/express_checkout/checkout/pay/sales/success.yml +61 -0
  156. data/spec/fixtures/express_checkout/checkout/pay/success.yml +61 -0
  157. data/spec/fixtures/express_checkout/payment/details/failure.yml +32 -0
  158. data/spec/fixtures/express_checkout/payment/details/success.yml +32 -0
  159. data/spec/fixtures/express_checkout/payment/refund/failure.yml +32 -0
  160. data/spec/fixtures/express_checkout/payment/refund/success.yml +32 -0
  161. data/spec/fixtures/express_checkout/payment/search/success.yml +32 -0
  162. data/spec/fixtures/express_checkout/recurring/cancel/failure.yml +32 -0
  163. data/spec/fixtures/express_checkout/recurring/cancel/success.yml +32 -0
  164. data/spec/fixtures/express_checkout/recurring/checkout/success.yml +32 -0
  165. data/spec/fixtures/express_checkout/recurring/create_profile/failure.yml +32 -0
  166. data/spec/fixtures/express_checkout/recurring/create_profile/success.yml +61 -0
  167. data/spec/fixtures/express_checkout/recurring/profile/failure.yml +32 -0
  168. data/spec/fixtures/express_checkout/recurring/profile/success.yml +32 -0
  169. data/spec/fixtures/express_checkout/recurring/reactivate/failure.yml +32 -0
  170. data/spec/fixtures/express_checkout/recurring/reactivate/success.yml +32 -0
  171. data/spec/fixtures/express_checkout/recurring/suspend/failure.yml +32 -0
  172. data/spec/fixtures/express_checkout/recurring/suspend/success.yml +32 -0
  173. data/spec/fixtures/express_checkout/recurring/update_profile/failure.yml +32 -0
  174. data/spec/fixtures/express_checkout/recurring/update_profile/profile.yml +32 -0
  175. data/spec/fixtures/express_checkout/recurring/update_profile/success.yml +32 -0
  176. data/spec/fixtures/invoice/cancel/success.yml +174 -0
  177. data/spec/fixtures/invoice/create/failure.yml +62 -0
  178. data/spec/fixtures/invoice/create/success.yml +60 -0
  179. data/spec/fixtures/invoice/create_and_send/failure.yml +62 -0
  180. data/spec/fixtures/invoice/create_and_send/success.yml +60 -0
  181. data/spec/fixtures/invoice/details/success.yml +117 -0
  182. data/spec/fixtures/invoice/mark_as_paid/failure.yml +180 -0
  183. data/spec/fixtures/invoice/mark_as_paid/success.yml +174 -0
  184. data/spec/fixtures/invoice/mark_as_refunded/success.yml +174 -0
  185. data/spec/fixtures/invoice/mark_as_unpaid/success.yml +231 -0
  186. data/spec/fixtures/invoice/search/success.yml +174 -0
  187. data/spec/fixtures/invoice/send/success.yml +117 -0
  188. data/spec/fixtures/invoice/update/failure.yml +119 -0
  189. data/spec/fixtures/invoice/update/success.yml +117 -0
  190. data/spec/fixtures/ipn/express_checkout.json +35 -0
  191. data/spec/fixtures/ipn/recurring_payment.json +44 -0
  192. data/spec/fixtures/ipn/recurring_payment_profile_created.json +31 -0
  193. data/spec/fixtures/ipn/recurring_payment_profile_created_with_initial_amount.json +33 -0
  194. data/spec/fixtures/ipn/recurring_payment_skipped.json +30 -0
  195. data/spec/fixtures/ipn/recurring_payment_with_initial_amount.json +44 -0
  196. data/spec/fixtures/notification/failure.yml +50 -0
  197. data/spec/fixtures/notification/success.yml +50 -0
  198. data/spec/paypal/adaptive_payments/api_spec.rb +20 -0
  199. data/spec/paypal/adaptive_payments/payment/base_spec.rb +28 -0
  200. data/spec/paypal/adaptive_payments/payment/create_spec.rb +63 -0
  201. data/spec/paypal/adaptive_payments/payment/details_spec.rb +34 -0
  202. data/spec/paypal/adaptive_payments/payment/pay_spec.rb +97 -0
  203. data/spec/paypal/adaptive_payments/payment/refund_spec.rb +49 -0
  204. data/spec/paypal/adaptive_payments/payment/shipping_addresses_spec.rb +30 -0
  205. data/spec/paypal/adaptive_payments/payment_options/get_spec.rb +33 -0
  206. data/spec/paypal/adaptive_payments/payment_options/set_spec.rb +66 -0
  207. data/spec/paypal/adaptive_payments/preapproval/cancel_spec.rb +34 -0
  208. data/spec/paypal/adaptive_payments/preapproval/create_spec.rb +39 -0
  209. data/spec/paypal/adaptive_payments/preapproval/details_spec.rb +34 -0
  210. data/spec/paypal/adaptive_payments/request_spec.rb +48 -0
  211. data/spec/paypal/api_spec.rb +78 -0
  212. data/spec/paypal/common/base_spec.rb +157 -0
  213. data/spec/paypal/common/error_data_spec.rb +0 -0
  214. data/spec/paypal/common/request_envelope_spec.rb +6 -0
  215. data/spec/paypal/common/response_spec.rb +0 -0
  216. data/spec/paypal/express_checkout/account/balance_spec.rb +25 -0
  217. data/spec/paypal/express_checkout/account/pal_details_spec.rb +20 -0
  218. data/spec/paypal/express_checkout/checkout/checkout_spec.rb +73 -0
  219. data/spec/paypal/express_checkout/checkout/details_spec.rb +70 -0
  220. data/spec/paypal/express_checkout/checkout/pay_spec.rb +68 -0
  221. data/spec/paypal/express_checkout/fields_spec.rb +138 -0
  222. data/spec/paypal/express_checkout/payment/refund_spec.rb +34 -0
  223. data/spec/paypal/express_checkout/payment/search_spec.rb +24 -0
  224. data/spec/paypal/express_checkout/payment/transaction_details_spec.rb +30 -0
  225. data/spec/paypal/express_checkout/payment_spec.rb +13 -0
  226. data/spec/paypal/express_checkout/recurring/create_profile_spec.rb +50 -0
  227. data/spec/paypal/express_checkout/recurring/manage_profile_spec.rb +62 -0
  228. data/spec/paypal/express_checkout/recurring/profile_spec.rb +44 -0
  229. data/spec/paypal/express_checkout/recurring/update_profile_spec.rb +50 -0
  230. data/spec/paypal/express_checkout/request_spec.rb +221 -0
  231. data/spec/paypal/express_checkout/response/account_spec.rb +33 -0
  232. data/spec/paypal/express_checkout/response/base_spec.rb +253 -0
  233. data/spec/paypal/invoice/cancel_spec.rb +38 -0
  234. data/spec/paypal/invoice/create_and_send_spec.rb +58 -0
  235. data/spec/paypal/invoice/create_spec.rb +58 -0
  236. data/spec/paypal/invoice/details_spec.rb +39 -0
  237. data/spec/paypal/invoice/mark_as_paid_spec.rb +75 -0
  238. data/spec/paypal/invoice/mark_as_refunded_spec.rb +47 -0
  239. data/spec/paypal/invoice/mark_as_unpaid_spec.rb +43 -0
  240. data/spec/paypal/invoice/search_spec.rb +70 -0
  241. data/spec/paypal/invoice/send_spec.rb +48 -0
  242. data/spec/paypal/invoice/update_spec.rb +72 -0
  243. data/spec/paypal/request_spec.rb +45 -0
  244. data/spec/spec_helper.rb +35 -0
  245. metadata +546 -0
@@ -0,0 +1,19 @@
1
+ .DS_Store
2
+ pkg
3
+ tmp
4
+ examples
5
+ .bundle
6
+ db/*.sqlite3*
7
+ log/*.log
8
+ *.log
9
+ tmp/**/*
10
+ tmp/*
11
+ doc/api
12
+ doc/app
13
+ *.swp
14
+ *~
15
+ .DS_Store
16
+ .rvmrc
17
+ Gemfile.lock
18
+ .ruby-version
19
+ .rbenv-version
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color --format documentation
data/Gemfile ADDED
@@ -0,0 +1,18 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gem 'curb'
4
+ gem 'oj'
5
+ gem 'multi_json'
6
+
7
+ group :development, :test do
8
+ gem 'rspec'
9
+ gem 'guard-rspec'
10
+ gem 'rb-fsevent', '~> 0.9'
11
+ gem 'rake'
12
+ gem 'vcr'
13
+ gem 'fakeweb'
14
+ gem 'webmock', '1.8.11'
15
+ gem 'pry'
16
+ gem 'awesome_print'
17
+ gem 'activesupport'
18
+ end
@@ -0,0 +1,24 @@
1
+ # A sample Guardfile
2
+ # More info at https://github.com/guard/guard#readme
3
+
4
+ guard 'rspec', :version => 2 do
5
+ watch(%r{^spec/.+_spec\.rb$})
6
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
+ watch('spec/spec_helper.rb') { "spec" }
8
+
9
+ # Rails example
10
+ watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
11
+ watch(%r{^app/(.*)(\.erb|\.haml)$}) { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
12
+ watch(%r{^app/controllers/(.+)_(controller)\.rb$}) { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
13
+ watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
+ watch('config/routes.rb') { "spec/routing" }
15
+ watch('app/controllers/application_controller.rb') { "spec/controllers" }
16
+
17
+ # Capybara request specs
18
+ watch(%r{^app/views/(.+)/.*\.(erb|haml)$}) { |m| "spec/requests/#{m[1]}_spec.rb" }
19
+
20
+ # Turnip features and steps
21
+ watch(%r{^spec/acceptance/(.+)\.feature$})
22
+ watch(%r{^spec/acceptance/steps/(.+)_steps\.rb$}) { |m| Dir[File.join("**/#{m[1]}.feature")][0] || 'spec/acceptance' }
23
+ end
24
+
@@ -0,0 +1,107 @@
1
+ = PayPal Payment
2
+
3
+ PayPal API Client for Adaptive Payments, Invoice and Express Checkout.
4
+
5
+ == Installation (Gemfile)
6
+
7
+ gem 'paypal-payment', :git => 'https://github.com/chardy/paypal-payment.git'
8
+
9
+ == Usage
10
+
11
+ First, you need to set up your credentials:
12
+
13
+ require "paypal-payment"
14
+
15
+ PayPal::Api.configure do |config|
16
+ config.sandbox = true
17
+ config.username = "chardy_api1.gmail.com"
18
+ config.password = "8DTSWBZC7GDR3T4X"
19
+ config.signature = "AG-8mOpuFhFyFOYHlaTUYn3Syf15AWJKRnfHMVsmCtC3DK51-ENEPqLS"
20
+ end
21
+
22
+ == Adaptive Payments
23
+
24
+ You can request a new preapproval authorization:
25
+ pa = PayPal::AdaptivePayments::Preapproval.new(
26
+ :client_details => {
27
+ :ip_address => "234.8.8.18",
28
+ :device_id => "123456",
29
+ :application_id => "PP"
30
+ },
31
+ :starting_date => Date.today,
32
+ :currency_code => 'USD',
33
+ :max_total_amount_of_all_payments => 2000.0,
34
+ :cancel_url => 'http://yoursite.com/preapproval/cancel?preapprovalkey=${preapprovalkey}',
35
+ :return_url => 'http://yoursite.com/preapproval/accepted?preapprovalkey=${preapprovalkey}'
36
+ )
37
+
38
+ response = pa.create
39
+ puts response.preapproval_url if response.valid?
40
+
41
+ You need to redirect your user to the url returned by <tt>response.approval_url</tt>.
42
+ After the user accepts or rejects your preapproval request, he will be redirected to one of those urls you specified.
43
+ Note that you need to append "preapprovalkey=${preapprovalkey}" to the urls if you want PayPal to redirect with preapprovalkey
44
+ You can use the <tt>preapprovalkey</tt> parameter to query for the approval details.
45
+
46
+ If you need to retrieve information about your buyer, like address or e-mail, you can use the
47
+ <tt>details()</tt> method.
48
+
49
+ pa = PayPal::AdaptivePayments::Preapproval.new(:preapproval_key => "PA-89578182UL033944H")
50
+ response = pa.details
51
+
52
+ When you need to request payment, create a new Payment with the preapproval key.
53
+
54
+ pp = PayPal::AdaptivePayments::Payment.new(
55
+ :preapproval_key => "PA-89578182UL033944H",
56
+ :receiver => {:email => "seller@example.com", :amount => 10.0},
57
+ :currency_code => 'USD',
58
+ :cancel_url => 'http://example.com/cancel',
59
+ :return_url => 'http://example.com/thank_you'
60
+ )
61
+
62
+ response = pp.pay
63
+ response.success?
64
+ response.completed?
65
+
66
+ You can manage your preapproval.
67
+
68
+ pa = PayPal::AdaptivePayments::Preapproval.new(:preapproval_key => "PA-89578182UL033944H")
69
+ pa.cancel
70
+
71
+ === What information do I need to keep?
72
+
73
+ You should save two paramaters to your database: <tt>TOKEN</tt> and <tt>PROFILEID</tt>.
74
+ <tt>TOKEN</tt> is required when user returns to your website after he authorizes (or not) the billing process. You
75
+ need to save it so you can find him later. You can remove this info after payment and recurring profile are set.
76
+
77
+ The <tt>PROFILEID</tt> allows you to manage the recurring profile, like cancelling billing when an user don't
78
+ want to use your service anymore.
79
+
80
+ <b>NOTE:</b> TOKEN will expire after approximately 3 hours.
81
+
82
+ == Maintainer
83
+
84
+ * Chardy Wang
85
+
86
+ == License
87
+
88
+ (The MIT License)
89
+
90
+ Permission is hereby granted, free of charge, to any person obtaining
91
+ a copy of this software and associated documentation files (the
92
+ 'Software'), to deal in the Software without restriction, including
93
+ without limitation the rights to use, copy, modify, merge, publish,
94
+ distribute, sublicense, and/or sell copies of the Software, and to
95
+ permit persons to whom the Software is furnished to do so, subject to
96
+ the following conditions:
97
+
98
+ The above copyright notice and this permission notice shall be
99
+ included in all copies or substantial portions of the Software.
100
+
101
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
102
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
103
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
104
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
105
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
106
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
107
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,5 @@
1
+ require "bundler"
2
+ Bundler::GemHelper.install_tasks
3
+
4
+ require "rspec/core/rake_task"
5
+ RSpec::Core::RakeTask.new
@@ -0,0 +1,84 @@
1
+ = PayPal Payment
2
+
3
+ PayPal API Client for Adaptive Payments, Invoice and Express Checkout.
4
+
5
+ == Installation (Gemfile)
6
+
7
+ gem 'paypal-payment', :git => 'git://vendor@appcepted.com:/home/vendor/pp_paypal'
8
+
9
+ == Usage
10
+
11
+ First, you need to set up your credentials:
12
+
13
+ require "paypal-payment"
14
+
15
+ PayPal::Api.configure do |config|
16
+ config.sandbox = true
17
+ config.username = "chardy_api1.gmail.com"
18
+ config.password = "8DTSWBZC7GDR3T4X"
19
+ config.signature = "AG-8mOpuFhFyFOYHlaTUYn3Syf15AWJKRnfHMVsmCtC3DK51-ENEPqLS"
20
+ end
21
+
22
+ == Adaptive Payments
23
+
24
+ You can request a new preapproval authorization:
25
+ pa = PayPal::AdaptivePayments::Preapproval.new(
26
+ :client_details => {
27
+ :ip_address => "234.8.8.18",
28
+ :device_id => "123456",
29
+ :application_id => "PP"
30
+ },
31
+ :starting_date => Date.today,
32
+ :currency_code => 'USD',
33
+ :max_total_amount_of_all_payments => 2000.0,
34
+ :cancel_url => 'http://yoursite.com/preapproval/cancel?preapprovalkey=${preapprovalkey}',
35
+ :return_url => 'http://yoursite.com/preapproval/accepted?preapprovalkey=${preapprovalkey}'
36
+ )
37
+
38
+ response = pa.create
39
+ puts response.approval_url if response.valid?
40
+
41
+ You need to redirect your user to the url returned by <tt>response.approval_url</tt>.
42
+ After the user accepts or rejects your preapproval request, he will be redirected to one of those urls you specified.
43
+ Note that you need to append "preapprovalkey=${preapprovalkey}" to the urls if you want PayPal to redirect with preapprovalkey
44
+ You can use the <tt>preapprovalkey</tt> parameter to query for the approval details.
45
+
46
+ If you need to retrieve information about your buyer, like address or e-mail, you can use the
47
+ <tt>details()</tt> method.
48
+
49
+ pa = PayPal::AdaptivePayments::Preapproval.new(:preapproval_key => "PA-89578182UL033944H")
50
+ response = pa.details
51
+
52
+ When you need to request payment, create a new Payment with the preapproval key.
53
+
54
+ pp = PayPal::AdaptivePayments::Payment.new(
55
+ :preapproval_key => "PA-89578182UL033944H",
56
+ :receiver => {:email => "seller@example.com", :amount => 10.0},
57
+ :currency_code => 'USD',
58
+ :cancel_url => 'http://example.com/cancel',
59
+ :return_url => 'http://example.com/thank_you'
60
+ )
61
+
62
+ response = pp.pay
63
+ response.success?
64
+ response.completed?
65
+
66
+ You can manage your preapproval.
67
+
68
+ pa = PayPal::AdaptivePayments::Preapproval.new(:preapproval_key => "PA-89578182UL033944H")
69
+ pa.cancel
70
+
71
+ === What information do I need to keep?
72
+
73
+ You should save two paramaters to your database: <tt>TOKEN</tt> and <tt>PROFILEID</tt>.
74
+ <tt>TOKEN</tt> is required when user returns to your website after he authorizes (or not) the billing process. You
75
+ need to save it so you can find him later. You can remove this info after payment and recurring profile are set.
76
+
77
+ The <tt>PROFILEID</tt> allows you to manage the recurring profile, like cancelling billing when an user don't
78
+ want to use your service anymore.
79
+
80
+ <b>NOTE:</b> TOKEN will expire after approximately 3 hours.
81
+
82
+ == Maintainer
83
+
84
+ * Chardy Wang
@@ -0,0 +1,55 @@
1
+ # How to Set Up a Payment Preapproval Using Adaptive Payments
2
+
3
+ https://www.x.com/developers/paypal/documentation-tools/adaptive-payments/how-to/ht_ap-basicPreapproval-curl-etc
4
+
5
+ Setting up a payment preapproval using Adaptive Payments requires:
6
+
7
+ 1. Setting up the preapproval.
8
+ 2. Redirecting the customer to PayPal for authorization.
9
+ 3. Optionally, retrieving data about the preapproval.
10
+ 4. Optionally, capturing a future payment.
11
+
12
+ When you use Adaptive Payments to set up payment preapprovals, the payment amounts can vary frequently.
13
+
14
+ Step 1: Set Up the Preapproval
15
+
16
+ pp = PayPal::AdaptivePayments::Preapproval.new(
17
+ :starting_date => Date.today,
18
+ :ending_date => Date.today >> 12,
19
+ :max_amount_per_payment => 35.0,
20
+ :max_number_of_payments => 20,
21
+ :max_total_amount_of_all_payments => 2000.0,
22
+ :cancel_url => 'http://www.yourdomain.com/success.html',
23
+ :return_url => 'http://www.yourdomain.com/cancel.html',
24
+ :currency_code => 'USD'
25
+ )
26
+
27
+ response = pp.create
28
+
29
+ Step 2: Redirect the Customer to PayPal for Authorization
30
+
31
+ To get the preapproval url
32
+
33
+ response.preapproval_url
34
+
35
+ Step 3: Retrieve Data about the Preapproval (Optional)
36
+
37
+ details = pp.details
38
+
39
+ Or
40
+
41
+ details = PayPal::AdaptivePayments::Preapproval.new(:preapproval_key => pp.preapproval_key).details
42
+
43
+ Step 4: Capture a Future Payment (Optional)
44
+
45
+ pp = PayPal::AdaptivePayments::Payment.new(
46
+ :preapproval_key => preapproval_key,
47
+ :receiver => { :amount => 10.0, :email => "test@example.com" },
48
+ :currency_code => 'USD',
49
+ :cancel_url => 'http://www.yourdomain.com/success.html',
50
+ :return_url => 'http://www.yourdomain.com/cancel.html'
51
+ )
52
+
53
+ pp.pay
54
+
55
+
@@ -0,0 +1,67 @@
1
+ Express Checkout
2
+ ================
3
+
4
+ Implemented
5
+ ===========
6
+ AddressVerify
7
+ BillOutstandingAmount
8
+ DoAuthorization
9
+ DoCapture
10
+ DoReauthorization
11
+ DoVoid
12
+ GetPalDetails
13
+ GetBalance
14
+ ManagePendingTransactionStatus
15
+ TransactionSearch
16
+ GetTransactionDetails
17
+ DoReferenceTransaction
18
+ Callback
19
+
20
+ Deprecated
21
+ ==========
22
+ CreateBillingAgreement
23
+ GetBillingAgreementCustomerDetails
24
+ SetCustomerBillingAgreement
25
+
26
+ * CreateRecurringPaymentsProfile
27
+ * DoExpressCheckoutPayment
28
+ * GetExpressCheckoutDetails
29
+ * GetRecurringPaymentsProfileDetails
30
+ * ManageRecurringPaymentsProfileStatus
31
+ * RefundTransaction
32
+ * SetExpressCheckout
33
+ * UpdateRecurringPaymentsProfile
34
+
35
+ :checkout => "SetExpressCheckout",
36
+ :payment => "DoExpressCheckoutPayment",
37
+ :details => "GetExpressCheckoutDetails",
38
+ :create_profile => "CreateRecurringPaymentsProfile",
39
+ :profile => "GetRecurringPaymentsProfileDetails",
40
+ :manage_profile => "ManageRecurringPaymentsProfileStatus",
41
+ :update_profile => "UpdateRecurringPaymentsProfile",
42
+ :refund => "RefundTransaction"
43
+
44
+ Endpoints
45
+ ---------
46
+ https://api-3t.paypal.com/nvp
47
+ https://api-3t.sandbox.paypal.com/nvp
48
+
49
+ Adaptive Payments
50
+ =================
51
+ CancelPreapproval
52
+ ConvertCurrency
53
+ ExecutePayment
54
+ GetFundingPlans
55
+ GetPaymentOptions
56
+ GetShippingAddresses
57
+ Pay
58
+ PaymentDetails
59
+ Preapproval
60
+ PreapprovalDetails
61
+ Refund
62
+ SetPaymentOptions
63
+
64
+ Endpoints
65
+ ---------
66
+ https://svcs.paypal.com/AdaptivePayments/<API_operation>
67
+ https://svcs.sandbox.paypal.com/AdaptivePayments/<API_operation>
@@ -0,0 +1,38 @@
1
+ Pay
2
+ ===
3
+ ap = AdaptivePayments::Payment.new()
4
+ ap.cancel_url = ""
5
+ ap.return_url = ""
6
+ ap.receivers << Receiver.new(email: '', amount: 10.00)
7
+ ap.receivers << PrimaryReceiver.new()
8
+ ap.create (action_type = :create)
9
+ ap.options = (SetPaymentOptions)
10
+ ap.options (GetPaymentOptions)
11
+ ap.pay (pay_key ? ExecutePayment : action_type = :pay)
12
+ ap.details (PaymentDetails)
13
+ ap.funding_plans (GetFundingPlans)
14
+ ap.shipping_addresses (GetShippingAddresses)
15
+ ap.refund (Refund)
16
+
17
+ PaymentDetails
18
+ ==============
19
+ ap = AdaptivePayments::Payment.new(pay_key => '123456')
20
+ ap.details (returns PaymentDetail)
21
+
22
+ PaymentOptions
23
+ ===============
24
+ ap = AdaptivePayments::Payment.new(pay_key => '123456')
25
+ ap.options (GetPaymentOptions)
26
+ ap.options =
27
+
28
+ Preapproval
29
+ ===========
30
+ app = AdaptivePayments::Preapproval.new()
31
+ app.create
32
+ app.details
33
+ app.cancel
34
+
35
+ Refund
36
+ ======
37
+ ap = AdaptivePayments::Payment.new(pay_key => '123456')
38
+ ap.refund
@@ -0,0 +1,172 @@
1
+ = PayPal Payment
2
+
3
+ PayPal API Client for Adaptive Payments, Invoice and Express Checkout.
4
+
5
+ == Installation (Gemfile)
6
+
7
+ gem 'paypal-payment', :git => 'vendor@appcepted.com:/home/vendor/pp_paypal'
8
+
9
+ == Usage
10
+
11
+ First, you need to set up your credentials:
12
+
13
+ require "paypal-payment"
14
+
15
+ PayPal::Api.configure do |config|
16
+ config.sandbox = true
17
+ config.username = "chardy_api1.gmail.com"
18
+ config.password = "8DTSWBZC7GDR3T4X"
19
+ config.signature = "AG-8mOpuFhFyFOYHlaTUYn3Syf15AWJKRnfHMVsmCtC3DK51-ENEPqLS"
20
+ end
21
+
22
+ == Ref: https://www.x.com/developers/paypal/documentation-tools/express-checkout/how-to/ht_ec-recurringPaymentProfile-curl-etc
23
+
24
+ == 1. Express Checkout - Recurring (authorization)
25
+
26
+ payment = PayPal::ExpressCheckout::Payment.new(
27
+ :payment_action => "Authorization",
28
+ :description => "Awesome - Monthly Subscription",
29
+ :notify_url => "http://example.com/paypal/ipn",
30
+ :amount => "9.00", # not bill yet
31
+ :currency => "USD"
32
+ )
33
+
34
+ billing = PayPal::ExpressCheckout::Billing.new(
35
+ :type => 'RecurringPayments',
36
+ :description => "Awesome - Monthly Subscription"
37
+ )
38
+
39
+ ppc = PayPal::ExpressCheckout::Checkout.new({
40
+ :return_url => "http://example.com/thank_you?app_name=camera_app",
41
+ :cancel_url => "http://example.com/canceled",
42
+ :billings => [ billing ],
43
+ :payments => [ payment ]
44
+ })
45
+
46
+ response = ppc.checkout
47
+
48
+ response.valid?
49
+ response.checkout_url
50
+ # https://www.sandbox.paypal.com/webscr?cmd=_express-checkout&token=InsertTokenHere
51
+
52
+ token = response.token
53
+ payer_id = response.details.payer_id
54
+
55
+ rco = PayPal::ExpressCheckout::Checkout.new(:token => token)
56
+ payer_id = rco.details.payer_id
57
+
58
+ == 1.a after click the checkout_url, make payment, redirect to return_url and paypal will return
59
+
60
+ TOKEN=token_value
61
+ &BILLINGAGREEMENTACCEPTEDSTATUS=1
62
+ &ACK=Success
63
+ &PAYERID=3TXTXECKF1234
64
+
65
+ == 2. Express Checkout - Recurring
66
+
67
+ ppr = PayPal::ExpressCheckout::Recurring.new({
68
+ :amount => "9.00",
69
+ :initial_amount => "9.00",
70
+ :failed_initial_action => :cancel,
71
+ :currency => "USD",
72
+ :description => "Awesome - Monthly Subscription",
73
+ :frequency => 1,
74
+ :token => token,
75
+ :period => :monthly,
76
+ :reference => "1234",
77
+ :payer_id => payer_id,
78
+ :start_at => Time.now,
79
+ :max_failed_payments => 1,
80
+ :auto_bill_outstanding => :next_billing
81
+ })
82
+
83
+ ppr.create_profile
84
+ ppr.profile_status
85
+ ppr.profile_id
86
+
87
+ == 3. Express Checkout - Recurring - manage profile
88
+
89
+ ppr = PayPal::ExpressCheckout::Recurring.new(:profile_id => "I-1RFWFFS16BF4")
90
+ ppr.suspend
91
+ ppr.success?
92
+
93
+ ppr.profile # see profile_spec.rb
94
+
95
+ ppr.reactivate
96
+
97
+ ppr.cancel # cannot reactivate
98
+
99
+ == 4. Express Checkout - Recurring - update profile
100
+
101
+ ppr = PayPal::ExpressCheckout::Recurring.new(:profile_id => "I-1RFWFFS16BF4")
102
+
103
+ PayPal::ExpressCheckout::Recurring.new({
104
+ :description => "Awesome - Monthly Subscription (Updated)",
105
+ :amount => "10.00",
106
+ :currency => "BRL",
107
+ :note => "Changed Plan",
108
+ :profile_id => profile_id
109
+ })
110
+
111
+ =====
112
+
113
+ == 1. Express Checkout - Sale
114
+
115
+ payment = PayPal::ExpressCheckout::Payment.new(
116
+ :payment_action => "Sale",
117
+ :description => "Awesome - Sale",
118
+ :notify_url => "http://example.com/paypal/ipn",
119
+ :amount => "9.00",
120
+ :currency => "USD"
121
+ )
122
+
123
+ ppc = PayPal::ExpressCheckout::Checkout.new({
124
+ :return_url => "http://example.com/thank_you",
125
+ :cancel_url => "http://example.com/canceled",
126
+ :payments => [ payment ]
127
+ })
128
+
129
+ response = ppc.checkout
130
+ response.valid?
131
+ response.checkout_url
132
+
133
+ == 1.a after click the checkout_url, make payment, redirect to return_url and paypal will return
134
+
135
+ TOKEN=token_value
136
+ &ACK=Success
137
+
138
+ == 2. Express Checkout - Sale
139
+
140
+ payment = PayPal::ExpressCheckout::Payment.new(
141
+ :payment_action => "Sale",
142
+ :description => "Awesome - Sale",
143
+ :notify_url => "http://example.com/paypal/ipn",
144
+ :amount => "9.00",
145
+ :currency => "USD"
146
+ )
147
+
148
+ checkout = PayPal::ExpressCheckout::Checkout.new(:token => token)
149
+ payer_id = checkout.details.payer_id
150
+
151
+ checkout = PayPal::ExpressCheckout::Checkout.new(
152
+ :token => token,
153
+ :payer_id => payer_id,
154
+ :payments => [payment]
155
+ )
156
+ checkout.pay
157
+
158
+ == 3. Express Checkout - Sale - Manage
159
+
160
+ payment = PayPal::ExpressCheckout::Payment.new(:transaction_id => transaction_id)
161
+
162
+
163
+
164
+
165
+
166
+
167
+
168
+
169
+
170
+
171
+
172
+