DelayedNotify Lambda Function
Quick Reference
- Function Name:
payment3-delayed-notify-${BRANCH} - Handler:
delayednotify.lambda_handler - Runtime: Python 3.12 (Docker Image)
- Timeout: 240 seconds
- Trigger: Invoked by Notify function (asynchronous)
- Template.yaml: Lines 415-457
Function Overview
The DelayedNotify function provides delayed processing for credit card payment notifications. It performs checksum verification, saves notification records, processes paid orders twice (with a 60-second sleep between), and handles delayed payment confirmations. This function is invoked by the Notify function after initial processing completes.
Entry Point
File: functions/callback/delayednotify.py
Handler: lambda_handler(event, _)
def lambda_handler(event, _):
"""Record credit card callback (delayed notify)."""
processor = None
try:
# Verify checksum FIRST before any other processing
checksum_valid, checksum_error, charge_id = verify_and_handle_checksum(
event=event,
function_name="delayednotify",
branch=BRANCH,
debug_mode=DEBUG_MODE
)
if not checksum_valid:
# Log warning but continue processing
print(f"[WARNING] Checksum verification failed: {checksum_error}. Continuing with processing.")
processor = CreditCardCallbackProcessor(
event=event,
branch=BRANCH,
note="delayed notify",
debug_mode=DEBUG_MODE
)
print("start saving")
processor.save()
print("start processing paid order")
r = processor.process_paid_order()
print("process paid order response", r)
print("start sleeping")
processor.sleep(60)
print("stop sleeping")
print("start processing paid order again")
r = processor.process_paid_order()
print("process paid order response 2", r)
print("stop processing paid order")
return processor.response
except Exception as e:
# Log error to callback error log table
orderId = None
chargeId = None
if processor:
try:
orderId = processor.orderId
chargeId = processor.chargeId
except:
pass
log_callback_error(
error=e,
function_name="delayednotify",
event=event,
orderId=orderId,
chargeId=chargeId,
response_data=None
)
send_callback_error_email(
error=e,
function_name="delayednotify",
orderId=orderId,
chargeId=chargeId,
event=event
)
raise
Event Structure
Same as Notify function - receives the same event from Notify invocation.
Checksum Verification
Same checksum verification process as Notify function.
DynamoDB Tables
Same tables as Notify function:
CreditCardNotifyTable- Notification records (write)CardPaymentRecordTable- Payment records (read/update)order-table-dev- Order data (read)
Lambda Invocations
ProcessPaidOrder
Function: payment3-process-paid-order-${BRANCH}
Invoked: Twice - once immediately, once after 60-second sleep
Purpose: Double-check payment status after delay
Invocation Type: Synchronous (via processor.process_paid_order())
Processing Flow
Main Flow
- Verify Checksum: Verify webhook checksum
- Create Processor: Initialize CreditCardCallbackProcessor with note="delayed notify"
- Save Notification: Save to CreditCardNotifyTable
- Process Paid Order (First): Invoke ProcessPaidOrder immediately
- Sleep: Wait 60 seconds
- Process Paid Order (Second): Invoke ProcessPaidOrder again
- Return Response: Return HTML redirect response
Detailed Algorithm
1. Verify checksum (same as Notify)
2. Create CreditCardCallbackProcessor with note="delayed notify"
3. Save notification to CreditCardNotifyTable
4. Invoke ProcessPaidOrder (first time)
5. Sleep for 60 seconds
6. Invoke ProcessPaidOrder (second time)
7. Return HTML redirect response
Error Handling
Same error handling as Notify function:
- Errors logged to CallbackErrorLogTable
- Error email sent via SES
- Exception re-raised
IAM Policies
From template.yaml (lines 425-456):
- Same policies as Notify function
DynamoDBWritePolicyforCreditCardNotifyTableDynamoDBCrudPolicyforCardPaymentRecordTableLambdaInvokePolicyforProcessPaidOrderAWSSecretsManagerGetSecretValuePolicyfor kbank secretsSESCrudPolicyfor error emails
Dependencies
Same as Notify function.
Testing
Test Event Example
Same as Notify function.
Code Structure
File Organization:
functions/callback/
├── delayednotify.py # Main handler
└── src/
├── checksum_handler.py # Checksum verification
└── credit_card_callback_processor.py # Callback processor
Related Functions
- Notify - Invokes this function after processing
- ProcessPaidOrder - Called twice with delay
Key Differences from Notify
- Note Field: Uses note="delayed notify" in CreditCardNotifyTable
- Double Processing: Calls ProcessPaidOrder twice with 60-second delay
- Invocation: Called asynchronously by Notify, not directly via API
References
- Template.yaml: Lines 415-457
- Related Functions: Notify, ProcessPaidOrder
- Checksum Documentation:
functions/callback/docs/CHECKSUM_MARKING_DOCUMENTATION.md