WooCommerce plugin
payitgo for WooCommerce adds crypto to a WooCommerce shop's checkout. The customer chooses it, pays on payitgo's hosted checkout, and comes back to the shop; the order is marked paid once the payment is final. No code to write.
| Download | The zip of the latest release |
| Source | github.com/payitgo/woocommerce |
| Needs | WordPress 6.3+, WooCommerce 8.0+, PHP 7.4+ |
| Checkout | The block checkout and the classic checkout |
| Orders | WooCommerce's order tables (HPOS) or posts |
| Shop currency | Any: prices are converted at the rate of the moment (prices in other currencies) |
Install
- Download
payitgo-for-woocommerce-X.Y.Z.zipfrom the latest release, and upload it in WordPress (Plugins > Add New > Upload Plugin). Activate it. - Copy a secret key from your dashboard (Developers > API keys), one with full access (the plugin creates payments; a read-only key cannot): a test key to try it out, a live key for real payments. Several shops on one account: give each the key of its own store.
- In WooCommerce > Settings > Payments > payitgo (crypto), paste the key and enable it.
Nothing else. When you save the settings, the plugin asks payitgo whether
the key is a test or a live key (GET /v1/webhook's livemode) and reads
your webhook's signing secret with it; an unknown key is reported ("payitgo
does not know this secret API key: copy it again from your payitgo
dashboard"). Each payment then tells the shop how it went.
Settings
| Setting | Default | |
|---|---|---|
| Title, Description | "Crypto (USDT, BTC, ETH and more)" | What customers see at checkout |
| Secret API key | A test key to try it out, a live key for real payments. Its mode is the plugin's: a test key's payments are simulated | |
| Signing secret | (read with the key) | Pin one only if you must; otherwise the plugin reads it, and reads it again once if you roll it |
| API address | https://api.payitgo.co |
|
| Debug log | off | WooCommerce > Status > Logs, source payitgo. Errors are always logged |
What it sends
When the customer places the order, the plugin creates a payment:
| Field | From the order |
|---|---|
order_id |
The order number, as it is: 1234 |
amount_usd |
The total, for a shop in US dollars |
price_amount, price_currency |
The total and the shop's currency, for any other shop |
description |
The items: 2 x Acme T-shirt, Mug |
customer_email |
The billing email |
success_url, cancel_url |
The order-received page, and WooCommerce's cancel link |
webhook_url |
The shop's notification address, https://<shop>/wc-api/payitgo/, when the shop is on https |
metadata |
wc_order_id (how the plugin finds the order), wc_order_number, shop |
The customer is then sent to the payment's checkout_url, where they choose
the coin. Paying an order again (after its payment expired) makes a new
payment; while one is open, the customer gets that one.
Several shops on one account
Order ids are unique per store. Create a
store for each shop (Stores in the dashboard) and give
each shop the key of its own store: two shops can then both have an order
1234. Shops that share one key would be given each other's open payment for
the same order number: the plugin refuses such a payment, and logs why.
How orders follow the payment
The plugin verifies each notification,
ignores one it handled already, one of the other mode, or one for a payment
the order did not make, and moves the order by the payment's status:
| Payment | Order |
|---|---|
detecting |
On hold: the money arrived, confirmations are pending |
confirmed |
Paid (processing, or completed for virtual goods), with the transaction id. On hold instead when the payment was for another amount than the order's total |
partially_paid |
A note: the customer can still send the rest |
underpaid |
On hold, with what arrived: refund the customer or agree on the rest |
expired, failed |
Failed: the customer can pay again from their account |
A deposit in another coin (payment.wrong_asset), or after the payment
closed (payment.late_deposit), adds a note. The order-received page also
reads the payment, so a shop that notifications cannot reach (not on https,
or behind a firewall) learns the outcome when the customer comes back.
Test it
With a test key, the checkout page lets you choose how the payment goes:
place an order, choose a coin, and play confirmed: the order goes on hold,
then to processing, within seconds. Play expired to see an order fail, then
pay it again from the customer's account.
Refunds
Not from WooCommerce yet: send the coins back from your wallet, then mark the order refunded.