in functions/pay_with_stripe/main.py [0:0]
def pay_with_stripe(data, context):
tracer = Tracer(exporter=sde)
if 'data' in data:
payment_request_json = base64.b64decode(data.get('data')).decode()
payment_request = json.loads(payment_request_json)
token = payment_request.get('event_context').get('token')
order_id = payment_request.get('event_context').get('order_id')
trace_id = payment_request.get('event_context').get('trace_id')
tracer.span_context.trace_id = trace_id
with tracer.span(name="process_payment"):
order_data = firestore.collection('orders').document(order_id).get().to_dict()
amount = order_data.get('amount')
email = order_data.get('shipping').get('email')
try:
charge = stripe.Charge.create(
# For US Dollars, Stripe use Cent as the unit
amount=int(amount * 100),
currency='usd',
description='Example charge',
source=token
)
order_data['status'] = 'payment_processed'
event_type = 'payment_processed'
except stripe.error.StripeError as err:
print(err)
order_data['status'] = 'payment_failed'
event_type = 'payment_failed'
firestore.collection('orders').document(order_id).set(order_data)
stream_event(
topic_name=PUBSUB_TOPIC_PAYMENT_COMPLETION,
event_type=event_type,
event_context={
'order_id': order_id,
'email': email,
'order': order_data
}
)
return ''