NEWS
Checkout Files Upload for WooCommerce lets anyone upload PHP. See whether yours is affected
WooCommerce

WooCommerce cash on delivery and card payments in Bulgaria

# TagsWooCommerce
The WPhost team14 min read

If you sell in Bulgaria, you will probably want to offer payment on delivery and payment by card. Cash on delivery in WooCommerce is built in and takes minutes to turn on. For cards you need an account with a payment provider and its plugin. This guide shows how to set up cash on delivery in WooCommerce and which card payment modules work for a shop in Bulgaria.

We go through the cash on delivery settings, four options for card payments, HTTPS, testing and refunds. We give no advice on receipts and taxes. For that you need your accountant.

Turning on cash on delivery in WooCommerce

Open WooCommerce > Settings > Payments. According to the WooCommerce documentation, cash on delivery is under Take offline payments. Click Enable next to "Cash on delivery", then Manage. There are six settings.

SettingWhat it does
Enable/DisableTurns the method on or off.
TitleThe name the customer sees at checkout.
DescriptionThe explanation the customer sees when they choose the method.
InstructionsText for the page after the order and for the emails to the customer.
Enable for shipping methodsLimits the method to chosen shipping methods. An empty field means all methods.
Accept for virtual ordersAllows cash on delivery also for orders with only virtual products.

Set Title to "Наложен платеж" and Description to "Плащане при доставка" (Bulgarian for "Cash on delivery" and "Payment on delivery"), as in the example in Econt's documentation. Untick Accept for virtual orders if you sell virtual products, because there is no courier to collect the money for them.

Cash on delivery only makes sense for a delivery where someone collects the money. So in Enable for shipping methods choose the couriers' methods. If you leave the field empty, the method is offered with all deliveries. With Speedy's module the list has Any "Доставка със Speedy" method, and the documentation of Econt's module requires cash on delivery to be on and limited to "Econt". How the two modules are connected is described in the guide How to set up Econt and Speedy shipping in WooCommerce.

Orders with cash on delivery get the status Processing and stay in it until the money is collected. The WooCommerce documentation asks you to change the status to Completed only after you have confirmed that the payment was received.

Card payment modules for a Bulgarian shop

A payment module is a link between the shop and your account with the provider. Here are four that we can confirm with documentation are made for a Bulgarian shop or work for one.

ProviderPluginWhat you needHow the customer pays
Stripe"WooCommerce Stripe Payment Gateway" in wordpress.org, which its page calls the official plugin of Stripe and WooCommercea Stripe account, Bulgaria is in the list of its countriesin Stripe Elements fields on the checkout page
myPOS"myPOS Checkout" in wordpress.org, created by myPOSa myPOS account and a company based in an EU or EEA country, Bulgaria is in the list on its pageby card, and according to its page also with Apple Pay and Google Pay
BORICA"BORICA Payments" in wordpress.org, from BORICA ADa virtual POS terminalthe customer is redirected to the BORICA page
ePay.bg"ePay.bg payment gateway" by VanboDevelops, in the WooCommerce Marketplacea contract with ePay.bg, which gives you a merchant identification numberthe customer is redirected to ePay.bg

The plugins of Stripe, myPOS and BORICA were created by the companies themselves, Stripe's together with WooCommerce. BORICA AD is a company whose shareholders are 19 banks in the country. The ePay.bg extension is by an independent developer, and the Marketplace puts it in the category "Unofficial Payments". According to its documentation and your contract with ePay.bg, the customer can pay by card, with an ePay.bg account, through EasyPay or through BPay.

If you already use Econt's module, Payments also has a method "Pay with Econt" (EcontPay). Econt's documentation only describes how to turn it on, so ask Econt about its terms.

This is not the full list. Before you choose a provider, read the plugin's page on wordpress.org, its support forum and the latest reviews. Check on the provider's site that it works for your country and type of company, and try a payment in test mode.

Connecting the plugin to your account

