Description
Fosia Collect adds a “Pay” or “Donate” form to any page of your WordPress site. People pay with Mobile Money (MTN MoMo, Airtel Money, Orange Money, M-Pesa, Moov Money and the other operators of your PawaPay account), and the money goes straight to your own PawaPay account. Fosia never holds it.
It is made for organisations that do not sell products: NGOs and charities, churches, schools, associations, events. You do not need WooCommerce, a shop or a cart.
You need your own PawaPay merchant account. A Sandbox account to test is free and opens in minutes; PawaPay opens the Live account after checking your organisation (see the FAQ).
How it works
- You add the Fosia Collect form block to a page (or the
[fosia_collect]shortcode) and choose the amounts. - The visitor picks an amount, types their Mobile Money number and presses “Donate” (or “Pay”).
- They are sent to PawaPay’s secure payment page and approve the payment on their phone with their PIN.
- They come back to your page and see the real status, read from PawaPay: “Thank you, your donation was received”, “Payment not received yet” (with “Pay again” and “Check again”), or “Payment failed” with the reason in plain words and “Try again”. Never “thank you” for a payment that did not arrive.
Features
- A Gutenberg block with its settings in the sidebar, and a shortcode for other page builders.
- Donation or payment (only the words change: “Donate” or “Pay”).
- One fixed amount, or up to 6 quick amounts with an optional “Other amount” (with a minimum and a maximum).
- Currency: any Mobile Money currency (RWF, KES, UGX, TZS, XOF, XAF, GHS, NGN, CDF, ZMW…), or USD / EUR converted at the day’s rate into the payer’s Mobile Money currency, with the estimate shown before paying.
- Your title and text; optional fields: name, e-mail, message, and “Give anonymously” (the name is then not recorded).
- An extra field with your own label, required or optional: “Student name”, “Invoice number”, “Member ID”… It shows in Transactions, in the CSV export and on the receipt.
- After payment: your thank-you message, or a thank-you page of your site.
- E-mail receipt to payers who give their e-mail address, sent once PawaPay confirmed the payment (can be turned off).
- An e-mail to your organisation for each payment PawaPay confirms (can be turned off, or sent to another address).
- Refunds, full or partial, through PawaPay (or recorded when made elsewhere), never more than what was paid, with the status followed until final and a note of who refunded.
- Transactions screen: status, amount, amount received in Mobile Money, operator, payer, form, PawaPay reference; filters by status, form, date and mode; CSV export.
- Dashboard: amounts received this month and since the start, totals per form, latest payments, a setup checklist.
- Settings: Sandbox or Live, PawaPay API token (tested before it is saved, stored encrypted, never shown again), callback address with a Copy button, connection test.
- A guided setup opens after activation (it can be skipped at any time).
- In English. The French translation is on translate.wordpress.org and reaches French sites once it is approved.
Payments you can trust
- The amount never comes from the visitor’s browser: the form’s settings are signed by your site, and the visitor only picks one of your amounts (or an “other” amount within your limits).
- A payment is shown as paid only after the plugin asked PawaPay with your own token, and only if the amount and currency PawaPay confirms are exactly those asked. A different amount is put aside as “To check”, never counted as paid.
- PawaPay’s callbacks are never trusted as they are: they only tell the plugin which payment to check with PawaPay. Signed callbacks are verified too.
- A payer who paid and closed the page is still confirmed: the plugin checks with PawaPay in the background (2 minutes after, then at growing intervals for about 9 hours).
- Abuse limits made for shared Wi-Fi (churches, schools, mobile operators): only payments that really start are counted, per phone number, per browser and per connection (60 per 10 minutes by default, adjustable); wrong numbers and “Try again” are never counted. A hidden anti-robot field, nonces and capability checks on every admin action.
Privacy
- Payments are stored in the plugin’s own table on your site, never in public pages.
- Payers’ details (name, e-mail, phone number, message) are erased automatically after the period you choose (6 to 60 months, 24 by default); the amount and the PawaPay reference stay for your accounts. Payments that were never paid are deleted after 90 days.
- WordPress’s personal data export and erasure tools (Tools > Export / Erase Personal Data) include these payments.
- A suggested text for your privacy policy is added to Settings > Privacy.
- No tracking, no advertising, no analytics. One functional cookie (
fcol_session, random, one day) is set only when a form is sent, to protect it against abuse.
Countries
The plugin knows the Mobile Money countries of PawaPay’s API: Benin, Burkina Faso, Cameroon, Congo, DR Congo, Côte d’Ivoire, Ethiopia, Gabon, Ghana, Kenya, Lesotho, Liberia, Malawi, Mali, Mozambique, Nigeria, Rwanda, Senegal, Sierra Leone, Tanzania, Uganda, Zambia and Zimbabwe. You can take payments in the countries and with the operators enabled on your PawaPay account.
External services
PawaPay (payment processor)
The plugin cannot take payments without PawaPay. Requests go to api.pawapay.io (Live) or api.sandbox.pawapay.io (Sandbox), with your PawaPay API token.
- When a visitor sends a form: the plugin checks the Mobile Money number with PawaPay (phone number validation), reads your account’s amount rules (decimals, minimum and maximum, cached for 1 hour), then creates a PawaPay payment page with the amount and currency, the country, the payer’s phone number, a short text (letters and digits of your organisation’s name), a payment id, the address of your page to come back to, and the language. The payer’s name, e-mail address and message are not sent to PawaPay.
- When the payer comes back, when PawaPay sends a result to your callback address, and in the background after a payment was started: the plugin asks PawaPay for the payment’s status, and downloads PawaPay’s public signing keys (cached for 12 hours) to verify signed callbacks.
- When you refund a payment (Transactions > Details and refund): the plugin sends PawaPay a refund (
POST /v2/refunds) with a refund id, the original payment’s id, the amount and the currency, then reads its status (GET /v2/refunds/{id}) until it is final, also in the background (WP-Cron) and when PawaPay sends the refund’s result to your callback address. Nothing about the payer is sent: PawaPay refunds the number that paid. - When you test the connection (guided setup or settings): the plugin reads your PawaPay account configuration.
PawaPay Merchant Terms of Service and Privacy Policy.
ExchangeRate-API (open.er-api.com)
Used only for a form whose currency differs from the payer’s Mobile Money currency (for example a form in USD paid from Rwanda in RWF). When no rates are cached, the plugin requests https://open.er-api.com/v6/latest/{form currency}, when such a form is shown (in the background, with WP-Cron) or sent. Only the currency code is sent: no personal or payment data. Rates are cached for 12 hours.
ExchangeRate-API Terms of Use and privacy.
Fosia (pay.fosiarw.com) — “Quick feedback” when you deactivate, only if you submit it
When you click “Deactivate” on Fosia Collect in Plugins, a “Quick feedback” window asks why. It is optional: nothing is sent if you click “Skip & Deactivate”, the × or Escape (closing it keeps the plugin active).
- Only if you pick a reason and click “Submit & Deactivate”, your site (not your browser) sends once to
https://pay.fosiarw.com/wp-json/fosia/v1/feedback: the reason, the text you typed (optional, 500 characters at most), the product (Fosia Collect), the plugin, WordPress and PHP versions and the site language. - Your site address and your e-mail address are sent only if you tick “You may email me about this” (unticked by default). No payment or payer data and no PawaPay token are ever sent.
- Fosia keeps the answers 12 months, then deletes them.
Fosia Terms of Service and Privacy Policy.
No other external request is made. Links to PawaPay, pay.fosiarw.com and WhatsApp in the admin screens only open when you click them.
Screenshots







