ArmPay: Armenian cards
on Shopify.
ArmPay was our Shopify payment app for Armenian banks: ArCa, Visa and Mastercard through the bank's own hosted page. We retired it as a product in October 2026. A gateway built for one merchant is cheaper and simpler to run than a packaged app with a monthly fee, so that is how we build it now.
Status: retired · Stack: Remix · Prisma · Shopify · ArCa · Ameriabank vPOS
Payment flow
Four hops, one paid order.
Shopify order
The order is placed; a Pay now button sends the buyer to our server.
Bank page
The server registers the payment and redirects to the bank's hosted page.
3D Secure
The issuing bank verifies the cardholder with OTP or app approval.
Order paid
The bank callback is verified and the Shopify order is marked paid.
Outside Shopify's Payments Partner Program, a third-party gateway cannot sit inside checkout, so payment happens right after the order is placed. The details are in the post-purchase Pay now extension write-up.
What we built
A full bank gateway, end to end.
ArCa REST client
register.do, order status and refund calls against the ArCa protocol most Armenian acquiring banks run on, with a separate test environment per bank.
Ameriabank vPOS provider
Ameriabank runs its own vPOS API, not the ArCa one. It got its own provider behind the same interface, with its own sandbox and credentials.
Bank-hosted card entry
The card is entered on the bank's page. The store never sees a card number, which keeps the merchant out of PCI scope for card data.
3D Secure
Challenge and frictionless flows handled by the issuing bank. Session expiry mid-challenge is handled, not just the happy path.
Order auto-confirmation
The bank callback marks the Shopify order paid. No one checks the bank portal by hand.
Full and partial refunds
Refunds round-trip to the bank from the Shopify admin, including partial refunds.
What we learned
Four lessons we now build in.
Write the provider interface first
The first bank client was Ameriabank-specific. When the second bank arrived we had to retrofit an abstraction. Any gateway we build now starts with the interface.
Bank codes stay inside the provider
Bank error codes leaked into Shopify-facing logic, so every new code was a small incident. A translation layer (bank codes in, stable codes out) fixes that for a day of work.
Capture and replay every callback
Recording every bank callback and replaying it against new code caught silent wire-format changes before production did. We would build this in week one, not month three.
Bank credentials gate the launch, not code
Mocks always return a clean success. Only a real bank's test credentials prove the integration. The outreach to bank e-commerce teams takes longer than the code.
Why we retired it
One gateway per merchant beats one app for everyone.
Every merchant has one bank, one vPOS contract and one checkout. A packaged app has to support all of them, carry a subscription, and live with App Store review for every change. Building the integration for the merchant's own bank and handing over the code costs less over a year and removes the monthly fee. The ArmPay codebase is the starting point for each of those builds.
More detail: reverse-engineering Ameriabank's VPOS and getting bank test credentials.
Need this for your store?
We build it for your bank.
ArCa banks, Ameriabank vPOS, Idram: a gateway built for your Shopify store and your bank contract, no monthly app fee. See custom payment gateway integrations.