Skip to content
Snippets Groups Projects
stripe-api-double.py 3.07 KiB
Newer Older
  • Learn to ignore specific revisions
  • #!/usr/bin/env python3
    
    from sys import stdout, argv
    from json import dumps
    
    from twisted.internet.defer import Deferred
    from twisted.internet.endpoints import serverFromString
    from twisted.internet.task import react
    from twisted.web.resource import Resource
    from twisted.web.server import Site
    from twisted.python.log import startLogging
    
    class Charges(Resource):
        def render_POST(self, request):
            voucher = request.args[b"metadata[Voucher]"][0].decode("utf-8")
            card = request.args[b"card"][0].decode("utf-8")
            amount = int(request.args[b"amount"][0])
            currency = request.args[b"currency"][0].decode("utf-8")
            response = dumps(charge(card, amount, currency, {u"Voucher": voucher}))
            return response.encode("utf-8")
    
    def main(reactor, listenEndpoint):
        charges = Charges()
        v1 = Resource()
        v1.putChild(b"charges", charges)
        root = Resource()
        root.putChild(b"v1", v1)
    
        return serverFromString(reactor, listenEndpoint).listen(
            Site(root),
        ).addCallback(
            lambda ignored: Deferred()
        )
    
    def charge(source, amount, currency, metadata):
        return {
            "id": "ch_1Fj8frBHXBAMm9bPkekylvAq",
            "object": "charge",
            "amount": amount,
            "amount_refunded": 0,
            "application": None,
            "application_fee": None,
            "application_fee_amount": None,
            "balance_transaction": "txn_1Fj8fr2eZvKYlo2CC5JzIGj5",
            "billing_details": {
                "address": {
                    "city": None,
                    "country": None,
                    "line1": None,
                    "line2": None,
                    "postal_code": None,
                    "state": None
                },
                "email": None,
                "name": None,
                "phone": None
            },
            "captured": False,
            "created": 1574792527,
            "currency": currency,
            "customer": None,
            "description": None,
            "dispute": None,
            "disputed": False,
            "failure_code": None,
            "failure_message": None,
            "fraud_details": {},
            "invoice": None,
            "livemode": False,
            "metadata": metadata,
            "on_behalf_of": None,
            "order": None,
            "outcome": None,
            "paid": True,
            "payment_intent": None,
            "payment_method": source,
            "payment_method_details": {},
            "receipt_email": None,
            "receipt_number": None,
            "receipt_url": "https://pay.stripe.com/receipts/acct_1FhhxTBHXBAMm9bP/ch_1Fj8frBHXBAMm9bPkekylvAq/rcpt_GFdxYuDoGKfYgokh9YA11XhnYC7Gnxp",
            "refunded": False,
            "refunds": {
                "object": "list",
                "data": [],
                "has_more": False,
                "url": "/v1/charges/ch_1Fj8frBHXBAMm9bPkekylvAq/refunds"
            },
            "review": None,
            "shipping": None,
            "source_transfer": None,
            "statement_descriptor": None,
            "statement_descriptor_suffix": None,
            "status": "succeeded",
            "transfer_data": None,
            "transfer_group": None,
            "source": source,
        }
    
    if __name__ == '__main__':
        startLogging(stdout)
        react(main, argv[1:])