Blocks
This plugin provides 1 block.
- Fosia Collect form A Pay or Donate form: visitors pay with Mobile Money (MTN MoMo, Airtel Money, Orange Money, M-Pesa and more) through your PawaPay account.
Installation
- Install Fosia Collect from Plugins > Add New, then activate it. The guided setup opens.
- Choose Sandbox (test) or Live and paste your PawaPay API token: it is tested with PawaPay before it is saved.
- Type your organisation’s name and country.
- Copy the callback address into your PawaPay Dashboard under System Configuration > Callback URLs (Deposits, and Refunds if you will refund from WordPress). This is recommended, not required.
- Click “Create a donation page”: a draft page with the form opens in the editor. Set the amounts in the block settings, publish, and try it with a PawaPay Sandbox test number.
Everything can be changed later in Fosia Collect > Settings.
FAQ
-
Do I need WooCommerce?
-
No. Fosia Collect works on its own, without a shop or a cart.
-
Does it work on a site that also runs WooCommerce?
-
Yes. Fosia Collect does not use WooCommerce and does not change your shop or its checkout: its payments are kept in its own table, with their own callback address and screens. It was tested on a site running WooCommerce and a WooCommerce Mobile Money gateway for the same PawaPay account.
-
Do I need a PawaPay account?
-
Yes. The money goes to your own PawaPay merchant account, never through Fosia.
- Sandbox (testing): free, you open it yourself in a few minutes at dashboard.sandbox.pawapay.io, with no documents.
- Live (real payments): PawaPay opens it after checking your organisation’s documents, from your Sandbox account (how to start). The time this takes depends on PawaPay, not on the plugin.
-
Is it free? Does Fosia take a commission?
-
The plugin is free, with no limit on the number of forms or payments. Fosia takes no commission. The only fees are PawaPay’s own processing fees, agreed between you and PawaPay.
-
How do I add a form?
-
Edit a page, add the “Fosia Collect form” block and set the amounts, the currency and the fields in the block settings. With another page builder, use the shortcode, for example:
[fosia_collect title="Support our school" amounts="1000, 5000, 10000" other="yes"]Shortcode options:
type(donation or payment),title,text,amount(one fixed amount) oramounts(separated by;or|, for exampleamounts="1,000; 5,000; 10,000"),other(yes/no),min,max,currency,country,name,email(off, optional or required),message(yes/no),anonymous(yes/no),field(label of an extra field) andfield_required(yes/no),button,thanks,thanks_url, andid(keeps a form’s totals together when you change its title). -
Where do I find PawaPay test phone numbers?
-
In PawaPay’s documentation: Sandbox test numbers. Forms show “Test mode: no real money” while the plugin is in Sandbox mode.
-
What if the callback address is already used by another plugin?
-
PawaPay keeps one “Deposits” callback address per account. If a shop plugin already uses it, leave it: Fosia Collect still confirms each payment by asking PawaPay when the payer comes back and in the background. The callback only makes the confirmation faster.
-
What does the payer see if the payment fails?
-
“Payment failed”, the reason in plain words (for example “The Mobile Money balance was not enough for this payment”), “No money was taken”, and a “Try again” button. If they come back without paying: “Payment not received yet” with “Pay again” and “Check again”.
-
Can people give anonymously?
-
Yes, if you keep “Offer to give anonymously” on in the block. The payer’s name is then not recorded; the payment shows “Anonymous” in your list.
-
Where are the payments? Can I export them?
-
In Fosia Collect > Transactions, with filters and an “Export CSV” button (the export protects your spreadsheet against formula injection). Fosia Collect > Dashboard shows the totals of each form.
-
Can I refund a payment?
-
Yes, fully or partly, from Fosia Collect > Transactions > Details and refund, through PawaPay with your own token: the money goes back to the Mobile Money number that paid. You can never refund more than what was paid minus the refunds already made, including those you made elsewhere (cash, PawaPay Dashboard) and record on the same screen. Each refund is confirmed before it is sent, its status is checked with PawaPay until it is final, and your notes keep who refunded, when and how much. A payer who received a receipt by e-mail gets an updated one.
-
Not on WordPress?
-
Use Fosia Connect (https://connect.fosiarw.com) for payment links, QR codes and a payment page.
-
Is recurring giving possible?
-
No. Each payment is approved by the payer on their phone; Mobile Money does not allow automatic debits.
-
Does it work with a page cache (LiteSpeed Cache, WP Rocket, Hostinger cache…)?
-
Yes. The form’s page can be cached: just before the form is sent, the page asks your site for a fresh security code (through
admin-ajax.php, which caches never keep), and if a very old page still gets through, it is sent again once, silently. Answers to the form and payment status pages (addresses withfcol_payment) are marked “do not cache”, and LiteSpeed Cache is told directly. If your cache plugin caches query strings anyway, excludefcol_paymentfrom the cache. -
Many people pay from the same Wi-Fi (a church, a school). Will they be blocked?
-
No. Only payments that really start at PawaPay are counted: each phone number may start 5 payments and each browser 10 payments per 10 minutes, and one connection 60 (you can raise it in Settings > Protection against abuse, or with the
fcol_rate_limitsfilter). Mistyped numbers, missing fields and “Pay again” / “Try again” are never counted. -
How do I know which pupil (or invoice, or member) a payment is for?
-
Give the form an extra field: in the block’s Fields panel, type its label (for example “Student name and class”) and choose Required. With the shortcode:
[fosia_collect type="payment" title="Term 1 fees" amount="25000" field="Student name" field_required="yes"]. The answer shows in Transactions, in the CSV export, in your e-mail and on the payer’s receipt. -
A payer without an e-mail address asks for their data or its deletion.
-
WordPress’s export and erasure tools search by e-mail address. For a payer who gave no e-mail, search Fosia Collect > Transactions by their Mobile Money number (or name or reference), then answer from there.
-
What happens to my data if I delete the plugin?
-
The settings (including the encrypted token) are deleted. Your payment records are kept, unless you tick “Delete the payments table too when the plugin is deleted” in the settings first.
Reviews
There are no reviews for this plugin.
Contributors & Developers
“Fosia Collect – Mobile Money Payments & Donations” is open source software. The following people have contributed to this plugin.
ContributorsTranslate “Fosia Collect – Mobile Money Payments & Donations” into your language.
Interested in development?
Browse the code, check out the SVN repository, or subscribe to the development log by RSS.
Changelog
1.0.0
- First version: Pay / Donate block and shortcode, PawaPay payment page, status read from PawaPay, Payments list with CSV export, dashboard with totals per form, settings and guided setup, privacy export and erasure, automatic erasure of payers’ details, in English (French translation submitted to translate.wordpress.org).
