add test mode to checkout
This commit is contained in:
@@ -47,6 +47,12 @@ def _status_attr(status: str) -> StatusAttr | None:
|
||||
return None
|
||||
|
||||
|
||||
def _friendly_status(s: str) -> str:
|
||||
if 'status' == 'EXTERNALLY_PAID':
|
||||
return 'PAID'
|
||||
return s
|
||||
|
||||
|
||||
@app.post('/<order_id>/postback')
|
||||
@tracer.capture_method
|
||||
def postback(order_id: str):
|
||||
@@ -73,7 +79,7 @@ def postback(order_id: str):
|
||||
'#status_attr': status_attr.value,
|
||||
},
|
||||
expr_attr_values={
|
||||
':status': status,
|
||||
':status': _friendly_status(status),
|
||||
':now': now_,
|
||||
},
|
||||
exc_cls=OrderNotFoundError,
|
||||
|
||||
@@ -7,8 +7,7 @@ ENROLLMENT_TABLE: str = os.getenv('ENROLLMENT_TABLE') # type: ignore
|
||||
|
||||
IUGU_ACCOUNT_ID: str = 'AF01CF1B3451459F92666F10589278EE'
|
||||
IUGU_API_TOKEN: str = os.getenv('IUGU_API_TOKEN') # type: ignore
|
||||
# IUGU_TEST_MODE: bool = os.getenv('AWS_LAMBDA_FUNCTION_NAME') is None
|
||||
IUGU_TEST_MODE: bool = True
|
||||
IUGU_TEST_MODE: bool = os.getenv('AWS_LAMBDA_FUNCTION_NAME') is None
|
||||
IUGU_POSTBACK_URL = 'https://zjg09ppxq8.execute-api.sa-east-1.amazonaws.com'
|
||||
|
||||
HTTP_CONNECT_TIMEOUT = int(os.environ.get('HTTP_CONNECT_TIMEOUT', 1))
|
||||
|
||||
@@ -8,6 +8,7 @@ from layercake.dateutils import now
|
||||
from layercake.dynamodb import (
|
||||
DynamoDBPersistenceLayer,
|
||||
KeyPair,
|
||||
SortKey,
|
||||
)
|
||||
from layercake.extra_types import CreditCard
|
||||
|
||||
@@ -17,13 +18,6 @@ from iugu import Credentials, Iugu
|
||||
|
||||
logger = Logger(__name__)
|
||||
dyn = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client)
|
||||
iugu = Iugu(
|
||||
Credentials(
|
||||
IUGU_ACCOUNT_ID,
|
||||
IUGU_API_TOKEN,
|
||||
test_mode=IUGU_TEST_MODE,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@event_source(data_class=EventBridgeEvent)
|
||||
@@ -36,6 +30,26 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
|
||||
credit_card = CreditCard(**new_image['credit_card'])
|
||||
now_ = now()
|
||||
|
||||
api_token = dyn.collection.get_item(
|
||||
KeyPair(
|
||||
pk=order_id,
|
||||
sk=SortKey(
|
||||
'METADATA#TEST_MODE',
|
||||
path_spec='iugu_api_token',
|
||||
),
|
||||
),
|
||||
default=None,
|
||||
raise_on_error=False,
|
||||
)
|
||||
test_mode = (api_token is not None) or IUGU_TEST_MODE
|
||||
credentials = Credentials(
|
||||
IUGU_ACCOUNT_ID,
|
||||
# Note: `api_token` can be set from the database
|
||||
api_token or IUGU_API_TOKEN,
|
||||
test_mode=test_mode,
|
||||
)
|
||||
|
||||
iugu = Iugu(credentials)
|
||||
token = iugu.payment_token(credit_card)
|
||||
charge = iugu.charge(
|
||||
invoice_id=invoice_id,
|
||||
|
||||
@@ -24,13 +24,6 @@ from iugu import Credentials, Iugu, Order
|
||||
|
||||
logger = Logger(__name__)
|
||||
dyn = DynamoDBPersistenceLayer(ORDER_TABLE, dynamodb_client)
|
||||
iugu = Iugu(
|
||||
Credentials(
|
||||
IUGU_ACCOUNT_ID,
|
||||
IUGU_API_TOKEN,
|
||||
test_mode=IUGU_TEST_MODE,
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
@event_source(data_class=EventBridgeEvent)
|
||||
@@ -43,14 +36,29 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
|
||||
TransactKey(order_id)
|
||||
+ SortKey('ADDRESS', rename_key='address')
|
||||
+ SortKey('ITEMS', path_spec='items', rename_key='items')
|
||||
+ SortKey('CREDIT_CARD#PAYMENT_INTENT', rename_key='credit_card'),
|
||||
+ SortKey('CREDIT_CARD#PAYMENT_INTENT', rename_key='credit_card')
|
||||
+ SortKey(
|
||||
'METADATA#TEST_MODE',
|
||||
rename_key='iugu_api_token',
|
||||
path_spec='iugu_api_token',
|
||||
),
|
||||
flatten_top=False,
|
||||
)
|
||||
|
||||
api_token = r.get('iugu_api_token')
|
||||
test_mode = (api_token is not None) or IUGU_TEST_MODE
|
||||
credentials = Credentials(
|
||||
IUGU_ACCOUNT_ID,
|
||||
# Note: `api_token` can be set from the database
|
||||
api_token or IUGU_API_TOKEN,
|
||||
test_mode=test_mode,
|
||||
)
|
||||
|
||||
payment_method = new_image['payment_method']
|
||||
is_pix = payment_method == 'PIX'
|
||||
is_bank_slip = payment_method == 'BANK_SLIP'
|
||||
|
||||
iugu = Iugu(credentials)
|
||||
invoice = iugu.create_invoice(
|
||||
order=Order(
|
||||
address=r.get('address', {}),
|
||||
@@ -95,6 +103,15 @@ def lambda_handler(event: EventBridgeEvent, context: LambdaContext) -> bool:
|
||||
cond_expr='attribute_not_exists(sk)',
|
||||
)
|
||||
|
||||
if test_mode:
|
||||
transact.put(
|
||||
item={
|
||||
'id': order_id,
|
||||
'sk': 'SCHEDULE#SELF_DESTRUCTION',
|
||||
'ttl': ttl(start_dt=now_, days=14),
|
||||
'created_at': now_,
|
||||
}
|
||||
)
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
@@ -237,6 +237,7 @@ class Iugu:
|
||||
)
|
||||
r.raise_for_status()
|
||||
except requests.HTTPError as err:
|
||||
logger.info('Response', err.response)
|
||||
logger.exception(err)
|
||||
raise
|
||||
else:
|
||||
|
||||
@@ -39,8 +39,7 @@ Globals:
|
||||
ENROLLMENT_TABLE: !Ref EnrollmentTable
|
||||
COURSE_TABLE: !Ref CourseTable
|
||||
BUCKET_NAME: !Ref BucketName
|
||||
# IUGU_API_TOKEN: '{{resolve:ssm:/saladeaula/iugu_api_token}}'
|
||||
IUGU_API_TOKEN: 419BEF0AD0B4EC180AEF80281BBF3A1CBBCC0EC45C8AE200D8A53ACC994DE639
|
||||
IUGU_API_TOKEN: '{{resolve:ssm:/saladeaula/iugu_api_token}}'
|
||||
|
||||
Resources:
|
||||
EventLog:
|
||||
@@ -102,6 +101,7 @@ Resources:
|
||||
Type: AWS::Serverless::Function
|
||||
Properties:
|
||||
Handler: events.payments.charge_credit_card.lambda_handler
|
||||
Timeout: 12
|
||||
LoggingConfig:
|
||||
LogGroup: !Ref EventLog
|
||||
Policies:
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
{"id": "121c1140-779d-4664-8d99-4a006a22f547", "sk": "ADDRESS", "city": "São José", "neighborhood": "Campinas", "address2": "", "postcode": "88101001", "state": "SC", "address1": "Avenida Presidente Kennedy", "created_at": "2026-01-07T19:07:49.272967-03:00"}
|
||||
{"id": "121c1140-779d-4664-8d99-4a006a22f547", "sk": "ITEMS", "items": [{"name": "CIPA Grau de Risco 2", "id": "99bb3b60-4ded-4a8e-937c-ba2d78ec6454", "quantity": 3, "unit_price": 99}], "created_at": "2026-01-07T19:07:49.272967-03:00"}
|
||||
{"id": "121c1140-779d-4664-8d99-4a006a22f547", "sk": "CREDIT_CARD#PAYMENT_INTENT", "credit_card": {"number": "4111111111111111","cvv": "123","created_at": "2026-01-13T02:33:57.088176-03:00","exp_month": "03","exp_year": "2027","ttl": 1768282737,"holder_name": "Sergio R Siqueira"}}
|
||||
{"id": "121c1140-779d-4664-8d99-4a006a22f547", "sk": "METADATA#TEST_MODE", "iugu_api_token": "123"}
|
||||
|
||||
// User data
|
||||
{"id": "5OxmMjL-ujoR5IMGegQz", "sk": "0", "name": "Sérgio R Siqueira"}
|
||||
|
||||
1187
orders-events/uv.lock
generated
1187
orders-events/uv.lock
generated
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user