def collect_payment()

in src/backend/payment/src/collect-payment/collect.py [0:0]


def collect_payment(charge_id):
    """Collects payment from a pre-authorized charge through Payment API

    For more info on Stripe Charge Object: https://stripe.com/docs/api/charges/object

    Parameters
    ----------
    charge_id : string
        Pre-authorized charge ID received from Payment API

    Returns
    -------
    dict
        receiptUrl: string
            receipt URL containing more details about the successful charge

        price: int
            amount collected
    """
    if not payment_endpoint:
        logger.error({"operation": "input_validation", "details": os.environ})
        raise ValueError("Payment API URL is invalid -- Consider reviewing PAYMENT_API_URL env")

    payment_payload = {"chargeId": charge_id}

    try:
        logger.debug({"operation": "payment_collection", "details": payment_payload})
        ret = requests.post(payment_endpoint, json=payment_payload)
        ret.raise_for_status()

        payment_response = ret.json()
        tracer.put_metadata(charge_id, ret)
        logger.info(
            {
                "operation": "payment_collection",
                "details": {
                    "response_headers": ret.headers,
                    "response_payload": payment_response,
                    "response_status_code": ret.status_code,
                    "url": ret.url,
                },
            }
        )

        return {
            "receiptUrl": payment_response["capturedCharge"]["receipt_url"],
            "price": payment_response["capturedCharge"]["amount"],
        }
    except requests.exceptions.RequestException as err:
        logger.exception({"operation": "payment_collection"})
        raise PaymentException(details=err)