WooCommerce, Easy Digital Downloads and WHMCS
Install a ready plugin, connect it in one click, and see how orders and invoices follow their payments and receipts.
Three official plugins take card-to-card and bank transfer payments without code. Each one creates a payment for the order or invoice and sends the customer to the hosted checkout, where they pay from their own bank and send the receipt. Your team approves it in the dashboard, and the plugin updates the order. Each plugin verifies every webhook signature and reads the payment back from the API before it changes anything, so a replayed or forged webhook can never mark an order paid.
All three handle receipts waiting for review, partial transfers, overpayments and corrections made in the dashboard, and all three convert your store's currency to rial exactly, without floating-point rounding.
Connect with Bezanbecard
All three plugins connect in one click:
- In the plugin's settings, press Connect with Bezanbecard.
- Sign in to your dashboard, choose test or live mode and approve the store. Owners and admins can approve.
- You return to the store with a one-time code, which the plugin exchanges for a restricted key, a webhook endpoint for every payment event and the redirect signing secret. Nothing is copied by hand.
WooCommerce and Easy Digital Downloads keep both modes, so connect once in test mode and once in live mode; WHMCS holds one mode at a time, so connecting in the other mode replaces its keys. The approval checks that the return and webhook addresses belong to your store's domain, and a live store must use https. Manual key entry stays available.
WooCommerce
Plugin bezanbecard-for-woocommerce. WooCommerce 8.2 or later, PHP 7.4 or later, the classic and the block checkout, and High-Performance Order Storage. Download the zip from the download page and upload it under Plugins → Add New → Upload Plugin.
- Install and activate the plugin, then open WooCommerce → Settings → Payments → Bezanbecard.
- Press Connect with Bezanbecard, or create a secret key and a webhook endpoint yourself and paste the key (
sk_test_…/sk_live_…) and the endpoint's signing secret (whsec_…). The webhook URL ishttps:/./ <your store>/ wp-json/ bezanbecard/ v1/ webhook - Choose the order status after payment, whether to accept partial transfers, and the payment window.
- Place a test order, upload any image as the receipt on the payment page and approve it in your dashboard before switching to live.
Store currencies: Iranian rial (IRR), toman (IRT), thousand rial (IRHR) and thousand toman (IRHT). Order totals must be between 10,000 and 2,000,000,000 rial.
| Payment | Order |
|---|---|
Succeededsucceeded for the order total | Paid, then completed if you chose so; an overpayment or accepted shortfall is noted. |
Succeededsucceeded for another amount (the order was edited after checkout) | On hold, with a note. |
Partially paidpartially_paid | On hold, with what arrived, what is left and the payment page link for the rest. |
Needs reviewrequires_review | On hold, with the reason. |
Awaiting approvalprocessing | On hold: the customer sent a receipt and it waits for your team's review. |
Awaiting transferrequires_payment right after Awaiting approvalprocessing | Pending payment again: the receipt was not approved and nothing arrived; the note carries the payment link. |
Canceledcanceled | Cancelled; the note flags money already received. |
Expiredexpired | Failed, while the order is still pending or on hold. |
A paid order is never reopened automatically. The order screen has a Bezanbecard box with the status, the amounts, the deposits, the payment link to send the customer and a Refresh from Bezanbecard button.
Easy Digital Downloads
Plugin bezanbecard-for-edd. Easy Digital Downloads 3.x (2.x payments as a fallback), WordPress 6.2 or later, PHP 7.4 or later. Download the zip from the download page and upload it under Plugins → Add New → Upload Plugin.
- Set the store currency to rial or toman in Downloads → Settings → General → Currency.
- In Downloads → Settings → Payments, enable Bezanbecard and open its section.
- Press Connect with Bezanbecard with EDD's test mode on, and again with it off. Or paste the keys yourself; the webhook URL is
https:/./ <your site>/ wp-json/ bezanbecard-edd/ v1/ webhook
EDD's test mode uses your test keys. Recognised currency codes: RIAL, IRR, IRT, TOMAN, IRHR, IRHT. While its receipt is reviewed the order is in EDD's Processing status, with a note; a payment that then goes to review keeps it there. It goes back to pending when the receipt is rejected and nothing arrived, or when only part of the money arrived. A short transfer keeps it pending with a note and the payment page asks for the rest; an overpayment completes the order with a note.
WHMCS
Module bezanbecard for WHMCS 8.x on PHP 7.4 to 8.3, for invoices in toman or rial. Download the zip from the download page.
- Copy the module's
modulesfolder into your WHMCS root and activate Bezanbecard under System Settings → Payment Gateways. - Press Connect with Bezanbecard at the top of the module's settings and approve in test mode. Or, by hand: in the dashboard, in test mode, create a secret key, and a webhook endpoint at
https:/with the events/ <your WHMCS>/ modules/ gateways/ callback/ bezanbecard.php payment.processing,payment.updated,payment.partially_paid,payment.succeeded,payment.canceled,deposit.matchedanddeposit.unmatched. - Fill in the module settings (Connect fills the first four):
| Setting | Value |
|---|---|
| Secret key | sk_test_…, or a restricted rk_test_… key with payments set to write |
| Webhook signing secret | The endpoint's whsec_… |
| Redirect signing secret | Optional: the rds_… of the same mode, so a forged return link is refused before any API call |
| Mode | Test or live; it must match the key |
| Invoice currency unit | Toman (amounts times 10) or rial |
| Accept partial payments | On: each transfer is recorded as it arrives. Off: a short transfer waits for your review. |
- Pay a test invoice from the client area, send any image as the receipt and approve it in your dashboard. The invoice turns Paid and Billing → Gateway Log shows a
Successfulrow. - For live, press Connect with Bezanbecard again and approve in live mode, or use a
sk_live_…key, a live webhook endpoint with its own secret, and set the mode to live.
Each matched deposit becomes its own WHMCS transaction, so the invoice balance follows what is still owed. An overpayment becomes client credit, as WHMCS does for any overpaid invoice. When the bank SMS of the same transfer later replaces an approved receipt's deposit (the SMS deposit names it in replaces), nothing new is booked (a higher bank amount books only the difference). WHMCS cannot un-apply a payment from a module, so a lower amount, a detach or a cancel after a deposit was recorded writes a Review row to the gateway log for you to adjust the invoice by hand. The endpoint Connect creates gets the payment events only, so add deposit.matched and deposit.unmatched to it in the dashboard if you want that flag.
Any other platform
Use the API directly or one of the libraries. The plugins' behaviour is a good model: one payment per order (reuse the open one), an Idempotency-Key derived from the order, the order changed only from a payment read back with GET /v1/payments/:id, and webhooks deduplicated on the event id.