pagseguro-sdk 2.6.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 (324) hide show
  1. checksums.yaml +7 -0
  2. data/.github/.gitignore +204 -0
  3. data/.github/ISSUE_TEMPLATE/relatorio-de-bug.md +29 -0
  4. data/.github/workflows/codacy-analysis.yml +46 -0
  5. data/.gitignore +28 -0
  6. data/.rspec +1 -0
  7. data/.travis.yml +13 -0
  8. data/CHANGELOG.md +95 -0
  9. data/CONTRIBUTING.md +39 -0
  10. data/Dockerfile +20 -0
  11. data/Gemfile +2 -0
  12. data/LICENSE-2.0.txt +177 -0
  13. data/README.md +436 -0
  14. data/Rakefile +5 -0
  15. data/docker-compose.yml +5 -0
  16. data/docs/transparent_checkout.md +201 -0
  17. data/examples/authorization/create_authorization.rb +32 -0
  18. data/examples/authorization/create_authorization_with_account.rb +56 -0
  19. data/examples/authorization/search/search_authorization_by_code.rb +29 -0
  20. data/examples/authorization/search/search_authorization_by_date.rb +35 -0
  21. data/examples/authorization/search/search_authorization_by_notification_code.rb +29 -0
  22. data/examples/authorization/search/search_authorization_by_reference.rb +31 -0
  23. data/examples/boot.rb +26 -0
  24. data/examples/checkout/create_payment_request.rb +63 -0
  25. data/examples/checkout/search/search_abandoned_transactions.rb +41 -0
  26. data/examples/checkout/search/search_transaction_by_code.rb +76 -0
  27. data/examples/checkout/search/search_transaction_by_notification_code.rb +76 -0
  28. data/examples/checkout/search/search_transaction_by_reference.rb +36 -0
  29. data/examples/checkout/search/search_transactions_by_date.rb +45 -0
  30. data/examples/create_session.rb +19 -0
  31. data/examples/direct/create_transaction_using_boleto.rb +100 -0
  32. data/examples/direct/create_transaction_using_credit_card.rb +128 -0
  33. data/examples/direct/create_transaction_using_online_debit.rb +104 -0
  34. data/examples/get_installments.rb +40 -0
  35. data/examples/preapproval/cancel_preapproval.rb +26 -0
  36. data/examples/preapproval/change_preapproval_payment.rb +50 -0
  37. data/examples/preapproval/change_preapproval_status.rb +29 -0
  38. data/examples/preapproval/charge_preapproval.rb +36 -0
  39. data/examples/preapproval/create_preapproval.rb +68 -0
  40. data/examples/preapproval/create_preapproval_auto.rb +53 -0
  41. data/examples/preapproval/create_preapproval_discount.rb +30 -0
  42. data/examples/preapproval/create_preapproval_manual.rb +58 -0
  43. data/examples/preapproval/create_preapproval_transparent.rb +41 -0
  44. data/examples/preapproval/preapproval_retry.rb +29 -0
  45. data/examples/preapproval/search/search_by_date_interval.rb +45 -0
  46. data/examples/preapproval/search/search_by_days_interval.rb +46 -0
  47. data/examples/preapproval/search/search_by_notification_code.rb +50 -0
  48. data/examples/preapproval/search/search_by_subscription_code.rb +50 -0
  49. data/examples/preapproval/search/search_subscription_payment_orders.rb +53 -0
  50. data/examples/request_transaction_cancellation.rb +19 -0
  51. data/examples/split_payment/create_authorization.rb +32 -0
  52. data/examples/split_payment/create_payment_request.rb +71 -0
  53. data/examples/split_payment/create_transaction_using_boleto.rb +118 -0
  54. data/examples/split_payment/create_transaction_using_credit_card.rb +152 -0
  55. data/lib/pagseguro-oficial.rb +1 -0
  56. data/lib/pagseguro.rb +221 -0
  57. data/lib/pagseguro/account.rb +29 -0
  58. data/lib/pagseguro/account_credentials.rb +14 -0
  59. data/lib/pagseguro/address.rb +40 -0
  60. data/lib/pagseguro/application_credentials.rb +18 -0
  61. data/lib/pagseguro/authorization.rb +61 -0
  62. data/lib/pagseguro/authorization/collection.rb +28 -0
  63. data/lib/pagseguro/authorization/request_serializer.rb +24 -0
  64. data/lib/pagseguro/authorization/response.rb +49 -0
  65. data/lib/pagseguro/authorization/response_serializer.rb +40 -0
  66. data/lib/pagseguro/authorization_request.rb +84 -0
  67. data/lib/pagseguro/authorization_request/request_serializer.rb +142 -0
  68. data/lib/pagseguro/authorization_request/response.rb +26 -0
  69. data/lib/pagseguro/authorization_request/response_serializer.rb +18 -0
  70. data/lib/pagseguro/bank.rb +8 -0
  71. data/lib/pagseguro/boleto_transaction_request.rb +8 -0
  72. data/lib/pagseguro/company.rb +41 -0
  73. data/lib/pagseguro/config.rb +34 -0
  74. data/lib/pagseguro/credit_card_transaction_request.rb +39 -0
  75. data/lib/pagseguro/creditor_fee.rb +23 -0
  76. data/lib/pagseguro/document.rb +23 -0
  77. data/lib/pagseguro/documents.rb +5 -0
  78. data/lib/pagseguro/errors.rb +57 -0
  79. data/lib/pagseguro/exceptions.rb +3 -0
  80. data/lib/pagseguro/extensions/collection_object.rb +34 -0
  81. data/lib/pagseguro/extensions/credentiable.rb +17 -0
  82. data/lib/pagseguro/extensions/ensure_type.rb +9 -0
  83. data/lib/pagseguro/extensions/mass_assignment.rb +11 -0
  84. data/lib/pagseguro/holder.rb +36 -0
  85. data/lib/pagseguro/installment.rb +57 -0
  86. data/lib/pagseguro/installment/collection.rb +25 -0
  87. data/lib/pagseguro/installment/request_serializer.rb +24 -0
  88. data/lib/pagseguro/installment/response.rb +37 -0
  89. data/lib/pagseguro/installment/response_serializer.rb +22 -0
  90. data/lib/pagseguro/item.rb +34 -0
  91. data/lib/pagseguro/items.rb +23 -0
  92. data/lib/pagseguro/manual_subscription_charger.rb +59 -0
  93. data/lib/pagseguro/manual_subscription_charger/request_serializer.rb +50 -0
  94. data/lib/pagseguro/manual_subscription_charger/response.rb +36 -0
  95. data/lib/pagseguro/manual_subscription_charger/response_serializer.rb +17 -0
  96. data/lib/pagseguro/notification.rb +11 -0
  97. data/lib/pagseguro/notification/authorization.rb +15 -0
  98. data/lib/pagseguro/notification/transaction.rb +15 -0
  99. data/lib/pagseguro/online_debit_transaction_request.rb +17 -0
  100. data/lib/pagseguro/partner.rb +20 -0
  101. data/lib/pagseguro/payment_method.rb +39 -0
  102. data/lib/pagseguro/payment_release.rb +21 -0
  103. data/lib/pagseguro/payment_releases.rb +28 -0
  104. data/lib/pagseguro/payment_request.rb +117 -0
  105. data/lib/pagseguro/payment_request/request_serializer.rb +203 -0
  106. data/lib/pagseguro/payment_request/response.rb +35 -0
  107. data/lib/pagseguro/payment_status.rb +39 -0
  108. data/lib/pagseguro/permission.rb +13 -0
  109. data/lib/pagseguro/person.rb +40 -0
  110. data/lib/pagseguro/phone.rb +20 -0
  111. data/lib/pagseguro/phones.rb +5 -0
  112. data/lib/pagseguro/receiver.rb +20 -0
  113. data/lib/pagseguro/receiver_split.rb +15 -0
  114. data/lib/pagseguro/request.rb +170 -0
  115. data/lib/pagseguro/sender.rb +53 -0
  116. data/lib/pagseguro/session.rb +34 -0
  117. data/lib/pagseguro/session/response.rb +32 -0
  118. data/lib/pagseguro/session/response_serializer.rb +18 -0
  119. data/lib/pagseguro/shipping.rb +57 -0
  120. data/lib/pagseguro/subscription.rb +132 -0
  121. data/lib/pagseguro/subscription/request_serializer.rb +129 -0
  122. data/lib/pagseguro/subscription/response.rb +49 -0
  123. data/lib/pagseguro/subscription/response_serializer.rb +62 -0
  124. data/lib/pagseguro/subscription/subscription_search.rb +135 -0
  125. data/lib/pagseguro/subscription_canceller.rb +30 -0
  126. data/lib/pagseguro/subscription_canceller/response.rb +34 -0
  127. data/lib/pagseguro/subscription_change_payment.rb +46 -0
  128. data/lib/pagseguro/subscription_change_payment/request_serializer.rb +80 -0
  129. data/lib/pagseguro/subscription_change_payment/response.rb +26 -0
  130. data/lib/pagseguro/subscription_change_status.rb +50 -0
  131. data/lib/pagseguro/subscription_change_status/request_serializer.rb +28 -0
  132. data/lib/pagseguro/subscription_change_status/response.rb +26 -0
  133. data/lib/pagseguro/subscription_discount.rb +41 -0
  134. data/lib/pagseguro/subscription_discount/request_serializer.rb +34 -0
  135. data/lib/pagseguro/subscription_discount/response.rb +34 -0
  136. data/lib/pagseguro/subscription_payment_method.rb +21 -0
  137. data/lib/pagseguro/subscription_payment_order.rb +57 -0
  138. data/lib/pagseguro/subscription_payment_order/response.rb +37 -0
  139. data/lib/pagseguro/subscription_payment_order/response_serializer.rb +51 -0
  140. data/lib/pagseguro/subscription_plan.rb +69 -0
  141. data/lib/pagseguro/subscription_plan/request_serializer.rb +81 -0
  142. data/lib/pagseguro/subscription_plan/response.rb +36 -0
  143. data/lib/pagseguro/subscription_plan/response_serializer.rb +17 -0
  144. data/lib/pagseguro/subscription_retry.rb +35 -0
  145. data/lib/pagseguro/subscription_retry/response.rb +34 -0
  146. data/lib/pagseguro/subscription_search_payment_orders.rb +131 -0
  147. data/lib/pagseguro/subscription_transaction.rb +29 -0
  148. data/lib/pagseguro/subscription_transactions.rb +5 -0
  149. data/lib/pagseguro/transaction.rb +215 -0
  150. data/lib/pagseguro/transaction/collection.rb +20 -0
  151. data/lib/pagseguro/transaction/response.rb +45 -0
  152. data/lib/pagseguro/transaction/search.rb +121 -0
  153. data/lib/pagseguro/transaction/search/search_abandoned.rb +20 -0
  154. data/lib/pagseguro/transaction/search/search_by_date.rb +16 -0
  155. data/lib/pagseguro/transaction/search/search_by_reference.rb +13 -0
  156. data/lib/pagseguro/transaction/serializer.rb +181 -0
  157. data/lib/pagseguro/transaction_cancellation.rb +37 -0
  158. data/lib/pagseguro/transaction_cancellation/request_serializer.rb +18 -0
  159. data/lib/pagseguro/transaction_cancellation/response.rb +33 -0
  160. data/lib/pagseguro/transaction_cancellation/response_serializer.rb +17 -0
  161. data/lib/pagseguro/transaction_installment.rb +11 -0
  162. data/lib/pagseguro/transaction_refund.rb +44 -0
  163. data/lib/pagseguro/transaction_refund/request_serializer.rb +24 -0
  164. data/lib/pagseguro/transaction_refund/response.rb +33 -0
  165. data/lib/pagseguro/transaction_refund/response_serializer.rb +17 -0
  166. data/lib/pagseguro/transaction_request.rb +165 -0
  167. data/lib/pagseguro/transaction_request/request_serializer.rb +311 -0
  168. data/lib/pagseguro/transaction_request/response.rb +33 -0
  169. data/lib/pagseguro/transaction_request/response_serializer.rb +117 -0
  170. data/lib/pagseguro/transaction_status.rb +14 -0
  171. data/lib/pagseguro/version.rb +3 -0
  172. data/locales/pt-BR.yml +130 -0
  173. data/pagseguro-oficial.gemspec +31 -0
  174. data/spec/fixtures/authorization/find_authorization.xml +17 -0
  175. data/spec/fixtures/authorization/search_authorization.xml +47 -0
  176. data/spec/fixtures/authorization_request/authorization_request.xml +11 -0
  177. data/spec/fixtures/authorization_request/authorization_request_with_account.xml +47 -0
  178. data/spec/fixtures/authorization_request/success.xml +4 -0
  179. data/spec/fixtures/by_date/success.xml +85 -0
  180. data/spec/fixtures/installment/success.xml +24 -0
  181. data/spec/fixtures/invalid_code.xml +7 -0
  182. data/spec/fixtures/manual_subscription_charger/fail.xml +6 -0
  183. data/spec/fixtures/manual_subscription_charger/success.xml +4 -0
  184. data/spec/fixtures/payment_request/failure.xml +7 -0
  185. data/spec/fixtures/payment_request/success.xml +5 -0
  186. data/spec/fixtures/refund/success.xml +2 -0
  187. data/spec/fixtures/session/success.xml +4 -0
  188. data/spec/fixtures/subscription/fail.xml +6 -0
  189. data/spec/fixtures/subscription/find_success.xml +28 -0
  190. data/spec/fixtures/subscription/search_success.xml +18 -0
  191. data/spec/fixtures/subscription/success.xml +4 -0
  192. data/spec/fixtures/subscription_canceller/fail.xml +6 -0
  193. data/spec/fixtures/subscription_change_payment/fail.xml +7 -0
  194. data/spec/fixtures/subscription_change_status/fail.xml +7 -0
  195. data/spec/fixtures/subscription_discount/fail.xml +6 -0
  196. data/spec/fixtures/subscription_payment_order/success.xml +18 -0
  197. data/spec/fixtures/subscription_plan/fail.xml +6 -0
  198. data/spec/fixtures/subscription_plan/success.xml +4 -0
  199. data/spec/fixtures/subscription_retry/fail.xml +7 -0
  200. data/spec/fixtures/subscription_search_payment_orders/success.xml +43 -0
  201. data/spec/fixtures/transaction_cancellation/success.xml +2 -0
  202. data/spec/fixtures/transaction_request/success.xml +58 -0
  203. data/spec/fixtures/transactions/additional.xml +53 -0
  204. data/spec/fixtures/transactions/search.xml +40 -0
  205. data/spec/fixtures/transactions/success.xml +75 -0
  206. data/spec/fixtures/transactions/without_status_and_type.xml +71 -0
  207. data/spec/pagseguro/account_credentials_spec.rb +10 -0
  208. data/spec/pagseguro/account_spec.rb +27 -0
  209. data/spec/pagseguro/address_spec.rb +17 -0
  210. data/spec/pagseguro/application_credentials_spec.rb +11 -0
  211. data/spec/pagseguro/authorization/collection_spec.rb +49 -0
  212. data/spec/pagseguro/authorization/request_serializer_spec.rb +10 -0
  213. data/spec/pagseguro/authorization/response_serializer_spec.rb +19 -0
  214. data/spec/pagseguro/authorization/response_spec.rb +90 -0
  215. data/spec/pagseguro/authorization_request/request_serializer_spec.rb +323 -0
  216. data/spec/pagseguro/authorization_request/response_serializer_spec.rb +15 -0
  217. data/spec/pagseguro/authorization_request/response_spec.rb +36 -0
  218. data/spec/pagseguro/authorization_request_spec.rb +127 -0
  219. data/spec/pagseguro/authorization_spec.rb +111 -0
  220. data/spec/pagseguro/bank_spec.rb +5 -0
  221. data/spec/pagseguro/boleto_transaction_request_spec.rb +9 -0
  222. data/spec/pagseguro/company_spec.rb +12 -0
  223. data/spec/pagseguro/config_spec.rb +5 -0
  224. data/spec/pagseguro/credit_card_transaction_request_spec.rb +36 -0
  225. data/spec/pagseguro/creditor_fee_spec.rb +10 -0
  226. data/spec/pagseguro/document_spec.rb +21 -0
  227. data/spec/pagseguro/documents_spec.rb +37 -0
  228. data/spec/pagseguro/errors_spec.rb +145 -0
  229. data/spec/pagseguro/extensions/collection_object_spec.rb +77 -0
  230. data/spec/pagseguro/features/create_session_spec.rb +52 -0
  231. data/spec/pagseguro/features/create_transaction_request_spec.rb +58 -0
  232. data/spec/pagseguro/holder_spec.rb +10 -0
  233. data/spec/pagseguro/installment/collection_spec.rb +43 -0
  234. data/spec/pagseguro/installment/request_serializer_spec.rb +16 -0
  235. data/spec/pagseguro/installment/response_serializer_spec.rb +33 -0
  236. data/spec/pagseguro/installment/response_spec.rb +56 -0
  237. data/spec/pagseguro/installment_spec.rb +50 -0
  238. data/spec/pagseguro/item_spec.rb +20 -0
  239. data/spec/pagseguro/items_spec.rb +148 -0
  240. data/spec/pagseguro/manual_subscription_charger/request_serializer_spec.rb +79 -0
  241. data/spec/pagseguro/manual_subscription_charger/response_serializer_spec.rb +10 -0
  242. data/spec/pagseguro/manual_subscription_charger/response_spec.rb +65 -0
  243. data/spec/pagseguro/manual_subscription_charger_spec.rb +68 -0
  244. data/spec/pagseguro/notification_spec.rb +6 -0
  245. data/spec/pagseguro/online_debit_transaction_request_spec.rb +18 -0
  246. data/spec/pagseguro/pagseguro_spec.rb +82 -0
  247. data/spec/pagseguro/partner_spec.rb +8 -0
  248. data/spec/pagseguro/payment_method_spec.rb +42 -0
  249. data/spec/pagseguro/payment_release_spec.rb +9 -0
  250. data/spec/pagseguro/payment_releases_spec.rb +34 -0
  251. data/spec/pagseguro/payment_request/request_serializer_spec.rb +283 -0
  252. data/spec/pagseguro/payment_request/response_spec.rb +13 -0
  253. data/spec/pagseguro/payment_request_spec.rb +148 -0
  254. data/spec/pagseguro/payment_status_spec.rb +33 -0
  255. data/spec/pagseguro/permission_spec.rb +7 -0
  256. data/spec/pagseguro/person_spec.rb +10 -0
  257. data/spec/pagseguro/phone_spec.rb +6 -0
  258. data/spec/pagseguro/phones_spec.rb +38 -0
  259. data/spec/pagseguro/receiver_spec.rb +7 -0
  260. data/spec/pagseguro/receiver_split_spec.rb +7 -0
  261. data/spec/pagseguro/request_spec.rb +114 -0
  262. data/spec/pagseguro/sender_spec.rb +25 -0
  263. data/spec/pagseguro/session/response_serializer_spec.rb +12 -0
  264. data/spec/pagseguro/session/response_spec.rb +57 -0
  265. data/spec/pagseguro/session_spec.rb +45 -0
  266. data/spec/pagseguro/shipping_spec.rb +40 -0
  267. data/spec/pagseguro/subscription/request_serializer_spec.rb +233 -0
  268. data/spec/pagseguro/subscription/response_serializer_spec.rb +46 -0
  269. data/spec/pagseguro/subscription/response_spec.rb +79 -0
  270. data/spec/pagseguro/subscription/subscription_search_spec.rb +154 -0
  271. data/spec/pagseguro/subscription_canceller/response_spec.rb +58 -0
  272. data/spec/pagseguro/subscription_canceller_spec.rb +57 -0
  273. data/spec/pagseguro/subscription_change_payment/request_serializer_spec.rb +150 -0
  274. data/spec/pagseguro/subscription_change_payment/response_spec.rb +41 -0
  275. data/spec/pagseguro/subscription_change_payment_spec.rb +60 -0
  276. data/spec/pagseguro/subscription_change_status/request_serializer_spec.rb +19 -0
  277. data/spec/pagseguro/subscription_change_status/response_spec.rb +41 -0
  278. data/spec/pagseguro/subscription_change_status_spec.rb +53 -0
  279. data/spec/pagseguro/subscription_discount/request_serializer_spec.rb +27 -0
  280. data/spec/pagseguro/subscription_discount/response_spec.rb +58 -0
  281. data/spec/pagseguro/subscription_discount_spec.rb +60 -0
  282. data/spec/pagseguro/subscription_payment_method_spec.rb +10 -0
  283. data/spec/pagseguro/subscription_payment_order/response_serializer_spec.rb +24 -0
  284. data/spec/pagseguro/subscription_payment_order/response_spec.rb +55 -0
  285. data/spec/pagseguro/subscription_payment_order_spec.rb +27 -0
  286. data/spec/pagseguro/subscription_plan/request_serializer_spec.rb +253 -0
  287. data/spec/pagseguro/subscription_plan/response_serializer_spec.rb +10 -0
  288. data/spec/pagseguro/subscription_plan/response_spec.rb +65 -0
  289. data/spec/pagseguro/subscription_plan_spec.rb +118 -0
  290. data/spec/pagseguro/subscription_retry/response_spec.rb +58 -0
  291. data/spec/pagseguro/subscription_retry_spec.rb +62 -0
  292. data/spec/pagseguro/subscription_search_payment_order_spec.rb +129 -0
  293. data/spec/pagseguro/subscription_spec.rb +137 -0
  294. data/spec/pagseguro/subscription_transaction_spec.rb +24 -0
  295. data/spec/pagseguro/subscription_transactions_spec.rb +37 -0
  296. data/spec/pagseguro/transaction/collection_spec.rb +43 -0
  297. data/spec/pagseguro/transaction/response_spec.rb +60 -0
  298. data/spec/pagseguro/transaction/search/search_abandoned_spec.rb +55 -0
  299. data/spec/pagseguro/transaction/search/search_by_date_spec.rb +28 -0
  300. data/spec/pagseguro/transaction/search/search_by_reference_spec.rb +21 -0
  301. data/spec/pagseguro/transaction/search_spec.rb +133 -0
  302. data/spec/pagseguro/transaction/serializer_spec.rb +86 -0
  303. data/spec/pagseguro/transaction_cancellation/request_serializer_spec.rb +13 -0
  304. data/spec/pagseguro/transaction_cancellation/response_serializer_spec.rb +9 -0
  305. data/spec/pagseguro/transaction_cancellation/response_spec.rb +45 -0
  306. data/spec/pagseguro/transaction_cancellation_spec.rb +60 -0
  307. data/spec/pagseguro/transaction_installment_spec.rb +6 -0
  308. data/spec/pagseguro/transaction_refund/request_serializer_spec.rb +15 -0
  309. data/spec/pagseguro/transaction_refund/response_serializer_spec.rb +12 -0
  310. data/spec/pagseguro/transaction_refund/response_spec.rb +39 -0
  311. data/spec/pagseguro/transaction_refund_spec.rb +71 -0
  312. data/spec/pagseguro/transaction_request/request_serializer_spec.rb +677 -0
  313. data/spec/pagseguro/transaction_request/response_serializer_spec.rb +52 -0
  314. data/spec/pagseguro/transaction_request/response_spec.rb +63 -0
  315. data/spec/pagseguro/transaction_request_spec.rb +156 -0
  316. data/spec/pagseguro/transaction_spec.rb +265 -0
  317. data/spec/pagseguro/transaction_status_spec.rb +7 -0
  318. data/spec/spec_helper.rb +35 -0
  319. data/spec/support/ensure_type_macro.rb +35 -0
  320. data/spec/support/helpers.rb +14 -0
  321. data/spec/support/mass_assignment_macro.rb +11 -0
  322. data/spec/support/shared_examples_for_configuration.rb +10 -0
  323. data/transaction/transaction_refund.rb +25 -0
  324. metadata +641 -0
