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.
- checksums.yaml +7 -0
- data/.github/.gitignore +204 -0
- data/.github/ISSUE_TEMPLATE/relatorio-de-bug.md +29 -0
- data/.github/workflows/codacy-analysis.yml +46 -0
- data/.gitignore +28 -0
- data/.rspec +1 -0
- data/.travis.yml +13 -0
- data/CHANGELOG.md +95 -0
- data/CONTRIBUTING.md +39 -0
- data/Dockerfile +20 -0
- data/Gemfile +2 -0
- data/LICENSE-2.0.txt +177 -0
- data/README.md +436 -0
- data/Rakefile +5 -0
- data/docker-compose.yml +5 -0
- data/docs/transparent_checkout.md +201 -0
- data/examples/authorization/create_authorization.rb +32 -0
- data/examples/authorization/create_authorization_with_account.rb +56 -0
- data/examples/authorization/search/search_authorization_by_code.rb +29 -0
- data/examples/authorization/search/search_authorization_by_date.rb +35 -0
- data/examples/authorization/search/search_authorization_by_notification_code.rb +29 -0
- data/examples/authorization/search/search_authorization_by_reference.rb +31 -0
- data/examples/boot.rb +26 -0
- data/examples/checkout/create_payment_request.rb +63 -0
- data/examples/checkout/search/search_abandoned_transactions.rb +41 -0
- data/examples/checkout/search/search_transaction_by_code.rb +76 -0
- data/examples/checkout/search/search_transaction_by_notification_code.rb +76 -0
- data/examples/checkout/search/search_transaction_by_reference.rb +36 -0
- data/examples/checkout/search/search_transactions_by_date.rb +45 -0
- data/examples/create_session.rb +19 -0
- data/examples/direct/create_transaction_using_boleto.rb +100 -0
- data/examples/direct/create_transaction_using_credit_card.rb +128 -0
- data/examples/direct/create_transaction_using_online_debit.rb +104 -0
- data/examples/get_installments.rb +40 -0
- data/examples/preapproval/cancel_preapproval.rb +26 -0
- data/examples/preapproval/change_preapproval_payment.rb +50 -0
- data/examples/preapproval/change_preapproval_status.rb +29 -0
- data/examples/preapproval/charge_preapproval.rb +36 -0
- data/examples/preapproval/create_preapproval.rb +68 -0
- data/examples/preapproval/create_preapproval_auto.rb +53 -0
- data/examples/preapproval/create_preapproval_discount.rb +30 -0
- data/examples/preapproval/create_preapproval_manual.rb +58 -0
- data/examples/preapproval/create_preapproval_transparent.rb +41 -0
- data/examples/preapproval/preapproval_retry.rb +29 -0
- data/examples/preapproval/search/search_by_date_interval.rb +45 -0
- data/examples/preapproval/search/search_by_days_interval.rb +46 -0
- data/examples/preapproval/search/search_by_notification_code.rb +50 -0
- data/examples/preapproval/search/search_by_subscription_code.rb +50 -0
- data/examples/preapproval/search/search_subscription_payment_orders.rb +53 -0
- data/examples/request_transaction_cancellation.rb +19 -0
- data/examples/split_payment/create_authorization.rb +32 -0
- data/examples/split_payment/create_payment_request.rb +71 -0
- data/examples/split_payment/create_transaction_using_boleto.rb +118 -0
- data/examples/split_payment/create_transaction_using_credit_card.rb +152 -0
- data/lib/pagseguro-oficial.rb +1 -0
- data/lib/pagseguro.rb +221 -0
- data/lib/pagseguro/account.rb +29 -0
- data/lib/pagseguro/account_credentials.rb +14 -0
- data/lib/pagseguro/address.rb +40 -0
- data/lib/pagseguro/application_credentials.rb +18 -0
- data/lib/pagseguro/authorization.rb +61 -0
- data/lib/pagseguro/authorization/collection.rb +28 -0
- data/lib/pagseguro/authorization/request_serializer.rb +24 -0
- data/lib/pagseguro/authorization/response.rb +49 -0
- data/lib/pagseguro/authorization/response_serializer.rb +40 -0
- data/lib/pagseguro/authorization_request.rb +84 -0
- data/lib/pagseguro/authorization_request/request_serializer.rb +142 -0
- data/lib/pagseguro/authorization_request/response.rb +26 -0
- data/lib/pagseguro/authorization_request/response_serializer.rb +18 -0
- data/lib/pagseguro/bank.rb +8 -0
- data/lib/pagseguro/boleto_transaction_request.rb +8 -0
- data/lib/pagseguro/company.rb +41 -0
- data/lib/pagseguro/config.rb +34 -0
- data/lib/pagseguro/credit_card_transaction_request.rb +39 -0
- data/lib/pagseguro/creditor_fee.rb +23 -0
- data/lib/pagseguro/document.rb +23 -0
- data/lib/pagseguro/documents.rb +5 -0
- data/lib/pagseguro/errors.rb +57 -0
- data/lib/pagseguro/exceptions.rb +3 -0
- data/lib/pagseguro/extensions/collection_object.rb +34 -0
- data/lib/pagseguro/extensions/credentiable.rb +17 -0
- data/lib/pagseguro/extensions/ensure_type.rb +9 -0
- data/lib/pagseguro/extensions/mass_assignment.rb +11 -0
- data/lib/pagseguro/holder.rb +36 -0
- data/lib/pagseguro/installment.rb +57 -0
- data/lib/pagseguro/installment/collection.rb +25 -0
- data/lib/pagseguro/installment/request_serializer.rb +24 -0
- data/lib/pagseguro/installment/response.rb +37 -0
- data/lib/pagseguro/installment/response_serializer.rb +22 -0
- data/lib/pagseguro/item.rb +34 -0
- data/lib/pagseguro/items.rb +23 -0
- data/lib/pagseguro/manual_subscription_charger.rb +59 -0
- data/lib/pagseguro/manual_subscription_charger/request_serializer.rb +50 -0
- data/lib/pagseguro/manual_subscription_charger/response.rb +36 -0
- data/lib/pagseguro/manual_subscription_charger/response_serializer.rb +17 -0
- data/lib/pagseguro/notification.rb +11 -0
- data/lib/pagseguro/notification/authorization.rb +15 -0
- data/lib/pagseguro/notification/transaction.rb +15 -0
- data/lib/pagseguro/online_debit_transaction_request.rb +17 -0
- data/lib/pagseguro/partner.rb +20 -0
- data/lib/pagseguro/payment_method.rb +39 -0
- data/lib/pagseguro/payment_release.rb +21 -0
- data/lib/pagseguro/payment_releases.rb +28 -0
- data/lib/pagseguro/payment_request.rb +117 -0
- data/lib/pagseguro/payment_request/request_serializer.rb +203 -0
- data/lib/pagseguro/payment_request/response.rb +35 -0
- data/lib/pagseguro/payment_status.rb +39 -0
- data/lib/pagseguro/permission.rb +13 -0
- data/lib/pagseguro/person.rb +40 -0
- data/lib/pagseguro/phone.rb +20 -0
- data/lib/pagseguro/phones.rb +5 -0
- data/lib/pagseguro/receiver.rb +20 -0
- data/lib/pagseguro/receiver_split.rb +15 -0
- data/lib/pagseguro/request.rb +170 -0
- data/lib/pagseguro/sender.rb +53 -0
- data/lib/pagseguro/session.rb +34 -0
- data/lib/pagseguro/session/response.rb +32 -0
- data/lib/pagseguro/session/response_serializer.rb +18 -0
- data/lib/pagseguro/shipping.rb +57 -0
- data/lib/pagseguro/subscription.rb +132 -0
- data/lib/pagseguro/subscription/request_serializer.rb +129 -0
- data/lib/pagseguro/subscription/response.rb +49 -0
- data/lib/pagseguro/subscription/response_serializer.rb +62 -0
- data/lib/pagseguro/subscription/subscription_search.rb +135 -0
- data/lib/pagseguro/subscription_canceller.rb +30 -0
- data/lib/pagseguro/subscription_canceller/response.rb +34 -0
- data/lib/pagseguro/subscription_change_payment.rb +46 -0
- data/lib/pagseguro/subscription_change_payment/request_serializer.rb +80 -0
- data/lib/pagseguro/subscription_change_payment/response.rb +26 -0
- data/lib/pagseguro/subscription_change_status.rb +50 -0
- data/lib/pagseguro/subscription_change_status/request_serializer.rb +28 -0
- data/lib/pagseguro/subscription_change_status/response.rb +26 -0
- data/lib/pagseguro/subscription_discount.rb +41 -0
- data/lib/pagseguro/subscription_discount/request_serializer.rb +34 -0
- data/lib/pagseguro/subscription_discount/response.rb +34 -0
- data/lib/pagseguro/subscription_payment_method.rb +21 -0
- data/lib/pagseguro/subscription_payment_order.rb +57 -0
- data/lib/pagseguro/subscription_payment_order/response.rb +37 -0
- data/lib/pagseguro/subscription_payment_order/response_serializer.rb +51 -0
- data/lib/pagseguro/subscription_plan.rb +69 -0
- data/lib/pagseguro/subscription_plan/request_serializer.rb +81 -0
- data/lib/pagseguro/subscription_plan/response.rb +36 -0
- data/lib/pagseguro/subscription_plan/response_serializer.rb +17 -0
- data/lib/pagseguro/subscription_retry.rb +35 -0
- data/lib/pagseguro/subscription_retry/response.rb +34 -0
- data/lib/pagseguro/subscription_search_payment_orders.rb +131 -0
- data/lib/pagseguro/subscription_transaction.rb +29 -0
- data/lib/pagseguro/subscription_transactions.rb +5 -0
- data/lib/pagseguro/transaction.rb +215 -0
- data/lib/pagseguro/transaction/collection.rb +20 -0
- data/lib/pagseguro/transaction/response.rb +45 -0
- data/lib/pagseguro/transaction/search.rb +121 -0
- data/lib/pagseguro/transaction/search/search_abandoned.rb +20 -0
- data/lib/pagseguro/transaction/search/search_by_date.rb +16 -0
- data/lib/pagseguro/transaction/search/search_by_reference.rb +13 -0
- data/lib/pagseguro/transaction/serializer.rb +181 -0
- data/lib/pagseguro/transaction_cancellation.rb +37 -0
- data/lib/pagseguro/transaction_cancellation/request_serializer.rb +18 -0
- data/lib/pagseguro/transaction_cancellation/response.rb +33 -0
- data/lib/pagseguro/transaction_cancellation/response_serializer.rb +17 -0
- data/lib/pagseguro/transaction_installment.rb +11 -0
- data/lib/pagseguro/transaction_refund.rb +44 -0
- data/lib/pagseguro/transaction_refund/request_serializer.rb +24 -0
- data/lib/pagseguro/transaction_refund/response.rb +33 -0
- data/lib/pagseguro/transaction_refund/response_serializer.rb +17 -0
- data/lib/pagseguro/transaction_request.rb +165 -0
- data/lib/pagseguro/transaction_request/request_serializer.rb +311 -0
- data/lib/pagseguro/transaction_request/response.rb +33 -0
- data/lib/pagseguro/transaction_request/response_serializer.rb +117 -0
- data/lib/pagseguro/transaction_status.rb +14 -0
- data/lib/pagseguro/version.rb +3 -0
- data/locales/pt-BR.yml +130 -0
- data/pagseguro-oficial.gemspec +31 -0
- data/spec/fixtures/authorization/find_authorization.xml +17 -0
- data/spec/fixtures/authorization/search_authorization.xml +47 -0
- data/spec/fixtures/authorization_request/authorization_request.xml +11 -0
- data/spec/fixtures/authorization_request/authorization_request_with_account.xml +47 -0
- data/spec/fixtures/authorization_request/success.xml +4 -0
- data/spec/fixtures/by_date/success.xml +85 -0
- data/spec/fixtures/installment/success.xml +24 -0
- data/spec/fixtures/invalid_code.xml +7 -0
- data/spec/fixtures/manual_subscription_charger/fail.xml +6 -0
- data/spec/fixtures/manual_subscription_charger/success.xml +4 -0
- data/spec/fixtures/payment_request/failure.xml +7 -0
- data/spec/fixtures/payment_request/success.xml +5 -0
- data/spec/fixtures/refund/success.xml +2 -0
- data/spec/fixtures/session/success.xml +4 -0
- data/spec/fixtures/subscription/fail.xml +6 -0
- data/spec/fixtures/subscription/find_success.xml +28 -0
- data/spec/fixtures/subscription/search_success.xml +18 -0
- data/spec/fixtures/subscription/success.xml +4 -0
- data/spec/fixtures/subscription_canceller/fail.xml +6 -0
- data/spec/fixtures/subscription_change_payment/fail.xml +7 -0
- data/spec/fixtures/subscription_change_status/fail.xml +7 -0
- data/spec/fixtures/subscription_discount/fail.xml +6 -0
- data/spec/fixtures/subscription_payment_order/success.xml +18 -0
- data/spec/fixtures/subscription_plan/fail.xml +6 -0
- data/spec/fixtures/subscription_plan/success.xml +4 -0
- data/spec/fixtures/subscription_retry/fail.xml +7 -0
- data/spec/fixtures/subscription_search_payment_orders/success.xml +43 -0
- data/spec/fixtures/transaction_cancellation/success.xml +2 -0
- data/spec/fixtures/transaction_request/success.xml +58 -0
- data/spec/fixtures/transactions/additional.xml +53 -0
- data/spec/fixtures/transactions/search.xml +40 -0
- data/spec/fixtures/transactions/success.xml +75 -0
- data/spec/fixtures/transactions/without_status_and_type.xml +71 -0
- data/spec/pagseguro/account_credentials_spec.rb +10 -0
- data/spec/pagseguro/account_spec.rb +27 -0
- data/spec/pagseguro/address_spec.rb +17 -0
- data/spec/pagseguro/application_credentials_spec.rb +11 -0
- data/spec/pagseguro/authorization/collection_spec.rb +49 -0
- data/spec/pagseguro/authorization/request_serializer_spec.rb +10 -0
- data/spec/pagseguro/authorization/response_serializer_spec.rb +19 -0
- data/spec/pagseguro/authorization/response_spec.rb +90 -0
- data/spec/pagseguro/authorization_request/request_serializer_spec.rb +323 -0
- data/spec/pagseguro/authorization_request/response_serializer_spec.rb +15 -0
- data/spec/pagseguro/authorization_request/response_spec.rb +36 -0
- data/spec/pagseguro/authorization_request_spec.rb +127 -0
- data/spec/pagseguro/authorization_spec.rb +111 -0
- data/spec/pagseguro/bank_spec.rb +5 -0
- data/spec/pagseguro/boleto_transaction_request_spec.rb +9 -0
- data/spec/pagseguro/company_spec.rb +12 -0
- data/spec/pagseguro/config_spec.rb +5 -0
- data/spec/pagseguro/credit_card_transaction_request_spec.rb +36 -0
- data/spec/pagseguro/creditor_fee_spec.rb +10 -0
- data/spec/pagseguro/document_spec.rb +21 -0
- data/spec/pagseguro/documents_spec.rb +37 -0
- data/spec/pagseguro/errors_spec.rb +145 -0
- data/spec/pagseguro/extensions/collection_object_spec.rb +77 -0
- data/spec/pagseguro/features/create_session_spec.rb +52 -0
- data/spec/pagseguro/features/create_transaction_request_spec.rb +58 -0
- data/spec/pagseguro/holder_spec.rb +10 -0
- data/spec/pagseguro/installment/collection_spec.rb +43 -0
- data/spec/pagseguro/installment/request_serializer_spec.rb +16 -0
- data/spec/pagseguro/installment/response_serializer_spec.rb +33 -0
- data/spec/pagseguro/installment/response_spec.rb +56 -0
- data/spec/pagseguro/installment_spec.rb +50 -0
- data/spec/pagseguro/item_spec.rb +20 -0
- data/spec/pagseguro/items_spec.rb +148 -0
- data/spec/pagseguro/manual_subscription_charger/request_serializer_spec.rb +79 -0
- data/spec/pagseguro/manual_subscription_charger/response_serializer_spec.rb +10 -0
- data/spec/pagseguro/manual_subscription_charger/response_spec.rb +65 -0
- data/spec/pagseguro/manual_subscription_charger_spec.rb +68 -0
- data/spec/pagseguro/notification_spec.rb +6 -0
- data/spec/pagseguro/online_debit_transaction_request_spec.rb +18 -0
- data/spec/pagseguro/pagseguro_spec.rb +82 -0
- data/spec/pagseguro/partner_spec.rb +8 -0
- data/spec/pagseguro/payment_method_spec.rb +42 -0
- data/spec/pagseguro/payment_release_spec.rb +9 -0
- data/spec/pagseguro/payment_releases_spec.rb +34 -0
- data/spec/pagseguro/payment_request/request_serializer_spec.rb +283 -0
- data/spec/pagseguro/payment_request/response_spec.rb +13 -0
- data/spec/pagseguro/payment_request_spec.rb +148 -0
- data/spec/pagseguro/payment_status_spec.rb +33 -0
- data/spec/pagseguro/permission_spec.rb +7 -0
- data/spec/pagseguro/person_spec.rb +10 -0
- data/spec/pagseguro/phone_spec.rb +6 -0
- data/spec/pagseguro/phones_spec.rb +38 -0
- data/spec/pagseguro/receiver_spec.rb +7 -0
- data/spec/pagseguro/receiver_split_spec.rb +7 -0
- data/spec/pagseguro/request_spec.rb +114 -0
- data/spec/pagseguro/sender_spec.rb +25 -0
- data/spec/pagseguro/session/response_serializer_spec.rb +12 -0
- data/spec/pagseguro/session/response_spec.rb +57 -0
- data/spec/pagseguro/session_spec.rb +45 -0
- data/spec/pagseguro/shipping_spec.rb +40 -0
- data/spec/pagseguro/subscription/request_serializer_spec.rb +233 -0
- data/spec/pagseguro/subscription/response_serializer_spec.rb +46 -0
- data/spec/pagseguro/subscription/response_spec.rb +79 -0
- data/spec/pagseguro/subscription/subscription_search_spec.rb +154 -0
- data/spec/pagseguro/subscription_canceller/response_spec.rb +58 -0
- data/spec/pagseguro/subscription_canceller_spec.rb +57 -0
- data/spec/pagseguro/subscription_change_payment/request_serializer_spec.rb +150 -0
- data/spec/pagseguro/subscription_change_payment/response_spec.rb +41 -0
- data/spec/pagseguro/subscription_change_payment_spec.rb +60 -0
- data/spec/pagseguro/subscription_change_status/request_serializer_spec.rb +19 -0
- data/spec/pagseguro/subscription_change_status/response_spec.rb +41 -0
- data/spec/pagseguro/subscription_change_status_spec.rb +53 -0
- data/spec/pagseguro/subscription_discount/request_serializer_spec.rb +27 -0
- data/spec/pagseguro/subscription_discount/response_spec.rb +58 -0
- data/spec/pagseguro/subscription_discount_spec.rb +60 -0
- data/spec/pagseguro/subscription_payment_method_spec.rb +10 -0
- data/spec/pagseguro/subscription_payment_order/response_serializer_spec.rb +24 -0
- data/spec/pagseguro/subscription_payment_order/response_spec.rb +55 -0
- data/spec/pagseguro/subscription_payment_order_spec.rb +27 -0
- data/spec/pagseguro/subscription_plan/request_serializer_spec.rb +253 -0
- data/spec/pagseguro/subscription_plan/response_serializer_spec.rb +10 -0
- data/spec/pagseguro/subscription_plan/response_spec.rb +65 -0
- data/spec/pagseguro/subscription_plan_spec.rb +118 -0
- data/spec/pagseguro/subscription_retry/response_spec.rb +58 -0
- data/spec/pagseguro/subscription_retry_spec.rb +62 -0
- data/spec/pagseguro/subscription_search_payment_order_spec.rb +129 -0
- data/spec/pagseguro/subscription_spec.rb +137 -0
- data/spec/pagseguro/subscription_transaction_spec.rb +24 -0
- data/spec/pagseguro/subscription_transactions_spec.rb +37 -0
- data/spec/pagseguro/transaction/collection_spec.rb +43 -0
- data/spec/pagseguro/transaction/response_spec.rb +60 -0
- data/spec/pagseguro/transaction/search/search_abandoned_spec.rb +55 -0
- data/spec/pagseguro/transaction/search/search_by_date_spec.rb +28 -0
- data/spec/pagseguro/transaction/search/search_by_reference_spec.rb +21 -0
- data/spec/pagseguro/transaction/search_spec.rb +133 -0
- data/spec/pagseguro/transaction/serializer_spec.rb +86 -0
- data/spec/pagseguro/transaction_cancellation/request_serializer_spec.rb +13 -0
- data/spec/pagseguro/transaction_cancellation/response_serializer_spec.rb +9 -0
- data/spec/pagseguro/transaction_cancellation/response_spec.rb +45 -0
- data/spec/pagseguro/transaction_cancellation_spec.rb +60 -0
- data/spec/pagseguro/transaction_installment_spec.rb +6 -0
- data/spec/pagseguro/transaction_refund/request_serializer_spec.rb +15 -0
- data/spec/pagseguro/transaction_refund/response_serializer_spec.rb +12 -0
- data/spec/pagseguro/transaction_refund/response_spec.rb +39 -0
- data/spec/pagseguro/transaction_refund_spec.rb +71 -0
- data/spec/pagseguro/transaction_request/request_serializer_spec.rb +677 -0
- data/spec/pagseguro/transaction_request/response_serializer_spec.rb +52 -0
- data/spec/pagseguro/transaction_request/response_spec.rb +63 -0
- data/spec/pagseguro/transaction_request_spec.rb +156 -0
- data/spec/pagseguro/transaction_spec.rb +265 -0
- data/spec/pagseguro/transaction_status_spec.rb +7 -0
- data/spec/spec_helper.rb +35 -0
- data/spec/support/ensure_type_macro.rb +35 -0
- data/spec/support/helpers.rb +14 -0
- data/spec/support/mass_assignment_macro.rb +11 -0
- data/spec/support/shared_examples_for_configuration.rb +10 -0
- data/transaction/transaction_refund.rb +25 -0
- metadata +641 -0
@@ -0,0 +1,132 @@
|
|
1
|
+
module PagSeguro
|
2
|
+
# It lets you create a subscription without going through PagSeguro screens.
|
3
|
+
class Subscription
|
4
|
+
include Extensions::MassAssignment
|
5
|
+
include Extensions::EnsureType
|
6
|
+
include Extensions::Credentiable
|
7
|
+
|
8
|
+
API_VERSION = :v2
|
9
|
+
TEN_DAYS_IN_SECONDS = 864_000
|
10
|
+
|
11
|
+
# Set the name
|
12
|
+
attr_accessor :name
|
13
|
+
|
14
|
+
# Set the date
|
15
|
+
attr_accessor :date
|
16
|
+
|
17
|
+
# Set the tracker
|
18
|
+
attr_accessor :tracker
|
19
|
+
|
20
|
+
# Set the status
|
21
|
+
attr_accessor :status
|
22
|
+
|
23
|
+
# Set the last event date
|
24
|
+
attr_accessor :last_event_date
|
25
|
+
|
26
|
+
# Set the charge
|
27
|
+
attr_accessor :charge
|
28
|
+
|
29
|
+
# Set the plan
|
30
|
+
attr_accessor :plan
|
31
|
+
|
32
|
+
# Set the reference
|
33
|
+
attr_accessor :reference
|
34
|
+
|
35
|
+
# Get the sender
|
36
|
+
attr_reader :sender
|
37
|
+
|
38
|
+
# Get the payment method
|
39
|
+
attr_reader :payment_method
|
40
|
+
|
41
|
+
# The code of a created to the subscription, must be saved
|
42
|
+
attr_accessor :code
|
43
|
+
|
44
|
+
# Set the sender
|
45
|
+
def sender=(sender)
|
46
|
+
@sender = ensure_type(Sender, sender)
|
47
|
+
end
|
48
|
+
|
49
|
+
# Set the payment method
|
50
|
+
def payment_method=(payment_method)
|
51
|
+
@payment_method = ensure_type(SubscriptionPaymentMethod, payment_method)
|
52
|
+
end
|
53
|
+
|
54
|
+
def update_attributes(attrs)
|
55
|
+
attrs.each {|name, value| send("#{name}=", value) }
|
56
|
+
end
|
57
|
+
|
58
|
+
def create
|
59
|
+
request = Request.post_xml('pre-approvals', nil, credentials, xml_params, extra_options)
|
60
|
+
Response.new(request, self).serialize
|
61
|
+
self
|
62
|
+
end
|
63
|
+
|
64
|
+
def errors
|
65
|
+
@errors ||= Errors.new
|
66
|
+
end
|
67
|
+
|
68
|
+
# Find subscription by notification code
|
69
|
+
def self.find_by_notification_code(code, options={})
|
70
|
+
load_from_response send_request("pre-approvals/notifications/#{code}", options[:credentials])
|
71
|
+
end
|
72
|
+
|
73
|
+
# Find subscription by subscription code
|
74
|
+
def self.find_by_code(code, options={})
|
75
|
+
load_from_response send_request("pre-approvals/#{code}", options[:credentials])
|
76
|
+
end
|
77
|
+
|
78
|
+
def self.search_by_days_interval(options={})
|
79
|
+
# Default options
|
80
|
+
options = {
|
81
|
+
interval: 30,
|
82
|
+
per_page: 50,
|
83
|
+
page: 0
|
84
|
+
}.merge(options)
|
85
|
+
|
86
|
+
SubscriptionSearch.new('pre-approvals/notifications', options)
|
87
|
+
end
|
88
|
+
|
89
|
+
def self.search_by_date_interval(options={})
|
90
|
+
# Default options
|
91
|
+
options = {
|
92
|
+
starts_at: Time.now,
|
93
|
+
ends_at: Time.now - TEN_DAYS_IN_SECONDS,
|
94
|
+
per_page: 50,
|
95
|
+
page: 0
|
96
|
+
}.merge(options)
|
97
|
+
|
98
|
+
SubscriptionSearch.new('pre-approvals', options)
|
99
|
+
end
|
100
|
+
|
101
|
+
def self.load_from_xml(xml)
|
102
|
+
new ResponseSerializer.new(xml).serialize_from_search
|
103
|
+
end
|
104
|
+
|
105
|
+
private
|
106
|
+
|
107
|
+
# Serialize the HTTP response into data.
|
108
|
+
def self.load_from_response(request) # :nodoc:
|
109
|
+
subscription = new
|
110
|
+
Response.new(request, subscription).serialize(:search)
|
111
|
+
|
112
|
+
subscription
|
113
|
+
end
|
114
|
+
|
115
|
+
# Send a get request to API version, with the path given
|
116
|
+
def self.send_request(path, credentials)
|
117
|
+
Request.get_with_auth_on_url(path, API_VERSION, credentials)
|
118
|
+
end
|
119
|
+
|
120
|
+
def xml_params
|
121
|
+
RequestSerializer.new(self).serialize
|
122
|
+
end
|
123
|
+
|
124
|
+
def extra_options
|
125
|
+
{ headers: { "Accept" => "application/vnd.pagseguro.com.br.v1+xml;charset=ISO-8859-1" }}
|
126
|
+
end
|
127
|
+
|
128
|
+
def after_initialize
|
129
|
+
@errors = Errors.new
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
module PagSeguro
|
2
|
+
class Subscription
|
3
|
+
class RequestSerializer
|
4
|
+
# Get the object
|
5
|
+
attr_reader :object
|
6
|
+
|
7
|
+
def initialize(object)
|
8
|
+
@object = object
|
9
|
+
end
|
10
|
+
|
11
|
+
def serialize
|
12
|
+
build.to_xml(save_with:
|
13
|
+
Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS |
|
14
|
+
Nokogiri::XML::Node::SaveOptions::FORMAT
|
15
|
+
)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def build
|
21
|
+
Nokogiri::XML::Builder.new(encoding: PagSeguro.encoding) do |xml|
|
22
|
+
xml.send(:directPreApproval) {
|
23
|
+
xml.send(:plan, object.plan) if object.plan
|
24
|
+
xml.send(:reference, object.reference) if object.reference
|
25
|
+
serialize_sender(xml, object.sender)
|
26
|
+
serialize_payment_method(xml, object.payment_method)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def serialize_sender(xml, sender)
|
32
|
+
return unless sender
|
33
|
+
|
34
|
+
xml.send(:sender) {
|
35
|
+
xml.send(:name, sender.name) if sender.name
|
36
|
+
xml.send(:email, sender.email) if sender.email
|
37
|
+
xml.send(:ip, sender.ip) if sender.ip
|
38
|
+
xml.send(:hash_, sender.hash) if sender.hash
|
39
|
+
|
40
|
+
serialize_phone(xml, sender.phone)
|
41
|
+
serialize_address(xml, sender.address)
|
42
|
+
serialize_documents(xml, sender.documents)
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def serialize_phone(xml, phone)
|
47
|
+
return unless phone
|
48
|
+
|
49
|
+
xml.send(:phone) {
|
50
|
+
xml.send(:areaCode, phone.area_code)
|
51
|
+
xml.send(:number, phone.number)
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
def serialize_address(xml, address)
|
56
|
+
return unless address
|
57
|
+
|
58
|
+
xml.send(:address) {
|
59
|
+
xml.send(:street, address.street) if address.street
|
60
|
+
xml.send(:number, address.number) if address.number
|
61
|
+
xml.send(:complement, address.complement) if address.complement
|
62
|
+
xml.send(:district, address.district) if address.district
|
63
|
+
xml.send(:city, address.city) if address.city
|
64
|
+
xml.send(:state, address.state) if address.state
|
65
|
+
xml.send(:country, address.country) if address.country
|
66
|
+
xml.send(:postalCode, address.postal_code) if address.postal_code
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
def serialize_billing_address(xml, address)
|
71
|
+
return unless address
|
72
|
+
|
73
|
+
xml.send(:billingAddress) {
|
74
|
+
xml.send(:street, address.street) if address.street
|
75
|
+
xml.send(:number, address.number) if address.number
|
76
|
+
xml.send(:complement, address.complement) if address.complement
|
77
|
+
xml.send(:district, address.district) if address.district
|
78
|
+
xml.send(:city, address.city) if address.city
|
79
|
+
xml.send(:state, address.state) if address.state
|
80
|
+
xml.send(:country, address.country) if address.country
|
81
|
+
xml.send(:postalCode, address.postal_code) if address.postal_code
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
def serialize_documents(xml, documents)
|
86
|
+
return if documents.empty?
|
87
|
+
|
88
|
+
xml.send(:documents) {
|
89
|
+
documents.each do |document|
|
90
|
+
serialize_document(xml, document)
|
91
|
+
end
|
92
|
+
}
|
93
|
+
end
|
94
|
+
|
95
|
+
def serialize_document(xml, document)
|
96
|
+
return unless document
|
97
|
+
|
98
|
+
xml.send(:document) {
|
99
|
+
xml.send(:type, document.type)
|
100
|
+
xml.send(:value, document.value)
|
101
|
+
}
|
102
|
+
end
|
103
|
+
|
104
|
+
def serialize_payment_method(xml, payment_method)
|
105
|
+
return unless payment_method
|
106
|
+
|
107
|
+
xml.send(:paymentMethod) {
|
108
|
+
xml.send(:type, payment_method.type)
|
109
|
+
xml.send(:creditCard) {
|
110
|
+
xml.send(:token, payment_method.token)
|
111
|
+
serialize_holder(xml, payment_method.holder)
|
112
|
+
}
|
113
|
+
}
|
114
|
+
end
|
115
|
+
|
116
|
+
def serialize_holder(xml, holder)
|
117
|
+
return unless holder
|
118
|
+
|
119
|
+
xml.send(:holder) {
|
120
|
+
xml.send(:name, holder.name) if holder.name
|
121
|
+
xml.send(:birthDate, holder.birth_date) if holder.birth_date
|
122
|
+
serialize_document(xml, holder.document)
|
123
|
+
serialize_billing_address(xml, holder.billing_address)
|
124
|
+
serialize_phone(xml, holder.phone)
|
125
|
+
}
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module PagSeguro
|
2
|
+
class Subscription
|
3
|
+
class Response
|
4
|
+
# The http response
|
5
|
+
attr_reader :response
|
6
|
+
|
7
|
+
# Set the object that will recive errors or updates
|
8
|
+
attr_reader :object
|
9
|
+
|
10
|
+
def initialize(response, object)
|
11
|
+
@response = response
|
12
|
+
@object = object
|
13
|
+
end
|
14
|
+
|
15
|
+
def serialize(kind = :normal)
|
16
|
+
if success?
|
17
|
+
case kind
|
18
|
+
when :normal
|
19
|
+
object.update_attributes(serialized_data)
|
20
|
+
when :search
|
21
|
+
object.update_attributes(serialized_data_from_search)
|
22
|
+
end
|
23
|
+
else
|
24
|
+
object.errors.add response
|
25
|
+
end
|
26
|
+
|
27
|
+
object
|
28
|
+
end
|
29
|
+
|
30
|
+
def success?
|
31
|
+
response.success? && response.xml?
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def xml
|
37
|
+
Nokogiri::XML(response.body)
|
38
|
+
end
|
39
|
+
|
40
|
+
def serialized_data
|
41
|
+
ResponseSerializer.new(xml).serialize
|
42
|
+
end
|
43
|
+
|
44
|
+
def serialized_data_from_search
|
45
|
+
ResponseSerializer.new(xml).serialize_from_search
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
module PagSeguro
|
2
|
+
class Subscription
|
3
|
+
class ResponseSerializer
|
4
|
+
attr_reader :xml
|
5
|
+
|
6
|
+
def initialize(xml)
|
7
|
+
@xml = xml
|
8
|
+
end
|
9
|
+
|
10
|
+
def serialize
|
11
|
+
{}.tap do |data|
|
12
|
+
data[:code] = xml.css('directPreApproval > code').text
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def serialize_from_search
|
17
|
+
{}.tap do |data|
|
18
|
+
data[:name] = xml.at_css('name').text
|
19
|
+
data[:code] = xml.css('code').text
|
20
|
+
data[:date] = xml.css('date').text
|
21
|
+
data[:tracker] = xml.css('tracker').text
|
22
|
+
data[:status] = xml.css('status').text
|
23
|
+
data[:reference] = xml.css('reference').text
|
24
|
+
data[:last_event_date] = xml.css('lastEventDate').text
|
25
|
+
data[:charge] = xml.css('charge').text
|
26
|
+
data[:sender] = serialize_sender if xml.at_css('sender')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def serialize_sender
|
33
|
+
{}.tap do |data|
|
34
|
+
data[:name] = xml.at_css('sender > name').text
|
35
|
+
data[:email] = xml.at_css('sender > email').text
|
36
|
+
data[:phone] = serialize_phone if xml.at_css('phone')
|
37
|
+
data[:address] = serialize_address if xml.at_css('address')
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def serialize_phone
|
42
|
+
{}.tap do |data|
|
43
|
+
data[:area_code] = xml.css('sender > phone > areaCode').text
|
44
|
+
data[:number] = xml.css('sender > phone > number').text
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def serialize_address
|
49
|
+
{}.tap do |data|
|
50
|
+
data[:street] = xml.at_css('sender > address > street').text
|
51
|
+
data[:number] = xml.at_css('sender > address > number').text
|
52
|
+
data[:complement] = xml.at_css('sender > address > complement').text
|
53
|
+
data[:district] = xml.at_css('sender > address > district').text
|
54
|
+
data[:city] = xml.at_css('sender > address > city').text
|
55
|
+
data[:state] = xml.at_css('sender > address > state').text
|
56
|
+
data[:country] = xml.at_css('sender > address > country').text
|
57
|
+
data[:postal_code] = xml.at_css('sender > address > postalCode').text
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,135 @@
|
|
1
|
+
module PagSeguro
|
2
|
+
class SubscriptionSearch
|
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)
|
18
|
+
@path = path
|
19
|
+
@page = options.delete(:page) || 0
|
20
|
+
@options = options
|
21
|
+
@errors = Errors.new
|
22
|
+
end
|
23
|
+
|
24
|
+
# Return the list of subscriptions.
|
25
|
+
# Each item will be wrapped in a PagSeguro::Subscription instance.
|
26
|
+
# Notice that subscriptions instantiated by the report won't have all attributes.
|
27
|
+
# If you need additional attributes, do a PagSeguro::Subscription.find_by_code
|
28
|
+
# call. Remember that this will perform an additional HTTP request.
|
29
|
+
def subscriptions
|
30
|
+
xml do |xml|
|
31
|
+
xml.css("preApprovalSearchResult > preApprovals > preApproval").map do |node|
|
32
|
+
Subscription.load_from_xml(node)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
# The report's creation date.
|
38
|
+
def created_at
|
39
|
+
xml do |xml|
|
40
|
+
@created_at ||= Time.parse xml.css("preApprovalSearchResult > date").text
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# How many results the report returned on the given page.
|
45
|
+
def results
|
46
|
+
xml do |xml|
|
47
|
+
@results = xml.css("preApprovalSearchResult > resultsInThisPage").text.to_i
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# How many pages the report returned.
|
52
|
+
def total_pages
|
53
|
+
xml do |xml|
|
54
|
+
@total_pages ||= xml.css("preApprovalSearchResult > totalPages").text.to_i
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Detect if the report has a next page.
|
59
|
+
def next_page?
|
60
|
+
page.zero? || page < total_pages
|
61
|
+
end
|
62
|
+
|
63
|
+
# Detect if the report has a previous page.
|
64
|
+
def previous_page?
|
65
|
+
page > 1
|
66
|
+
end
|
67
|
+
|
68
|
+
# Move the page pointer to the next page.
|
69
|
+
def next_page!
|
70
|
+
return unless next_page?
|
71
|
+
@page += 1
|
72
|
+
clear!
|
73
|
+
end
|
74
|
+
|
75
|
+
# Move the page pointer to the previous page.
|
76
|
+
def previous_page!
|
77
|
+
return unless previous_page?
|
78
|
+
@page -= 1
|
79
|
+
clear!
|
80
|
+
end
|
81
|
+
|
82
|
+
# Detect if the report request returned errors.
|
83
|
+
def valid?
|
84
|
+
fetch { errors.empty? }
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
def perform_request_and_serialize
|
89
|
+
@response = Request.get(@path, api_version, params)
|
90
|
+
@errors = Errors.new(@response)
|
91
|
+
end
|
92
|
+
|
93
|
+
# The params that will be sent
|
94
|
+
def params
|
95
|
+
{}.tap do |param|
|
96
|
+
param[:credentials] = options[:credentials]
|
97
|
+
param[:page] = page unless page.zero?
|
98
|
+
param[:maxPageResults] = options[:per_page]
|
99
|
+
param[:initialDate] = options[:starts_at].xmlschema if options[:starts_at]
|
100
|
+
param[:finalDate] = options[:ends_at].xmlschema if options[:ends_at]
|
101
|
+
param[:interval] = options[:interval] if options[:interval]
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# The default PagSeguro API version
|
106
|
+
def api_version
|
107
|
+
:v2
|
108
|
+
end
|
109
|
+
|
110
|
+
def fetched?
|
111
|
+
@fetched
|
112
|
+
end
|
113
|
+
|
114
|
+
def fetched!
|
115
|
+
@fetched = true
|
116
|
+
end
|
117
|
+
|
118
|
+
def clear!
|
119
|
+
@fetched = false
|
120
|
+
end
|
121
|
+
|
122
|
+
def fetch(&block)
|
123
|
+
unless fetched?
|
124
|
+
perform_request_and_serialize
|
125
|
+
fetched!
|
126
|
+
end
|
127
|
+
|
128
|
+
instance_eval(&block)
|
129
|
+
end
|
130
|
+
|
131
|
+
def xml(&block)
|
132
|
+
valid? && block.call(@response.data)
|
133
|
+
end
|
134
|
+
end
|
135
|
+
end
|