Skip to content
Snippets Groups Projects
user avatar
Ramakrishnan Muthukrishnan authored
Type class instances for `redeemVoucher` function has a lot of
code duplication. This change refactors them to reuse the main
logic of the code and abstract out parts that differ between
instances.
f0ec4320
History

PaymentServer

PaymentServer maintains the state of a voucher database with respect to payments. It receives payment notifications from payment processors and notes this in the database.

Currently, Stripe is supported.

Building

Build using Stack:

$ stack build

Testing

You can perform manual integration testing against Stripe. First, run the server:

$ stack run

Then configure Stripe with a webhook pointing at the server and receiving the charge.successful event. Configure Stripe with http://<youraddress>:8081/v1/stripe/webhook.

Then create a testing charge using Stripe:

$ STRIPE_SECRET_KEY=sk_test_...
$ curl \
  https://api.stripe.com/v1/charges   \
  -u ${STRIPE_SECRET_KEY}:   \
  -d amount=999   \
  -d currency=usd   \
  -d source=tok_visa   \
  -d 'metadata[Voucher]=abcdefghijk'

This results in Stripe making a callback to the PaymentServer with the charge details. The PaymentServer marks the voucher as paid in its database.