First make a backup of the site. Then follow the provider's steps.

  • Stripe. Install and activate "WooCommerce Stripe Payment Gateway" from Plugins > Add New Plugin. In WooCommerce > Settings > Payments click Complete setup next to Stripe and Create or connect an account. Stripe sends you back to your site, and in Account details the statuses of Payment, Payout, Webhook and Sync should be green.
  • myPOS. Install "myPOS Checkout". In your myPOS account choose Stores > Create new store > WooCommerce and One-Click Integration, sign in to your site's admin and approve the connection.
  • BORICA. Install "BORICA Payments" and open it from WooCommerce > Settings > Payments > BORICA Payments. The plugin's page does not describe the individual fields, so ask BORICA or the bank that gives you the terminal about them.
  • ePay.bg. Download the archive from your WooCommerce.com account and upload it from Plugins > Add New Plugin > Upload Plugin. In the settings you enter the merchant identification number, the merchant email, which matches the ePay.bg account, and a secret word. The invoice prefix is digits only and must be different in every shop.

Why card payment needs HTTPS

The WooCommerce documentation says that most payment modules require SSL, and it recommends HTTPS for the whole shop, not only the checkout.

The modules say it in different ways. Stripe writes that in live mode an SSL certificate must be installed on the site, and in its documentation a missing HTTPS is among the causes of the error "An issue occurred generating a connection to Stripe". The myPOS Checkout page writes that without HTTPS the system reverses transactions automatically. The documentation of the ePay.bg extension says SSL is not necessary, because the payment happens on ePay's servers. Even then customers enter addresses and phone numbers on your site, so HTTPS remains necessary.

AutoSSL in cPanel and Let's Encrypt issue certificates for free, and how to move to HTTPS without errors is described in the HTTPS guide. Check three things:

  1. The checkout page opens with https:// and the browser shows a padlock.
  2. In Settings > General both addresses, WordPress Address (URL) and Site Address (URL), start with https://.
  3. If the site was also reachable over http://, turn on a redirect in cPanel. Open Domains and switch on Force HTTPS Redirect for the domain. According to the cPanel documentation, the switch works only for a domain with a valid SSL certificate.

You can also check the second point from Terminal in cPanel. The commands only read and change nothing.

Bash
# cPanel > Terminal, in the site folder
wp option get home
wp option get siteurl

You expect both addresses to start with https://. If the browser warns about insecure content, somewhere there is a link to http://. WooCommerce advises replacing such links with https:// or with relative addresses.

A test payment before the first order

Stripe and myPOS have a test mode, and Stripe also calls it the sandbox.

With Stripe the test connection is separate. In WooCommerce > Settings > Payments click Manage next to Stripe, open the Settings tab and in Account details click Configure connection. In the Test tab choose Create or connect a test account and confirm with Connect. Then tick Enable test mode in the General section and save. All that is left is to put a product in the cart and pay with a test card.

Text
# Stripe, test card (Stripe documentation)
Number: 4242 4242 4242 4242
Expiry: a future date, for example 12/34
CVC: any three digits

With myPOS the test mode simulates payments. Nothing is charged to the card, every transaction succeeds and you can enter any number. The test configuration is on myPOS's page for WooCommerce. For real operation you generate a Configuration Pack in your myPOS account, paste it into the plugin settings and save.

The BORICA Payments page and the ePay.bg documentation do not describe a test mode. Ask BORICA or your bank, and ePay.bg respectively, how a test is done.

Test cash on delivery too. Place an order with a courier delivery. Check that the text from Instructions shows after the order and in the email to the customer and that the order has the status Processing.

Refunding a customer

WooCommerce refunds money in two ways. An automatic refund sends the money back through the same payment method, but it works only if the module supports it. A manual refund only records in WooCommerce that the order was refunded, and you return the money yourself.

Open the order in WooCommerce > Orders, click Refund, enter the quantities or the amount and a note if you like. The button at the bottom is Refund [amount] via [module] for an automatic refund or Refund [amount] manually for a manual one. After an automatic refund the order notes should contain the message "Successfully refunded".

