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,165 @@
1
+ module PagSeguro
2
+ class TransactionRequest
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 extra amount to be applied to the transaction's total.
24
+ # This value can be used to add an extra charge to the transaction
25
+ # or provide a discount, if negative.
26
+ attr_accessor :extra_amount
27
+
28
+ # Set the reference code.
29
+ # Optional. You can use the reference code to store an identifier so you can
30
+ # associate the PagSeguro transaction to a transaction in your system.
31
+ # Tipically this is the order id.
32
+ attr_accessor :reference
33
+
34
+ # Determines for which url PagSeguro will send the order related
35
+ # notifications codes.
36
+ # Optional. Any change happens in the transaction status, a new notification
37
+ # request will be send to this url. You can use that for update the related
38
+ # order.
39
+ attr_accessor :notification_url
40
+
41
+ # Set the payment mode.
42
+ attr_accessor :payment_mode
43
+
44
+ # The extra parameters for payment request.
45
+ attr_accessor :extra_params
46
+
47
+ # The transaction code returned from api.
48
+ attr_reader :code
49
+
50
+ # The transaction type returned from api.
51
+ attr_reader :type_id
52
+
53
+ # The payment link returned from api.
54
+ attr_reader :payment_link
55
+
56
+ # The transaction status returned from api.
57
+ attr_reader :status
58
+
59
+ # The payment method returned from api.
60
+ attr_reader :payment_method
61
+
62
+ # The gross amount returned from api.
63
+ attr_reader :gross_amount
64
+
65
+ # The discount amount returned from api.
66
+ attr_reader :discount_amount
67
+
68
+ # The net amount returned from api.
69
+ attr_reader :net_amount
70
+
71
+ # The installments number returned from api.
72
+ attr_reader :installment_count
73
+
74
+ # The created at date returned from api
75
+ attr_reader :created_at
76
+
77
+ # The updated at date returned from api
78
+ attr_reader :updated_at
79
+
80
+ attr_writer :errors
81
+
82
+ # Products/items in this payment request.
83
+ def items
84
+ @items ||= Items.new
85
+ end
86
+
87
+ def errors
88
+ @errors ||= Errors.new
89
+ end
90
+
91
+ # Subclasses must implement payment_method
92
+ def payment_method
93
+ raise NotImplementedError.new("'#payment_method' must be implemented in specific class")
94
+ end
95
+
96
+ # Set the payment sender.
97
+ def sender=(sender)
98
+ @sender = ensure_type(Sender, sender)
99
+ end
100
+
101
+ # Set the shipping info.
102
+ def shipping=(shipping)
103
+ @shipping = ensure_type(Shipping, shipping)
104
+ end
105
+
106
+ # Calls the PagSeguro web service and create this request for payment.
107
+ # Return boolean.
108
+ def create
109
+ request = if receivers.empty?
110
+ Request.post('transactions', api_version, params)
111
+ else
112
+ Request.post_xml('transactions/', nil, credentials, xml_params)
113
+ end
114
+
115
+ Response.new(request, self).serialize
116
+ end
117
+
118
+ def update_attributes(attrs)
119
+ attrs.map { |name, value| send("#{name}=", value) }
120
+ end
121
+
122
+ # Set the receivers.
123
+ def receivers=(receivers)
124
+ @receivers = receivers.map do |receiver|
125
+ ensure_type(Receiver, receiver)
126
+ end
127
+ end
128
+
129
+ private
130
+
131
+ attr_writer :code, :type_id, :payment_link, :status, :payment_method,
132
+ :gross_amount, :discount_amount, :net_amount, :installment_count,
133
+ :created_at, :updated_at
134
+
135
+ def before_initialize
136
+ self.currency = "BRL"
137
+ self.extra_params = []
138
+ self.receivers = []
139
+ end
140
+
141
+ def params
142
+ RequestSerializer.new(self).to_params
143
+ end
144
+
145
+ def xml_params
146
+ RequestSerializer.new(self).to_xml_params
147
+ end
148
+
149
+ # Used to set response items from api.
150
+ def items=(items)
151
+ @items = Items.new
152
+ items.map { |item| @items << item }
153
+ end
154
+
155
+ # Used to set the payment method from api.
156
+ def payment_method=(payment_method)
157
+ @payment_method = ensure_type(PaymentMethod, payment_method)
158
+ end
159
+
160
+ private
161
+ def api_version
162
+ 'v2'
163
+ end
164
+ end
165
+ end
@@ -0,0 +1,311 @@
1
+ module PagSeguro
2
+ class TransactionRequest
3
+ class RequestSerializer
4
+ # The transaction request that will be serialized.
5
+ attr_reader :transaction_request
6
+
7
+ def initialize(transaction_request)
8
+ @transaction_request = transaction_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
+ params[:receiverEmail] = PagSeguro.receiver_email
21
+ params[:currency] = transaction_request.currency
22
+ params[:reference] = transaction_request.reference
23
+ params[:extraAmount] = to_amount(transaction_request.extra_amount)
24
+ params[:notificationURL] = transaction_request.notification_url
25
+ params[:paymentMethod] = transaction_request.payment_method
26
+ params[:paymentMode] = transaction_request.payment_mode
27
+ params[:creditCardToken] = transaction_request.credit_card_token if transaction_request.respond_to?(:credit_card_token)
28
+ transaction_request.items.each.with_index(1) do |item, index|
29
+ serialize_item(item, index)
30
+ end
31
+
32
+ serialize_sender(transaction_request.sender)
33
+ serialize_shipping(transaction_request.shipping)
34
+ serialize_extra_params(transaction_request.extra_params)
35
+
36
+ serialize_bank(transaction_request.bank) if transaction_request.respond_to?(:bank)
37
+ serialize_holder(transaction_request.holder) if transaction_request.respond_to?(:holder)
38
+ serialize_billing_address(transaction_request.billing_address) if transaction_request.respond_to?(:billing_address)
39
+ serialize_installment(transaction_request.installment) if transaction_request.respond_to?(:installment)
40
+
41
+ params.delete_if {|key, value| value.nil? }
42
+
43
+ params
44
+ end
45
+
46
+ private
47
+ def params
48
+ @params ||= {}
49
+ end
50
+
51
+ def serialize_item(item, index)
52
+ params["itemId#{index}"] = item.id
53
+ params["itemDescription#{index}"] = item.description
54
+ params["itemAmount#{index}"] = to_amount(item.amount)
55
+ params["itemQuantity#{index}"] = item.quantity
56
+ params["itemShippingCost#{index}"] = to_amount(item.shipping_cost)
57
+ params["itemWeight#{index}"] = item.weight if item.weight
58
+ end
59
+
60
+ def serialize_bank(bank)
61
+ return unless bank
62
+
63
+ params[:bankName] = bank.name
64
+ end
65
+
66
+ def serialize_holder(holder)
67
+ return unless holder
68
+
69
+ params[:creditCardHolderName] = holder.name
70
+ params[:creditCardHolderBirthDate] = holder.birth_date
71
+ params[:creditCardHolderCPF] = holder.document.value
72
+
73
+ serialize_holder_phone(holder.phone)
74
+ end
75
+
76
+ def serialize_holder_phone(phone)
77
+ return unless phone
78
+
79
+ params[:creditCardHolderAreaCode] = phone.area_code
80
+ params[:creditCardHolderPhone] = phone.number
81
+ end
82
+
83
+ def serialize_billing_address(address)
84
+ return unless address
85
+
86
+ params[:billingAddressCountry] = address.country
87
+ params[:billingAddressState] = address.state
88
+ params[:billingAddressCity] = address.city
89
+ params[:billingAddressPostalCode] = address.postal_code
90
+ params[:billingAddressDistrict] = address.district
91
+ params[:billingAddressStreet] = address.street
92
+ params[:billingAddressNumber] = address.number
93
+ params[:billingAddressComplement] = address.complement
94
+ end
95
+
96
+ def serialize_sender(sender)
97
+ return unless sender
98
+
99
+ params[:senderEmail] = sender.email
100
+ params[:senderName] = sender.name
101
+ params[:senderHash] = sender.hash
102
+
103
+ serialize_sender_documents(sender.documents)
104
+ serialize_sender_phone(sender.phone)
105
+ end
106
+
107
+ def serialize_sender_documents(documents)
108
+ return if documents.empty?
109
+
110
+ documents.each do |document|
111
+ params[:senderCPF] = document.value if document.cpf?
112
+ params[:senderCNPJ] = document.value if document.cnpj?
113
+ end
114
+ end
115
+
116
+ def serialize_sender_phone(phone)
117
+ return unless phone
118
+
119
+ params[:senderAreaCode] = phone.area_code
120
+ params[:senderPhone] = phone.number
121
+ end
122
+
123
+ def serialize_shipping(shipping)
124
+ return unless shipping
125
+
126
+ params[:shippingType] = shipping.type_id
127
+ params[:shippingCost] = to_amount(shipping.cost)
128
+
129
+ serialize_shipping_address(shipping.address)
130
+ end
131
+
132
+ def serialize_shipping_address(address)
133
+ return unless address
134
+
135
+ params[:shippingAddressCountry] = address.country
136
+ params[:shippingAddressState] = address.state
137
+ params[:shippingAddressCity] = address.city
138
+ params[:shippingAddressPostalCode] = address.postal_code
139
+ params[:shippingAddressDistrict] = address.district
140
+ params[:shippingAddressStreet] = address.street
141
+ params[:shippingAddressNumber] = address.number
142
+ params[:shippingAddressComplement] = address.complement
143
+ end
144
+
145
+ def serialize_installment(installment)
146
+ return unless installment
147
+
148
+ params[:installmentValue] = to_amount(installment.value)
149
+ params[:installmentQuantity] = installment.quantity
150
+ end
151
+
152
+ def serialize_extra_params(extra_params)
153
+ return unless extra_params
154
+
155
+ extra_params.each do |extra_param|
156
+ params[extra_param.keys.first] = extra_param.values.first
157
+ end
158
+ end
159
+
160
+ def to_amount(amount)
161
+ "%.2f" % BigDecimal(amount.to_s.to_f.to_s).round(2).to_s("F") if amount
162
+ end
163
+
164
+ def xml_builder
165
+ Nokogiri::XML::Builder.new(encoding: PagSeguro.encoding) do |xml|
166
+ xml.send(:payment) {
167
+ xml.mode transaction_request.payment_mode
168
+ xml.method_ transaction_request.payment_method
169
+ xml.currency transaction_request.currency
170
+ xml.notificationURL transaction_request.notification_url
171
+ xml.extraAmount to_amount(transaction_request.extra_amount || 0)
172
+ xml.reference transaction_request.reference
173
+
174
+ xml_serialize_sender(xml, transaction_request.sender)
175
+ xml_serialize_items(xml, transaction_request.items)
176
+ xml_serialize_receivers(xml, transaction_request.receivers)
177
+ xml_serialize_shipping(xml, transaction_request.shipping)
178
+ xml_serialize_credit_card(xml)
179
+ }
180
+ end
181
+ end
182
+
183
+ def xml_serialize_credit_card(xml)
184
+ return unless transaction_request.is_a?(PagSeguro::CreditCardTransactionRequest)
185
+
186
+ xml.send(:creditCard) do
187
+ xml.send(:token, transaction_request.credit_card_token)
188
+
189
+ if transaction_request.installment
190
+ xml.send(:installment) do
191
+ xml.send(:quantity, transaction_request.installment.quantity)
192
+ xml.send(:value, to_amount(transaction_request.installment.value))
193
+ end
194
+ end
195
+
196
+ if transaction_request.billing_address
197
+ xml.send(:billingAddress) do
198
+ xml.send(:street, transaction_request.billing_address.street)
199
+ xml.send(:number, transaction_request.billing_address.number)
200
+ xml.send(:complement, transaction_request.billing_address.complement)
201
+ xml.send(:district, transaction_request.billing_address.district)
202
+ xml.send(:city, transaction_request.billing_address.city)
203
+ xml.send(:state, transaction_request.billing_address.state)
204
+ xml.send(:country, transaction_request.billing_address.country)
205
+ xml.send(:postalCode, transaction_request.billing_address.postal_code)
206
+ end
207
+ end
208
+
209
+ if transaction_request.holder
210
+ xml.send(:holder) do
211
+ xml.send(:name, transaction_request.holder.name)
212
+ xml_serialize_documents(xml, [transaction_request.holder.document])
213
+
214
+ xml.send(:birthDate, transaction_request.holder.birth_date)
215
+ xml_serialize_phone(xml, transaction_request.holder.phone)
216
+ end
217
+ end
218
+ end
219
+ end
220
+
221
+ def xml_serialize_documents(xml, documents = [])
222
+ documents = documents.reject(&:nil?)
223
+
224
+ return if documents.empty?
225
+
226
+ xml.send(:documents) {
227
+ documents.each do |document|
228
+ xml.send(:document) {
229
+ xml.send(:type, document.type)
230
+ xml.send(:value, document.value)
231
+ }
232
+ end
233
+ }
234
+ end
235
+
236
+ def xml_serialize_phone(xml, phone)
237
+ if phone
238
+ xml.send(:phone) {
239
+ xml.send(:areaCode, phone.area_code)
240
+ xml.send(:number, phone.number)
241
+ }
242
+ end
243
+ end
244
+
245
+ def xml_serialize_shipping(xml, shipping)
246
+ return unless shipping
247
+
248
+ xml.send(:shipping) do
249
+ if shipping.address
250
+ xml.send(:address) do
251
+ xml.send(:street, shipping.address.street)
252
+ xml.send(:number, shipping.address.number)
253
+ xml.send(:district, shipping.address.district)
254
+ xml.send(:country, shipping.address.country)
255
+ xml.send(:postalCode, shipping.address.postal_code)
256
+ xml.send(:city, shipping.address.city)
257
+ xml.send(:state, shipping.address.state)
258
+ xml.send(:complement, shipping.address.complement)
259
+ end
260
+ end
261
+ end
262
+ end
263
+
264
+ def xml_serialize_items(xml, items)
265
+ return unless items
266
+
267
+ xml.send(:items) do
268
+ items.each do |item|
269
+ xml.send(:item) do
270
+ xml.send(:id, item.id)
271
+ xml.send(:description, item.description)
272
+ xml.send(:quantity, item.quantity)
273
+ xml.send(:amount, to_amount(item.amount))
274
+ end
275
+ end
276
+ end
277
+ end
278
+
279
+ def xml_serialize_sender(xml, sender)
280
+ return unless sender
281
+
282
+ xml.send(:sender) {
283
+ xml.send(:name, sender.name)
284
+ xml.send(:email, sender.email)
285
+
286
+ xml_serialize_phone(xml, sender.phone)
287
+ xml_serialize_documents(xml, sender.documents)
288
+
289
+ xml.send(:hash_, sender.hash)
290
+ }
291
+ end
292
+
293
+ def xml_serialize_receivers(xml, receivers)
294
+ return if receivers.empty?
295
+
296
+ xml.send(:receivers) {
297
+ receivers.each do |receiver|
298
+ xml.send(:receiver) {
299
+ xml.send(:publicKey, receiver.public_key)
300
+ xml.send(:split) {
301
+ xml.send(:amount, to_amount(receiver.split.amount))
302
+ xml.send(:ratePercent, to_amount(receiver.split.rate_percent))
303
+ xml.send(:feePercent, to_amount(receiver.split.fee_percent))
304
+ }
305
+ }
306
+ end
307
+ }
308
+ end
309
+ end
310
+ end
311
+ end