{"id":383923,"date":"2026-10-11T19:01:17","date_gmt":"2026-10-11T19:01:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/221-pay-for-woocommerce\/"},"modified":"2026-10-11T19:00:42","modified_gmt":"2026-10-11T19:00:42","slug":"221-pay-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/221-pay-for-woocommerce\/","author":23583329,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.5","requires_php":"7.4","requires_plugins":null,"header_name":"221 Pay for WooCommerce","header_author":"221","header_description":"Wave and Orange Money payments with 221 Pay: hosted payment page, orders marked paid automatically.","assets_banners_color":"","last_updated":"2026-10-11 19:00:42","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/221.orvlabs.com\/pay\/cas-d-usage\/woocommerce\/","header_author_uri":"https:\/\/221.orvlabs.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":75,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"orvlabs","date":"2026-10-11 19:00:42","revision":3739995}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3739997,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3739997,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[141805,174359,6593,191066,26980],"plugin_category":[],"plugin_contributors":[285892],"plugin_business_model":[],"class_list":["post-383923","plugin","type-plugin","status-publish","hentry","plugin_tags-mobile-money","plugin_tags-orange-money","plugin_tags-payment-gateway","plugin_tags-senegal","plugin_tags-wave","plugin_contributors-orvlabs","plugin_committers-orvlabs"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/221-pay-for-woocommerce\/assets\/icon-128x128.png?rev=3739997","icon_2x":"https:\/\/ps.w.org\/221-pay-for-woocommerce\/assets\/icon-256x256.png?rev=3739997","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Accept Wave and Orange Money payments in Senegal with <a href=\"https:\/\/221.orvlabs.com\/en\/pay\">221 Pay<\/a>.\nSee <a href=\"https:\/\/221.orvlabs.com\/en\/pay\/pricing\">pricing<\/a> and the\n<a href=\"https:\/\/221.orvlabs.com\/en\/pay\/use-cases\/woocommerce\">WooCommerce setup guide<\/a> to get started.<\/p>\n\n<p>Customers choose \"Wave or Orange Money\" at checkout and pay on the secure 221 Pay page. The order moves to\n\"Processing\" as soon as the operator confirms the payment.<\/p>\n\n<ul>\n<li>Works with the checkout block and the classic checkout.<\/li>\n<li>Test mode with simulated payments, then live mode with a live key.<\/li>\n<li>Signed webhook (HMAC-SHA256) checked before any order change; the payment is always read back from the 221 Pay API.<\/li>\n<li>Without a webhook, the order is confirmed when the customer comes back to the shop.<\/li>\n<li>A payment whose outcome is unknown never fails the order.<\/li>\n<li>Store currency: West African CFA franc (XOF).<\/li>\n<\/ul>\n\n<h3>External services<\/h3>\n\n<p>This plugin connects to the 221 Pay API (https:\/\/apps.orvlabs.com by default), run by 221, to collect payments.<\/p>\n\n<ul>\n<li>When a customer places an order with 221 Pay: the order amount, currency, number, store name, order lines and\nreturn address are sent to create a payment page. The customer then enters their mobile number on that page.<\/li>\n<li>When a webhook arrives, when the customer comes back, and once an hour for unpaid orders of the last three days:\nthe plugin reads the payment state from the API. Nothing about the customer is sent in these reads.<\/li>\n<\/ul>\n\n<p>221 Pay terms of service: https:\/\/221.orvlabs.com\/conditions-utilisation\n221 Pay privacy policy: https:\/\/221.orvlabs.com\/confidentialite<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Plugins &gt; Add New &gt; Upload Plugin: choose 221-pay-for-woocommerce.zip, then Activate.<\/li>\n<li>WooCommerce &gt; Settings &gt; Payments &gt; 221 Pay: paste the test API key (221 Pay dashboard, API keys, \"Payments\" scope).<\/li>\n<li>In the 221 Pay dashboard, Webhooks: add the address shown under \"Webhook secret\", events payment.succeeded and\npayment.failed, then paste the secret into the plugin settings.<\/li>\n<li>Place a test order. Then paste the live key, uncheck \"Test mode\", and enable live mode in the 221 Pay dashboard.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"which%20currency%3F\"><h3>Which currency?<\/h3><\/dt>\n<dd><p>XOF only. The payment method is hidden when the store currency is different.<\/p><\/dd>\n<dt id=\"what%20if%20the%20customer%20closes%20the%20page%20before%20paying%3F\"><h3>What if the customer closes the page before paying?<\/h3><\/dt>\n<dd><p>The order stays \"Pending payment\". Coming back to the order payment page reuses the same 221 Pay page.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First version.<\/li>\n<\/ul>","raw_excerpt":"Wave and Orange Money payments with 221 Pay: hosted payment page, orders marked paid automatically.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/383923","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=383923"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/orvlabs"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=383923"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=383923"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=383923"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=383923"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=383923"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=383923"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}