Stripe refunds money from WooCommerce itself, and according to its documentation you should not need to go into the Stripe dashboard. An authorised but uncaptured payment cannot be refunded. According to Stripe, a refund usually appears on the customer's statement after 5 to 10 business days. For myPOS, BORICA and ePay.bg check in the plugin's documentation whether it supports automatic refunds. Cash on delivery has none. There you use Refund [amount] manually and transfer the money from your bank account.

Checklist

  • Cash on delivery is on, and Enable for shipping methods contains only the couriers' methods.
  • Title, Description and Instructions tell the customer what to expect.
  • You have chosen a card provider and have an account with it.
  • The checkout page works over https://, and the addresses in Settings > General start with https://.
  • The provider's plugin is uploaded, set up and tried in test mode.
  • The test order with a card went through and shows in WooCommerce > Orders.
  • You have tried a refund on a test order.
  • Before real payments you have turned test mode off.
  • You have asked your accountant about the documents.

If you do not want to do it yourself

If your customers pay almost only on delivery, you may not need a card plugin yet. Cash on delivery works without plugins, and you add cards when customers ask for them. Deliveries with Econt and Speedy are in a separate guide, How to set up Econt and Speedy shipping in WooCommerce.

When the orders grow, so does the manual work around them. With AI automation for online stores, orders, customer replies, waybills, invoices and documents run without manual work, from the order to the delivery. If you want to see which of this makes sense for your store, write to us through the inquiry form.

Frequently asked questions

How do I turn on cash on delivery in WooCommerce?

Open WooCommerce > Settings > Payments, and under Take offline payments click Enable next to "Cash on delivery", then Manage. For a Bulgarian shop, set Title to "Наложен платеж" and Description to "Плащане при доставка". Cash on delivery is built into WooCommerce and needs no extra plugin.

Why limit cash on delivery to the couriers' shipping methods?

Cash on delivery only makes sense for a delivery where someone collects the money. If the Enable for shipping methods field is left empty, the method is offered with every delivery, so choose the couriers' methods there. Untick Accept for virtual orders too if you sell virtual products, since there is no courier to collect the money for them.

When does a cash on delivery order become Completed?

Cash on delivery orders get the status Processing and stay in it until the money is collected. The WooCommerce documentation asks you to change the status to Completed only after you have confirmed the payment was received.

Which card payment modules work for a shop in Bulgaria?

The guide covers four. Stripe has the "WooCommerce Stripe Payment Gateway" plugin, made together with WooCommerce, myPOS has "myPOS Checkout" and BORICA AD has "BORICA Payments", all three on wordpress.org. For ePay.bg there is the "ePay.bg payment gateway" extension by the independent developer VanboDevelops in the WooCommerce Marketplace, which requires a contract with ePay.bg.

Do I need an SSL certificate for card payments in WooCommerce?

Yes. The WooCommerce documentation says most payment modules require SSL and recommends HTTPS for the whole shop. Stripe requires an SSL certificate in live mode, and according to the myPOS Checkout page the system reverses transactions automatically without HTTPS. AutoSSL in cPanel and Let's Encrypt issue certificates for free.

How do I make a test payment with Stripe?

In WooCommerce > Settings > Payments click Manage next to Stripe, then in the Settings tab under Account details click Configure connection and connect a test account in the Test tab. Then tick Enable test mode and pay for a product with a test card. Do not test with a real card in live mode, because Stripe's terms forbid it.

How do I refund a customer in WooCommerce?

Open the order in WooCommerce > Orders, click Refund and enter the quantities or the amount. An automatic refund goes back through the same payment method if the module supports it, while a manual refund only records the refund and you return the money yourself. Changing the status to Cancelled or Refunded does not return any money.

How do I refund a cash on delivery order?

Cash on delivery has no automatic refund. Use the Refund [amount] manually button on the order and transfer the money from your bank account. Which documents you issue for a refund depends on your business and on the law, so ask your accountant.

Sources

# TagsWooCommerce