JPM
We currently use jpm for subscription payments. They offer better pricing compared to usio.
Auth
JPM uses mtls for all api calls that we make. The mtls certs are stored in secrets manager, and retrieved once per lambda startup, where they are reused for each invocation.
Some endpoints also require us to sign the body of the request with a json web signature.
The tls and signing certs are created by us and sent to jpm for renewal every year.
Webhooks/Callbacks
JPM will send us a webhook/callback when the status of the payment changes. Note that the completed status does not mean that the payment is final, it just means that JPM has sent it to the ACH network. It can still be returned later.
For our webhook purposes we really only care about RETURNED and REJECTED, which means we need to mark the payment as such in our db.
transactionStatus | Description |
---|---|
PENDING |
Payment pending initial validation. |
ACCEPTED |
Payment received by J.P. Morgan and initial validation completed. |
HOLD |
Payment under internal review. (Only applicable to US ACH) |
CLEARED |
Payment cleared internal review. (Only applicable to US ACH) |
COMPLETED |
Payment completed J.P. Morgan processing and sent to payment network. (Only applicable to US ACH) |
REJECTED |
Payment failed J.P. Morgan processing and not sent to payment network. Payment rejected. |
RETURNED |
Payment sent to payment network. Payment failed to post. Payment returned. |
