DPay for Shopify
Bank-transfer orders that confirm themselves. When a customer chooses your bank-transfer payment method, DPay shows them your account, the exact amount and a reference, then tells Shopify the moment the transfer arrives — the order is marked Paid without a screenshot, a WhatsApp message or you checking your banking app.
What the app does, and what it does not
The app is a confirmation tool for Shopify's own manual payment methods. It is not a payment gateway: it does not process, hold or move money, it does not replace Shopify's checkout, and it never sends your customer to another site to pay. Your customer pays you directly, from their own banking app, into your own account — exactly as they do today with a manual bank transfer. What changes is everything after that.
- At checkout the customer picks your manual payment method — you name it *Bank transfer / Easypaisa / JazzCash*. Shopify creates the order as *Payment pending*, as it does for any bank transfer.
- On the thank-you page the DPay block shows what to send and where: your bank or wallet, the account title and number, the exact amount, and a reference like
DPAY-8F4K29. The same block sits on the order status page, for a customer who comes back later from the confirmation email. - The customer makes the transfer from Easypaisa, JazzCash, NayaPay or any bank app and presses I've sent the transfer. The block asks them for nothing else.
- DPay confirms the transfer from your bank's own alert and tells the app, which marks the Shopify order Paid, adds the reference and amount to the order note, and tags it
dpay-paid. The customer's page turns to *Payment received* by itself.
Before you start
- A DPay account at dpay.com.pk with a receiving account (NayaPay recommended: alerts arrive in seconds) and your bank alerts forwarded to DPay under Integrations.
- An API key from Developers. A test key (
dpay_test_sk_…) is enough to set everything up; a live key (dpay_live_sk_…) needs a paid plan and a verified identity. Until your identity is verified in DPay, each order is limited to PKR 1,000. - Your store's currency set to PKR (Settings → General → Store currency). DPay confirms transfers in rupees; the app tells you on its first page if the store sells in another currency.
- Checkout extensibility — every store created since 2023 has it; older stores switch under Settings → Checkout.
Install and connect
- Install the app and open it from your Shopify admin (Apps → DPay).
- Paste the API key, keep or change the payment-method name, and press Connect. The page shows *Connected · your business* and *Webhook · Registered*.
Set up in Shopify (once, about five minutes)
- Settings → Payments → Manual payment methods → Add manual payment method → Create custom payment method. Name it *exactly* as on the app page (default: *Bank transfer / Easypaisa / JazzCash*). In *Additional details* write what customers see at checkout, for example: *After you place the order you will see our account details and the exact amount. Pay from Easypaisa, JazzCash, NayaPay or any bank app — your order confirms automatically, no screenshot needed.* Save.
- Settings → Checkout → Customize. Open the Thank you page from the page picker at the top, Add app block → DPay — bank transfer confirmation, drag it to the top, save. Do the same on the Order status page.
- Optional: Settings → Notifications → Order confirmation, add the reference so the email carries it too:
{% if order.metafields.dpay.reference != blank %}
<p>Bank transfer reference: {{ order.metafields.dpay.reference }}. Your account details and the exact amount are on your order page.</p>
{% endif %}Try it before going live
With a test key, place an order and pick the bank-transfer method. On the thank-you page the block appears within a second or two with your account, the amount and the reference.
A development store cannot use manual payment methods at checkout — Shopify requires its test gateway there. So with a test key the app treats Shopify *test orders* as bank-transfer orders: pay with the test gateway (card number 1) and the block appears just the same. A live key never does this.
To see an order become paid, make the transfer — a small one of your own is the honest test — and press I've sent the transfer. Then swap in the live key.
How an order moves
| What happens | Shopify order |
|---|---|
| Customer picks the bank-transfer method | Payment pending, tag dpay-awaiting, note with the reference and amount |
| Transfer confirmed | Paid (a sale transaction for the outstanding amount), tag dpay-paid, note with the amount |
| DPay finds two transfers that could both be this order | tag dpay-review, note asking you to pick one in the DPay dashboard; the order updates itself when you do |
| Time to pay passes without a transfer | stays pending; the block says so, and a late transfer honoured in DPay still marks the order paid |
| Refund or dispute at DPay | note on the order; refunds are transfers you make from your own bank, record them in Shopify as usual |
A customer who returns to the order status page while the order is still unpaid sees the same account, amount and reference.
The received amount
With *Verification layer for wallet payments* on in your DPay Settings, when two customers owe the same amount at the same time DPay may ask one of them for a rupee or so less, so both transfers can be told apart and confirm automatically instead of waiting for your review. The block always shows the customer the exact amount to send, and the order note records what DPay actually received; the order is still marked paid. The setting is off until you enable it.
Where things are
- Apps → DPay → Bank transfers: every order DPay is confirming, its status, and *Check with DPay* for the impatient.
- On the order: the note carries every step; metafields
dpay.reference,dpay.session_id,dpay.statusare there for templates and reports; tagsdpay-awaiting/dpay-paid/dpay-reviewfor filters and Flow. - In DPay: the transfer itself, with the bank alert it was matched to, under Payments.
Without the app: Shopify Flow
You can run DPay with no app at all, using Shopify Flow (free, made by Shopify). Add a manual payment method whose name contains *DPay*, then one of two setups:
- Any plan, by email. A workflow emails each new DPay order to your private DPay address; DPay emails the customer their payment link, and emails you when the transfer arrives so you can press Mark as paid in Shopify.
- Grow, Advanced or Plus, fully automatic. Flow sends each order to DPay directly and, every ten minutes, marks paid orders Paid in Shopify itself.
The step-by-step, with every value to copy, is in your DPay dashboard under Integrations → Shopify, without an app.
Questions
Is this a payment gateway? No. A payment gateway takes the customer's money, or sends them somewhere to pay. This app does neither: the customer uses Shopify's manual payment method and pays you directly from their own bank. The app's job starts after that — knowing the transfer arrived, and marking the order paid.
Does it work with Shopify's own "Bank Deposit" method? Yes — that is just a manual method with a fixed name. Name yours anything; put the same name in the app.
What does the customer have to type? Nothing. The block shows them what to send and has one button, *I've sent the transfer*.
What if the customer pays later? The order status page shows the same details for as long as the order is waiting, and DPay keeps watching for the transfer after they have pressed the button and closed the page.
Something is wrong. Write to support@dpay.com.pk with the order number and the DPay reference.