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,29 @@
1
+ module PagSeguro
2
+ class SubscriptionTransaction
3
+ include Extensions::MassAssignment
4
+
5
+ STATUSES = {
6
+ waiting_payment: 1,
7
+ in_review: 2,
8
+ paid: 3,
9
+ available: 4,
10
+ in_dispute: 5,
11
+ returned: 6,
12
+ canceled: 7,
13
+ charged: 8,
14
+ temporary_retention: 9
15
+ }
16
+
17
+ attr_accessor :code
18
+ attr_accessor :status
19
+ attr_accessor :date
20
+
21
+ def status_code
22
+ STATUSES[status.to_sym]
23
+ end
24
+
25
+ def ==(object)
26
+ [code, status, date] == [object.code, object.status, object.date]
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,5 @@
1
+ module PagSeguro
2
+ class SubscriptionTransactions
3
+ include Extensions::CollectionObject
4
+ end
5
+ end
@@ -0,0 +1,215 @@
1
+ module PagSeguro
2
+ class Transaction
3
+ ONE_DAY_IN_SECONDS = 86400
4
+ FIFTEEN_MINUTES_IN_SECONDS = 900
5
+
6
+ include Extensions::MassAssignment
7
+ include Extensions::EnsureType
8
+ include Extensions::Credentiable
9
+
10
+ # When the payment request was created.
11
+ attr_accessor :created_at
12
+
13
+ # The transaction code.
14
+ attr_accessor :code
15
+
16
+ # The reference code identifies the order you placed on the payment request.
17
+ # It's used by the store and can be something like the order id.
18
+ attr_accessor :reference
19
+
20
+ # The transaction type.
21
+ attr_accessor :type_id
22
+
23
+ # The last notification's update.
24
+ attr_accessor :updated_at
25
+
26
+ # The transaction status.
27
+ attr_reader :status
28
+
29
+ # The payment method.
30
+ attr_reader :payment_method
31
+
32
+ # The boleto payment url.
33
+ attr_accessor :payment_link
34
+
35
+ # The gross amount.
36
+ attr_accessor :gross_amount
37
+
38
+ # The discount amount.
39
+ attr_accessor :discount_amount
40
+
41
+ # The charged fees.
42
+ attr_reader :creditor_fees
43
+
44
+ # The net amount.
45
+ attr_accessor :net_amount
46
+
47
+ # Set the extra amount applied to the transaction's total.
48
+ # It's considered as an extra charge when positive, or a discount if
49
+ # negative.
50
+ attr_accessor :extra_amount
51
+
52
+ # The installment count.
53
+ attr_accessor :installments
54
+
55
+ # The payer information (who is sending money).
56
+ attr_reader :sender
57
+
58
+ # The shipping information.
59
+ attr_reader :shipping
60
+
61
+ # The cancellation source.
62
+ attr_accessor :cancellation_source
63
+
64
+ # The escrow end date.
65
+ attr_accessor :escrow_end_date
66
+
67
+ # Set the transaction errors.
68
+ attr_reader :errors
69
+
70
+ # Find a transaction by its transactionCode
71
+ # Return a PagSeguro::Transaction instance
72
+ def self.find_by_code(code, options = {})
73
+ load_from_response send_request("transactions/#{code}", options)
74
+ end
75
+
76
+ # Find a transaction by its notificationCode.
77
+ # Return a PagSeguro::Transaction instance.
78
+ def self.find_by_notification_code(code, options = {})
79
+ load_from_response send_request("transactions/notifications/#{code}", options)
80
+ end
81
+
82
+ # Search transactions within a date range.
83
+ # Return a PagSeguro::SearchByDate instance
84
+ #
85
+ # Options:
86
+ #
87
+ # # +starts_at+: the starting date. Defaults to the last 24-hours.
88
+ # # +ends_at+: the ending date.
89
+ # # +page+: the current page.
90
+ # # +per_page+: the result limit.
91
+ #
92
+ def self.find_by_date(options = {}, page = 0)
93
+ options = {
94
+ starts_at: Time.now - ONE_DAY_IN_SECONDS,
95
+ ends_at: Time.now,
96
+ per_page: 50
97
+ }.merge(options)
98
+ SearchByDate.new("transactions", options, page)
99
+ end
100
+
101
+ # Search a transaction by its reference code
102
+ # Return a PagSeguro::SearchByReference instance
103
+ #
104
+ # Options:
105
+ #
106
+ # # +reference+: the transaction reference code
107
+ #
108
+ def self.find_by_reference(reference, options = {})
109
+ SearchByReference.new("transactions", { reference: reference }.merge(options))
110
+ end
111
+
112
+ # Get abandoned transactions.
113
+ # Return a PagSeguro::SearchByDate instance
114
+ #
115
+ # Options:
116
+ #
117
+ # # +starts_at+: the starting date. Defaults to the last 24-hours.
118
+ # # +ends_at+: the ending date. Defaults to 15 minutes ago. **Attention:** you have to set it this to <tt>Time.now - 15 minutes</tt>, otherwise the "finalDate must be lower than allowed limit" error will be returned.
119
+ # # +page+: the current page.
120
+ # # +per_page+: the result limit.
121
+ #
122
+ def self.find_abandoned(options = {}, page = 0)
123
+ options = {
124
+ starts_at: Time.now - ONE_DAY_IN_SECONDS,
125
+ ends_at: Time.now - FIFTEEN_MINUTES_IN_SECONDS,
126
+ per_page: 50
127
+ }.merge(options)
128
+
129
+ SearchAbandoned.new("transactions/abandoned", options, page)
130
+ end
131
+
132
+ # Normalize creditor fees object
133
+ def creditor_fees=(creditor_fees)
134
+ @creditor_fees = ensure_type(CreditorFee, creditor_fees)
135
+ end
136
+
137
+ # Normalize the sender object.
138
+ def sender=(sender)
139
+ @sender = ensure_type(Sender, sender)
140
+ end
141
+
142
+ # Normalize the shipping object.
143
+ def shipping=(shipping)
144
+ @shipping = ensure_type(Shipping, shipping)
145
+ end
146
+
147
+ # Hold the transaction's payments
148
+ def payment_releases
149
+ @payment_releases ||= PaymentReleases.new
150
+ end
151
+
152
+ # Normalize the transaction's payments list
153
+ def payment_releases=(_payments)
154
+ _payments.each { |payment| payment_releases << payment }
155
+ end
156
+
157
+ # Hold the transaction's items.
158
+ def items
159
+ @items ||= Items.new
160
+ end
161
+
162
+ # Normalize the items list.
163
+ def items=(_items)
164
+ _items.each {|item| items << item }
165
+ end
166
+
167
+ # Normalize the payment method.
168
+ def payment_method=(payment_method)
169
+ @payment_method = ensure_type(PaymentMethod, payment_method)
170
+ end
171
+
172
+ # Normalize the payment status.
173
+ def status=(status)
174
+ @status = ensure_type(PaymentStatus, status)
175
+ end
176
+
177
+ # Set errors.
178
+ def errors
179
+ @errors ||= Errors.new
180
+ end
181
+
182
+ # Update all attributes
183
+ def update_attributes(attrs)
184
+ attrs.each { |name, value| send("#{name}=", value) }
185
+ end
186
+
187
+ # Serialize the XML object.
188
+ def self.load_from_xml(xml) # :nodoc:
189
+ new Serializer.new(xml).serialize
190
+ end
191
+
192
+ private
193
+ def self.api_version
194
+ 'v3'
195
+ end
196
+
197
+ def after_initialize
198
+ @errors = Errors.new
199
+ end
200
+
201
+ # Serialize the HTTP response into data.
202
+ def self.load_from_response(request) # :nodoc:
203
+ transaction = new
204
+ response = Response.new(request, transaction)
205
+ response.serialize
206
+
207
+ transaction
208
+ end
209
+
210
+ # Send a get request to v3 API version, with the path given
211
+ def self.send_request(path, options = {})
212
+ Request.get(path, api_version, options)
213
+ end
214
+ end
215
+ end
@@ -0,0 +1,20 @@
1
+ module PagSeguro
2
+ class Transaction
3
+ class Collection
4
+ extend Forwardable
5
+
6
+ def_delegators :@transactions, :each, :empty?, :any?
7
+
8
+ def transactions=(objects)
9
+ @transactions = objects
10
+ end
11
+
12
+ def errors
13
+ @errors ||= Errors.new
14
+ end
15
+
16
+ # PagSeguro::TransactionStatus instances.
17
+ attr_reader :transactions
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,45 @@
1
+ module PagSeguro
2
+ class Transaction
3
+ class Response
4
+ def initialize(response, object)
5
+ @response = response
6
+ @object = object
7
+ end
8
+
9
+ def serialize
10
+ if success?
11
+ object.update_attributes(Serializer.new(xml).serialize)
12
+ else
13
+ object.errors.add response
14
+ end
15
+
16
+ object
17
+ end
18
+
19
+ def serialize_statuses
20
+ if success?
21
+ object.statuses = Serializer.new(xml).serialize_status_history
22
+ else
23
+ object.errors.add(response)
24
+ end
25
+
26
+ object
27
+ end
28
+
29
+ def success?
30
+ response.success? && response.xml?
31
+ end
32
+
33
+ # The http response.
34
+ attr_reader :response
35
+
36
+ # Set the that will receive errors or updates
37
+ attr_reader :object
38
+
39
+ private
40
+ def xml
41
+ Nokogiri::XML(response.body)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,121 @@
1
+ module PagSeguro
2
+ class Search
3
+ # Set the report options.
4
+ #
5
+ # # +per_page+: the page size.
6
+ # # +starts_at+: the report's starting date. Can't be older than 6 months.
7
+ # # +ends_at+: the report's ending date. Can't be greater than 30 days from the starting date.
8
+ #
9
+ attr_reader :options
10
+
11
+ # Set the errors from the report request.
12
+ attr_reader :errors
13
+
14
+ # Return the current page.
15
+ attr_reader :page
16
+
17
+ def initialize(path, options, page = 0)
18
+ @path = path
19
+ @options = options
20
+ @page = page
21
+ end
22
+
23
+ # Return the list of transactions.
24
+ # Each item will be wrapped in a PagSeguro::Transaction instance.
25
+ # Notice that transactions instantiated by the report won't have all attributes.
26
+ # If you need additional attributes, do a PagSeguro::Transaction.find_by_notification_code
27
+ # call. Remember that this will perform an additional HTTP request.
28
+ def transactions
29
+ xml do |xml|
30
+ xml.css("transactionSearchResult > transactions > transaction").map do |node|
31
+ Transaction.load_from_xml(node)
32
+ end
33
+ end
34
+ end
35
+
36
+ # The report's creation date.
37
+ def created_at
38
+ xml do |xml|
39
+ @created_at ||= Time.parse xml.css("transactionSearchResult > date").text
40
+ end
41
+ end
42
+
43
+ # How many results the report returned on the given page.
44
+ def results
45
+ xml do |xml|
46
+ @results ||= xml.css("transactionSearchResult > resultsInThisPage").text.to_i
47
+ end
48
+ end
49
+
50
+ # How many pages the report returned.
51
+ def total_pages
52
+ xml do |xml|
53
+ @total_pages ||= xml.css("transactionSearchResult > totalPages").text.to_i
54
+ end
55
+ end
56
+
57
+ # Detect if the report has a next page.
58
+ def next_page?
59
+ page.zero? || page < total_pages
60
+ end
61
+
62
+ # Detect if the report has a previous page.
63
+ def previous_page?
64
+ page > 1
65
+ end
66
+
67
+ # Move the page pointer to the next page.
68
+ def next_page!
69
+ return unless next_page?
70
+ @page += 1
71
+ clear!
72
+ end
73
+
74
+ # Move the page pointer to the previous page.
75
+ def previous_page!
76
+ return unless previous_page?
77
+ @page -= 1
78
+ clear!
79
+ end
80
+
81
+ # Detect if the report request returned errors.
82
+ def valid?
83
+ fetch { errors.empty? }
84
+ end
85
+
86
+ private
87
+ def perform_request_and_serialize
88
+ raise NotImplementedError.new("'.perform_request_and_serialize' must be implemented in specific search class")
89
+ end
90
+
91
+ # The default PagSeguro API version
92
+ def api_version
93
+ 'v3'
94
+ end
95
+
96
+ def fetched?
97
+ @fetched
98
+ end
99
+
100
+ def fetched!
101
+ @fetched = true
102
+ end
103
+
104
+ def clear!
105
+ @fetched = false
106
+ end
107
+
108
+ def fetch(&block)
109
+ unless fetched?
110
+ perform_request_and_serialize
111
+ fetched!
112
+ end
113
+
114
+ instance_eval(&block)
115
+ end
116
+
117
+ def xml(&block)
118
+ valid? && block.call(@response.data)
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,20 @@
1
+ module PagSeguro
2
+ class SearchAbandoned < PagSeguro::Search
3
+ private
4
+ def perform_request_and_serialize
5
+ @response = Request.get(@path, api_version,
6
+ {
7
+ initialDate: options[:starts_at].xmlschema,
8
+ finalDate: options[:ends_at].xmlschema,
9
+ page: page,
10
+ maxPageResults: options.fetch(:per_page, 50),
11
+ credentials: options[:credentials]
12
+ })
13
+ @errors = Errors.new(@response)
14
+ end
15
+
16
+ def api_version
17
+ 'v2'
18
+ end
19
+ end
20
+ end