-
Notifications
You must be signed in to change notification settings - Fork 0
/
interfaces.py
95 lines (67 loc) · 3.5 KB
/
interfaces.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
from zope.interface import Interface, Attribute
class IMollieIdeal(Interface):
"""A utility that wraps the Mollie iDeal API."""
def get_banks(testmode=False):
"""Return a list of bank id and name tuples.
E.g.: [('0031, 'ABN AMRO'), ('0721', 'Postbank')]
@testmode determines whether we get the actual list of banks
or only the test bank 'The Big Mollie Bank'.
"""
def request_payment(partner_id, bank_id, amount, message, report_url,
return_url, profile_key=None, testmode=False):
"""Return transaction ID and URL to visit.
To send the request, a ``partner_id``, the Mollie account number,
is needed.
Furthermore, the ``bank_id``, ``amount`` and ``message`` are
obviously needed. Note that the ``amount`` is in **cents** and
the ``message`` can only be 29 characters (any more characters
are ignored).
The ``report_url`` is used by Mollie to report that the status
of the transaction can be requested. The ``return_url`` is
where the customer will be redirected to after the payment is
completed (either successfully or not).
Optionally, the ``profile_key`` can be used to select another
profile than the default profile for the ``partnerid``.
"""
def check_payment(partner_id, transaction_id, testmode=False):
"""Check the status of the payment and return a dict with infomation.
With a Mollie account number, ``partner_id``, and the ID of a
transaction, ``transaction_id``, you can retieve the state of
said transaction.
The content of the return value depends on the status of the payment.
If, and only if, the payment succeeded, the return value also
contains information about consumer that payed.
Note that if you call this method too early and the state is
still 'Open' you are effectively never able to check the final
state of the transaction. This is because the status may only
be retrieved ONCE! Subsequent checks will always return a
status 'CheckedBefore' and appear not payed.
In other words: way until Mollie pinged the ``report_url``
which was sent with the ``request_payment`` method.
"""
class IMollieIdealPayment(Interface):
"""Model to store payment information."""
last_update = Attribute('Date/time of last change of the data.')
transaction_id = Attribute('Transaction ID')
amount = Attribute('Amount')
currency = Attribute('Currency')
payed = Attribute('Payed')
consumer = Attribute('Consumer information')
status = Attribute('Status')
last_status = Attribute('Last status')
def get_banks():
"""Return a list of bank id and name tuples.
E.g.: [('0031, 'ABN AMRO'), ('0721', 'Postbank')]
@testmode determines whether we get the actual list of banks
or only the test bank 'The Big Mollie Bank'.
"""
def get_payment_url(partner_id, bank_id, amount, message,
report_url, return_url, profile_key=None):
"""Return the URL to redirect the customer to to do the payment.
Also internally store the data for later reference.
"""
def get_payment_status():
"""Retrieve and return the payment status."""
class IMollieIdealPaymentEvent(Interface):
"""An event signalling that Mollie an iDeal payment has been processed."""
obj = Attribute('The object the payment was processed for.')