WPRuby Blog

Explore our blog for expert tips on WordPress plugins, development, and eCommerce solutions to grow your online business.

How to Create a Custom Payment Gateway in WooCommerce Without Coding

Blog Image

WooCommerce ships with a handful of payment methods: cards (via Stripe, PayPal, WooPayments), bank transfer, cheque, and cash on delivery. If you need anything else — invoice terms, a purchase-order checkout, a hosted payment link, crypto instructions, or cash on pickup — WooCommerce expects you to build a payment gateway in PHP.

That is more work than most store owners want. A custom gateway class, checkout fields, order status handling, and block-checkout support are a developer project, not a settings-page task.

You do not need that. WooCommerce Custom Payment Gateway Pro lets you add one or more custom payment methods from the WordPress admin. You choose a template (or start from scratch), write the checkout copy, add fields, and decide who sees the method. No PHP, no child theme, no custom plugin.

This guide walks through the full setup: create the gateway, configure checkout, test it as an administrator, then turn it on for customers.

What “custom payment gateway” means here

A custom gateway in this plugin is a checkout payment method you control, for payments that happen outside a card processor.

Typical uses:

  • Pay by invoice (order now, settle later)
  • Bank or wire transfer with your account details
  • Purchase orders with a PO number at checkout
  • Manual payment links (Wise, PayPal.me, Stripe Payment Links)
  • Cash on pickup / pay in store
  • Crypto transfers you confirm by hand

The plugin does not charge cards, store card numbers, or replace Stripe or PayPal. Do not add fields for full card data or CVV. Use a PCI-compliant gateway for cards, and use this plugin for the methods those processors cannot cover.

What you can do without code:

  • Show a titled method at checkout (classic and block checkout)
  • Display instructions, account details, payment links, or QR codes
  • Collect extra fields (text, email, file upload, signature, and more)
  • Set the order to On holdPending payment, or another status
  • Limit who sees the method (role, country, cart total, products, and so on)
  • Optionally POST order data to an external API after checkout

Before you start

You will need:

  • A WooCommerce store with WooCommerce Custom Payment Gateway Pro installed and licensed
  • A clear process for what happens after the customer places the order (who reviews it, how they pay, when you fulfil)
  • (Optional) any bank details, payment link, pickup address, or invoice terms you want to show at checkout

Write the process down first. The settings are easier when you already know the title customers should see, the message at checkout, and the fields your team actually uses.

Step 1: Create the gateway

  1. In WordPress, go to WooCommerce → Settings → Custom Payment Gateways.
  2. Under Create gateway, pick a starting point:
TemplateUse it when
Start from scratchYour process does not match a template, or you want every field empty
Bank Transfer / Wire TransferCustomers pay to your bank account
Pay by InvoiceB2B customers order now and pay later
Manual Payment LinkYou show a hosted link (Wise, PayPal.me, Stripe Payment Links) at checkout
Cash on Pickup / Local PaymentCustomers pay when they collect the order
Crypto Manual PaymentCustomers send crypto; you confirm the transaction
  1. Enter a name such as Bank Transfer or Purchase Order. This is an admin label; you can still change the customer-facing title later.
  2. Create the gateway, then click Configure (or go to WooCommerce → Settings → Payments and click Manage).

Templates pre-fill a title, checkout message, order status, payment details, and a starter form. Start from scratch gives you a blank method you fill in yourself. Either way, every setting below is editable.

The rest of this guide uses a from-scratch gateway so you see every decision. If you picked a template, skip anything already filled in and adjust the copy to match your store.

custom payment woocommerce templates

Step 2: Enable the method and keep it admin-only while you test

On the gateway settings page:

  1. Check Enable Custom Payment.
  2. Check Enable Debug Mode.

Debug mode is the safe way to build a gateway. While it is on, only administrators see the method at checkout. Customers still see your usual card and PayPal options.

Leave debug mode on until you have placed a test order and checked fields, emails, and order status.

Step 3: Set the title, icon, and checkout message

These are the first things customers read.

Method Title — the label next to the other payment methods. Use something they will recognize:

  • Bank Transfer
  • Pay by Invoice
  • Purchase Order
  • Pay in Store
  • Request a Payment Link

Avoid internal names such as CPG-2 or Custom Gateway.

Gateway Icon (optional) — a full URL to a small image (invoice icon, bank logo, and so on). Leave it blank if you do not want an icon.