@@ -0,0 +1,21 @@
1
+ module PagSeguro
2
+ class PaymentRelease
3
+ include Extensions::MassAssignment
4
+ include Extensions::EnsureType
5
+
6
+ # Set the number of installments
7
+ attr_accessor :installment
8
+
9
+ # Set the total amount
10
+ attr_accessor :total_amount
11
+
12
+ # Set the total amount of the current release
13
+ attr_accessor :release_amount
14
+
15
+ # Set the status of current release
16
+ attr_accessor :status
17
+
18
+ # Set the release date
19
+ attr_accessor :release_date
20
+ end
21
+ end
@@ -0,0 +1,28 @@
1
+ module PagSeguro
2
+ class PaymentReleases
3
+ include Enumerable
4
+ extend Forwardable
5
+ include Extensions::EnsureType
6
+
7
+ def_delegators :@payments, :each, :size
8
+
9
+ def initialize
10
+ @payments = []
11
+ end
12
+
13
+ # Adds payment to payment list.
14
+ def <<(payment)
15
+ payment = ensure_type(PaymentRelease, payment)
16
+
17
+ @payments << payment unless @payments.include? payment
18
+ end
19
+
20
+ # Verify if a payment is already included to payment list.
21
+ # Returns Boolean.
22
+ def include?(payment)
23
+ self.find do |included_payment|
24
+ included_payment.installment == ensure_type(PaymentRelease, payment).installment
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,117 @@
1
+ module PagSeguro
2
+ class PaymentRequest
3
+ include Extensions::MassAssignment
4
+ include Extensions::EnsureType
5
+ include Extensions::Credentiable
6
+
7
+ # Set the payment currency.
8
+ # Defaults to BRL.
9
+ attr_accessor :currency
10
+
11
+ # Get the payment sender.
12
+ attr_reader :sender
13
+
14
+ # Set and get primary receiver email.
15
+ attr_accessor :primary_receiver
16
+
17
+ # Get the payment receivers.
18
+ attr_reader :receivers
19
+
20
+ # Get the shipping info.
21
+ attr_reader :shipping
22
+
23
+ # Set the redirect url.
24
+ # The URL that will be used by PagSeguro to redirect the user after
25
+ # the payment information is processed. Typically this is a
26
+ # confirmation page on your web site.
27
+ attr_accessor :redirect_url
28
+
29
+ # Set the extra amount to be applied to the transaction's total.
30
+ # This value can be used to add an extra charge to the transaction
31
+ # or provide a discount, if negative.
32
+ attr_accessor :extra_amount
33
+
34
+ # Set the reference code.
35
+ # Optional. You can use the reference code to store an identifier so you can
36
+ # associate the PagSeguro transaction to a transaction in your system.
37
+ # Tipically this is the order id.
38
+ attr_accessor :reference
39
+
40
+ # Set the payment request duration, in seconds.
41
+ attr_accessor :max_age
42
+
43
+ # How many times the payment redirect uri returned by the payment
44
+ # web service can be accessed.
45
+ # Optional. After this payment request is submitted, the payment
46
+ # redirect uri returned by the payment web service will remain valid
47
+ # for the number of uses specified here.
48
+ attr_accessor :max_uses
49
+
50
+ # Determines for which url PagSeguro will send the order related
51
+ # notifications codes.
52
+ # Optional. Any change happens in the transaction status, a new notification
53
+ # request will be send to this url. You can use that for update the related
54
+ # order.
55
+ attr_accessor :notification_url
56
+
57
+ # Determines for which url PagSeguro will send the buyer when he doesn't
58
+ # complete the payment.
59
+ attr_accessor :abandon_url
60
+
61
+ # The extra parameters for payment request
62
+ attr_accessor :extra_params
63
+
64
+ # Products/items in this payment request.
65
+ def items
66
+ @items ||= Items.new
67
+ end
68
+
69
+ # Set the payment sender.
70
+ def sender=(sender)
71
+ @sender = ensure_type(Sender, sender)
72
+ end
73
+
74
+ # Set the receivers.
75
+ def receivers=(receivers)
76
+ receivers.each do |receiver|
77
+ @receivers << ensure_type(Receiver, receiver)
78
+ end
79
+ end
80
+
81
+ # Set the shipping info.
82
+ def shipping=(shipping)
83
+ @shipping = ensure_type(Shipping, shipping)
84
+ end
85
+
86
+ # Calls the PagSeguro web service and register this request for payment.
87
+ def register
88
+ request = if @receivers.empty?
89
+ Request.post('checkout', api_version, params)
90
+ else
91
+ Request.post_xml('checkouts', api_version, credentials, xml_params)
92
+ end
93
+
94
+ Response.new(request)
95
+ end
96
+
97
+ private
98
+
99
+ def xml_params
100
+ RequestSerializer.new(self).to_xml_params
101
+ end
102
+
103
+ def params
104
+ RequestSerializer.new(self).to_params
105
+ end
106
+
107
+ def before_initialize
108
+ self.extra_params = []
109
+ self.currency = "BRL"
110
+ @receivers = []
111
+ end
112
+
113
+ def api_version
114
+ 'v2'
115
+ end
116
+ end
117
+ end
@@ -0,0 +1,203 @@
1
+ module PagSeguro
2
+ class PaymentRequest
3
+ class RequestSerializer
4
+ # The payment request that will be serialized.
5
+ attr_reader :payment_request
6
+
7
+ def initialize(payment_request)
8
+ @payment_request = payment_request
9
+ end
10
+
11
+ def to_xml_params
12
+ xml_builder.to_xml(
13
+ save_with:
14
+ Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS |
15
+ Nokogiri::XML::Node::SaveOptions::FORMAT
16
+ )
17
+ end
18
+
19
+ def to_params
20
+ {}.tap do |data|
21
+ data[:receiverEmail] = PagSeguro.receiver_email
22
+ data[:currency] = payment_request.currency
23
+ data[:reference] = payment_request.reference
24
+ data[:extraAmount] = to_amount(payment_request.extra_amount)
25
+ data[:redirectURL] = payment_request.redirect_url
26
+ data[:notificationURL] = payment_request.notification_url
27
+ data[:abandonURL] = payment_request.abandon_url
28
+ data[:maxUses] = payment_request.max_uses
29
+ data[:maxAge] = payment_request.max_age
30
+ data[:credentials] = payment_request.credentials
31
+ payment_request.items.each_with_index do |item, index|
32
+ serialize_item(data, item, index.succ)
33
+ end
34
+
35
+ serialize_sender(data, payment_request.sender)
36
+ serialize_shipping(data, payment_request.shipping)
37
+ serialize_receivers(data, payment_request.receivers)
38
+ serialize_extra_params(data, payment_request.extra_params)
39
+ end.delete_if { |_, value| value.nil? }
40
+ end
41
+
42
+ private
43
+
44
+ def serialize_receivers(data, receivers)
45
+ receivers.each.with_index(1) do |receiver, idx|
46
+ data["receiver[#{idx}].email"] = receiver.email
47
+ serialize_receiver_split(data, receiver, idx, receiver.split)
48
+ end
49
+ end
50
+
51
+ def serialize_receiver_split(data, receiver, idx, split)
52
+ data["receiver[#{idx}].split.amount"] = receiver.split.amount
53
+ data["receiver[#{idx}].split.feePercent"] = receiver.split.fee_percent
54
+ data["receiver[#{idx}].split.ratePercent"] = receiver.split.rate_percent
55
+ end
56
+
57
+ def serialize_item(data, item, index)
58
+ data["itemId#{index}"] = item.id
59
+ data["itemDescription#{index}"] = item.description
60
+ data["itemAmount#{index}"] = to_amount(item.amount)
61
+ data["itemQuantity#{index}"] = item.quantity
62
+ data["itemShippingCost#{index}"] = to_amount(item.shipping_cost)
63
+ data["itemWeight#{index}"] = item.weight if item.weight
64
+ end
65
+
66
+ def serialize_sender(data, sender)
67
+ return unless sender
68
+
69
+ data[:senderEmail] = sender.email
70
+ data[:senderName] = sender.name
71
+
72
+ serialize_documents(data, sender.documents)
73
+ serialize_phone(data, sender.phone)
74
+ end
75
+
76
+ def serialize_documents(data, documents)
77
+ return if documents.empty?
78
+
79
+ documents.each do |document|
80
+ data[:senderCPF] = document.value if document.cpf?
81
+ data[:senderCNPJ] = document.value if document.cnpj?
82
+ end
83
+ end
84
+
85
+ def serialize_phone(data, phone)
86
+ return unless phone
87
+
88
+ data[:senderAreaCode] = phone.area_code
89
+ data[:senderPhone] = phone.number
90
+ end
91
+
92
+ def serialize_shipping(data, shipping)
93
+ return unless shipping
94
+
95
+ data[:shippingType] = shipping.type_id
96
+ data[:shippingCost] = to_amount(shipping.cost)
97
+
98
+ serialize_address(data, shipping.address)
99
+ end
100
+
101
+ def serialize_address(data, address)
102
+ return unless address
103
+
104
+ data[:shippingAddressCountry] = address.country
105
+ data[:shippingAddressState] = address.state
106
+ data[:shippingAddressCity] = address.city
107
+ data[:shippingAddressPostalCode] = address.postal_code
108
+ data[:shippingAddressDistrict] = address.district
109
+ data[:shippingAddressStreet] = address.street
110
+ data[:shippingAddressNumber] = address.number
111
+ data[:shippingAddressComplement] = address.complement
112
+ end
113
+
114
+ def serialize_extra_params(data, extra_params)
115
+ return unless extra_params
116
+
117
+ extra_params.each do |extra_param|
118
+ data[extra_param.keys.first] = extra_param.values.first
119
+ end
120
+ end
121
+
122
+ def to_amount(amount)
123
+ "%.2f" % BigDecimal(amount.to_s.to_f.to_s).round(2).to_s("F") if amount
124
+ end
125
+
126
+ def xml_builder
127
+ Nokogiri::XML::Builder.new(encoding: PagSeguro.encoding) do |xml|
128
+ xml.send(:checkout) {
129
+ xml_serialize_receivers(xml)
130
+ xml_serialize_sender(xml, payment_request.sender)
131
+ xml.send(:currency, payment_request.currency)
132
+ xml.send(:reference, payment_request.reference)
133
+ xml.send(:redirectURL, payment_request.redirect_url)
134
+ xml.send(:notificationURL, payment_request.notification_url)
135
+ xml_serialize_items(xml, payment_request.items)
136
+ }
137
+ end
138
+ end
139
+
140
+ def xml_serialize_items(xml, items)
141
+ xml.send(:items) {
142
+ items.each do |item|
143
+ xml.send(:item) {
144
+ xml.send(:id, item.id)
145
+ xml.send(:description, item.description)
146
+ xml.send(:quantity, item.quantity)
147
+ xml.send(:amount, to_amount(item.amount))
148
+ xml.send(:weight, item.weight) if item.weight
149
+ xml.send(:shippingCost, to_amount(item.shipping_cost))
150
+ }
151
+ end
152
+ }
153
+ end
154
+
155
+ def xml_serialize_documents(xml, documents)
156
+ return if documents.empty?
157
+
158
+ xml.send(:documents) {
159
+ documents.each do |document|
160
+ xml.send(:document) {
161
+ xml.send(:type, document.type)
162
+ xml.send(:value, document.value)
163
+ }
164
+ end
165
+ }
166
+ end
167
+
168
+ def xml_serialize_sender(xml, sender)
169
+ return unless sender
170
+
171
+ xml.send(:sender) {
172
+ xml.send(:name, sender.name)
173
+ xml.send(:email, sender.email)
174
+ if sender.phone
175
+ xml.send(:phone) {
176
+ xml.send(:areaCode, sender.phone.area_code)
177
+ xml.send(:number, sender.phone.number)
178
+ }
179
+ end
180
+
181
+ xml_serialize_documents(xml, sender.documents)
182
+ }
183
+ end
184
+
185
+ def xml_serialize_receivers(xml)
186
+ xml.send(:primaryReceiver) {
187
+ xml.send(:email, payment_request.primary_receiver)
188
+ }
189
+
190
+ xml.send(:receivers) {
191
+ payment_request.receivers.each do |receiver|
192
+ xml.send(:receiver) {
193
+ xml.send(:email, receiver.email)
194
+ xml.send(:split) {
195
+ xml.send(:amount, receiver.split.amount)
196
+ }
197
+ }
198
+ end
199
+ }
200
+ end
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,35 @@
1
+ module PagSeguro
2
+ class PaymentRequest
3
+ class Response
4
+ extend Forwardable
5
+
6
+ def_delegators :response, :success?
7
+ attr_reader :response
8
+
9
+ def initialize(response)
10
+ @response = response
11
+ end
12
+
13
+ def errors
14
+ @errors ||= Errors.new(response)
15
+ end
16
+
17
+ def url
18
+ PagSeguro.site_url("#{api_version}/checkout/payment.html?code=#{code}") if code
19
+ end
20
+
21
+ def code
22
+ @code ||= response.data.css("checkout > code").text if success?
23
+ end
24
+
25
+ def created_at
26
+ @created_at ||= Time.parse(response.data.css("checkout > date").text) if success?
27
+ end
28
+
29
+ # Default PagSeguro API version for payments
30
+ def api_version
31
+ 'v2'
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ module PagSeguro
2
+ class PaymentStatus
3
+ STATUSES = {
4
+ "0" => :initiated,
5
+ "1" => :waiting_payment,
6
+ "2" => :in_analysis,
7
+ "3" => :paid,
8
+ "4" => :available,
9
+ "5" => :in_dispute,
10
+ "6" => :refunded,
11
+ "7" => :cancelled,
12
+ "8" => :chargeback_charged,
13
+ "9" => :contested
14
+ }.freeze
15
+
16
+ # The payment status id.
17
+ attr_reader :id
18
+
19
+ def initialize(id)
20
+ @id = id
21
+ end
22
+
23
+ # Dynamically define helpers.
24
+ STATUSES.each do |id, _status|
25
+ define_method "#{_status}?" do
26
+ _status == status
27
+ end
28
+ end
29
+
30
+ # Return a readable status.
31
+ def status
32
+ STATUSES.fetch(id.to_s) { raise "PagSeguro::PaymentStatus#id isn't mapped" }
33
+ end
34
+
35
+ def description
36
+ I18n.t(id, scope: "pagseguro.payment_status")
37
+ end
38
+ end
39
+ end