Customer Message — shown when the method is selected, above payment details and fields. Explain what happens before they place the order.

Example for a from-scratch purchase-order method:

Place your order with a purchase order. We will review the order and send payment instructions. Your order will not be fulfilled until payment is confirmed.

Example for bank transfer:

Pay by bank transfer. Use your order number as the payment reference. We will process the order after the payment has been received.

Keep it to a few sentences. Details such as IBAN, Net 30 terms, or a pickup address belong in payment details (templates) or an Instructions field (from scratch), not in this short message.

Step 4: Choose the order status after checkout

Set Order Status After The Checkout to match when money actually arrives.

StatusTypical use
On holdInvoice, bank transfer, PO, or any method you review before payment
Pending paymentWaiting on the customer to pay; you are not reviewing first
ProcessingPayment is treated as in progress (common for cash on pickup)
CompletedOnly if you treat checkout as fully paid — rarely right for manual methods

For most custom gateways, On hold is the right default. The order is in WooCommerce, stock can be held, and nothing is marked paid until you confirm it.

Avoid Completed unless payment is genuinely finished at checkout. WooCommerce will treat the sale as done before you have the money.

Step 5: Add payment instructions customers should read

Customers need to know how to pay, not only that a method exists.

If you used a template, fill in the Payment details fields on the same settings page. Those appear at checkout, on the thank-you page, and in emails (when that option is enabled). Examples:

  • Bank transfer: bank name, account holder, IBAN, SWIFT/BIC, transfer instructions
  • Pay by invoice: invoice instructions, payment terms, accounts email
  • Manual payment link: provider name, payment URL (shown as a button), optional QR image
  • Cash on pickup: location, hours, contact phone, accepted methods
  • Crypto: coin/network, wallet address, optional QR, transfer instructions

If you started from scratch, add an Instructions field in the field builder (next step) for any copy customers should read but not type — bank details, “include your order number on the transfer,” pickup hours, and so on.

Do not put secrets in checkout copy. Account numbers and wallet addresses are meant to be public payment destinations. API keys and admin-only notes are not.

Step 6: Build the checkout form (only the fields you need)

Scroll to Custom Form. The field builder has three panels: a field palette, a checkout preview, and field settings.

Add a field from the palette, select it in the preview to edit the label and help text, then save changes in the builder.

Useful field types:

Field typeTypical use
TextCompany name, PO number, payment reference, transaction hash
TextareaExtra notes
EmailBilling or accounts contact
File uploadReceipt, PO PDF, screenshot of a transfer
Date / timePreferred pickup slot
Select / radioInvoice by email vs post, department, cost center
CheckboxAccept payment terms
SignatureSign acceptance of terms
InstructionsRead-only copy inside the form

Keep the form short. Every extra field is a reason to abandon checkout.

Build the checkout form

Example for a purchase-order gateway:

Field typeField labelRequiredHelp text
TextCompany nameYesYour registered company name
TextPurchase order numberYesYour internal PO reference
EmailBilling contact emailYesWe will send invoices to this address
File uploadPurchase order PDFNoOptional. PDF, JPG, or PNG, max 5 MB

Set Required to Yes only when checkout should fail without that value. Submitted values appear on the order in admin so your team does not have to email the customer for a PO number later.

Do not add password or text fields for card numbers, expiry, or CVV. The plugin’s old credit-card field is deprecated and cannot be added to new gateways.

Step 7: Add a thank-you note

Customer Note is shown after checkout on the thank-you page and as a customer-visible order note. It is different from the checkout Customer Message.

  • Customer Message — what the method is, before they place the order
  • Customer Note — what happens next, after they place the order

Example:

Thank you for your order. We will review it and email next steps within 1 business day. Quote your order number on all payments and messages.

Include a real contact (accounts inbox or store phone) so they are not stuck waiting in silence.

Step 8: Show the gateway only to the right customers (optional)

An enabled gateway appears for everyone unless you add rules. Many custom methods should not.

On the gateway settings page:

  1. Enable Conditional Display Rules.
  2. Add one or more conditions. In the current version, all conditions must match.

Common setups:

Wholesale or trade accounts only

  • Condition type: User role
  • Operator: is
  • Value: your wholesale role

Logged-in customers only

  • Condition type: Logged-in status
  • Operator: is logged in

One country only

  • Condition type: Customer country
  • Operator: is
  • Value: your country

Minimum order value

  • Condition type: Cart total
  • Operator: greater than
  • Value: 500

Specific products or categories

  • Condition type: Products or Product categories
  • Operator: cart contains
  • Value: the products or categories that allow this method

If the rules do not match, the gateway stays hidden. Card and other methods still show as usual.

You can combine rules — for example, logged-in wholesale customers in the United Kingdom with a cart over £500.

Show the gateway only to the right customers

Step 9: Place a test order

  1. Confirm Enable Debug Mode is still on.
  2. Log in as an administrator.
  3. Add a product to the cart and go to checkout (classic shortcode or block checkout — the plugin supports both).
  4. Select your custom method.

Check that:

  • The title, message, and payment details appear
  • Required fields block checkout when empty
  • Optional file uploads accept the file types you configured
  • The order is created with the status you chose
  • Submitted fields are stored on the order
  • The customer note appears on the thank-you page

If you enabled Add payment info to emails under WooCommerce → Settings → Custom Payment Gateways, confirm the submitted fields also appear in the order email.

When everything looks correct, turn Enable Debug Mode off and save. The method is then available to customers who match your rules (or to everyone, if you did not add rules).

Optional: send the order to another system

If you already create invoices, tickets, or payments in another tool, you do not have to copy orders by hand.

On the same gateway, open Advanced options and enable API requests. You can POST the order ID, total, billing email, and custom field values to an endpoint after checkout, or redirect the customer to an external URL.

Use Send Test Request and the API Logs on that settings page before you rely on it in production. The plugin is the checkout and data handoff; your other system still does the invoicing or payment collection.

For field mapping and headers, see the plugin’s API requests documentation.

After the order: keep a simple workflow

The gateway gets the order into WooCommerce in the right state. Your team still needs a process after that:

  1. Open the new On hold (or Pending payment) order.
  2. Read the submitted fields and any uploaded files.
  3. Send the invoice, confirm the transfer, email the payment link, or prepare the pickup — whatever you promised at checkout.
  4. When payment is confirmed, mark the order Processing or Completed and fulfil as usual.

If the order should not go ahead (failed credit check, missing PO, wrong entity), leave it on hold or cancel it and email the contact from the form. The checkout method does not replace that judgement; it stops the sale from falling out of the store into an email thread.

Custom gateway vs WooCommerce’s built-in methods

WooCommerce Direct bank transferCheck payments, and Cash on delivery are fine when you only need a title and a block of instructions.

Create a custom gateway instead when you need any of the following:

  • Extra checkout fields (PO number, tax ID, receipt upload, signature)
  • Different copy, icons, or order status per method
  • More than one offline method (invoice and bank transfer and pickup)
  • Visibility limited by role, country, cart total, or products
  • A handoff to an invoicing or operations API

You can run both. Many stores keep Stripe or WooPayments for retail cards, bank transfer for one-off wires, and a custom invoice or PO method for approved accounts.

Frequently asked questions

Do I need a developer to add a custom payment method?
Not with this plugin. You create and configure gateways in WooCommerce → Settings. You only need a developer if you want behaviour the plugin does not offer (for example, a fully custom card processor).

Does this charge the customer at checkout?
No. The customer places the order. You collect payment afterwards using the process you described. The plugin does not process cards.

Can I create more than one custom gateway?
Yes. Create as many as you need from templates or from scratch. Each has its own title, fields, rules, and API settings.

Will this work with the WooCommerce block checkout?
Yes. Test on whichever checkout your theme uses (classic shortcode or blocks) before you turn off debug mode.

Can I use this together with Stripe or PayPal?
Yes. Custom methods sit alongside your card gateways. Use conditional rules if you only want the custom method for some customers.

What if I already know I want Pay by Invoice?
Use the Pay by Invoice template and follow the dedicated walkthrough: How to add a Pay by Invoice payment method to WooCommerce.

Get a custom payment method on your store

If checkout currently stops at “pay by card,” add a method that matches how your customers actually pay — invoice, bank transfer, purchase order, pickup, or a hosted link — without writing a gateway class.

WooCommerce Custom Payment Gateway Pro includes templates for the common cases, a checkout field builder, admin-only debug mode, conditional display rules, and optional API handoff.

Install the plugin, create a gateway (template or from scratch), test as an administrator, then turn off debug mode when you are ready for customers to use it.

Need help choosing a template or mapping your accounts workflow? Contact WPRuby support.

Leave a Reply

Your email address will not be published. Required fields are marked *