{"id":368810,"date":"2026-09-23T23:41:18","date_gmt":"2026-09-23T23:41:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/puranpay-for-woocommerce\/"},"modified":"2026-09-23T23:40:45","modified_gmt":"2026-09-23T23:40:45","slug":"puranpay-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/puranpay-for-woocommerce\/","author":23564869,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.3","stable_tag":"1.0.3","tested":"7.1.2","requires":"6.4","requires_php":"7.4","requires_plugins":null,"header_name":"PuranPay for WooCommerce","header_author":"PuranPay","header_description":"Accept bKash, Nagad, Rocket, and Upay on WooCommerce via PuranPay hosted checkout.","assets_banners_color":"","last_updated":"2026-09-23 23:40:45","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/github.com\/alamincodes\/puranpay-woocommerce","header_author_uri":"https:\/\/puranpay.com","rating":0,"author_block_rating":0,"active_installs":0,"downloads":44,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.3":{"tag":"1.0.3","author":"alamincodes","date":"2026-09-23 23:40:45","revision":3710303}},"upgrade_notice":{"1.0.3":"<p>Text domain now matches the WordPress.org slug.<\/p>","1.0.2":"<p>WordPress.org review: text domain and Contributors header.<\/p>","1.0.1":"<p>WordPress.org Plugin Check fixes. No merchant setup change.<\/p>","1.0.0":"<p>Initial release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3710310,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3710310,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.3"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[570,11451,173739,1887,286],"plugin_category":[45],"plugin_contributors":[282364],"plugin_business_model":[],"class_list":["post-368810","plugin","type-plugin","status-publish","hentry","plugin_tags-bangladesh","plugin_tags-bkash","plugin_tags-nagad","plugin_tags-payments","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-alamincodes","plugin_committers-alamincodes"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/puranpay-for-woocommerce\/assets\/icon-128x128.png?rev=3710310","icon_2x":"https:\/\/ps.w.org\/puranpay-for-woocommerce\/assets\/icon-256x256.png?rev=3710310","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>PuranPay for WooCommerce redirects the customer to the hosted pay page. They Send Money from bKash, Nagad, Rocket, or Upay, type the TrxID, and the official SMS match marks the WooCommerce order paid.<\/p>\n\n<p>This plugin is a client for the <a href=\"https:\/\/puranpay.com\">PuranPay<\/a> service. You need a PuranPay account, an active plan, and a paired phone app so official wallet SMS can be matched. The plugin does not lock features behind a license key. PuranPay\u2019s <a href=\"https:\/\/puranpay.com\/terms\">Terms of Service<\/a> and <a href=\"https:\/\/puranpay.com\/privacy\">Privacy Policy<\/a> apply to that service.<\/p>\n\n<h4>How it works<\/h4>\n\n<ol>\n<li>Customer places a WooCommerce order and chooses PuranPay.<\/li>\n<li>The shop creates a payment with your secret key and redirects to checkoutUrl.<\/li>\n<li>After the TrxID matches, PuranPay POSTs <code>payment.verified<\/code> to your webhook.<\/li>\n<li>The plugin verifies <code>x-puranpay-signature<\/code> (HMAC-SHA256 of the raw body) and calls <code>payment_complete<\/code>.<\/li>\n<\/ol>\n\n<p>Do not treat the browser return as paid. The thank-you page only syncs if the webhook is late.<\/p>\n\n<h4>Setup<\/h4>\n\n<ol>\n<li>In PuranPay: Billing \u2192 buy a plan. Settings \u2192 add this shop domain (host only, no <code>https:\/\/<\/code>).<\/li>\n<li>Settings \u2192 Webhook URL \u2192 paste the URL shown on the PuranPay gateway settings screen (<code>\/wp-json\/puranpay\/v1\/webhook<\/code>).<\/li>\n<li>Copy <code>sk_live_<\/code> (or <code>sk_test_<\/code> in Test mode) and the webhook secret into WooCommerce \u2192 Settings \u2192 Payments \u2192 PuranPay.<\/li>\n<li>Pair the Android app under Phone app so official SMS can match.<\/li>\n<\/ol>\n\n<p>Store currency must be <strong>BDT<\/strong>. The checkout host and API URL default to PuranPay production (<code>https:\/\/api.puranpay.com<\/code>).<\/p>\n\n<h4>Third-party service<\/h4>\n\n<p>Checkout is created on PuranPay (<code>https:\/\/api.puranpay.com<\/code>). The customer is redirected to hosted pay, then PuranPay POSTs a signed webhook back to this shop.<\/p>\n\n<ul>\n<li><a href=\"https:\/\/puranpay.com\">PuranPay<\/a><\/li>\n<li><a href=\"https:\/\/puranpay.com\/privacy\">Privacy Policy<\/a><\/li>\n<li><a href=\"https:\/\/puranpay.com\/terms\">Terms of Service<\/a><\/li>\n<\/ul>\n\n<h4>Privacy<\/h4>\n\n<p>When a customer pays, the plugin sends order amount, order id, and optional billing name \/ email \/ phone to PuranPay so checkout and the verified webhook can run. No data is sent until you save a secret key and the customer places an order. See <a href=\"https:\/\/puranpay.com\/privacy\">puranpay.com\/privacy<\/a>.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the plugin zip in Plugins \u2192 Add New \u2192 Upload Plugin, or search for \u201cPuranPay\u201d after it is listed on WordPress.org.<\/li>\n<li>Activate it.<\/li>\n<li>WooCommerce \u2192 Settings \u2192 Payments \u2192 PuranPay \u2192 Enable.<\/li>\n<li>Paste the secret key and webhook secret. Copy the webhook URL into the PuranPay dashboard.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20work%20with%20the%20block%20checkout%3F\"><h3>Does this work with the block checkout?<\/h3><\/dt>\n<dd><p>Yes. Classic shortcode checkout and Cart\/Checkout blocks are both supported.<\/p><\/dd>\n<dt id=\"why%20was%20the%20order%20not%20marked%20paid%3F\"><h3>Why was the order not marked paid?<\/h3><\/dt>\n<dd><p>Check that the webhook URL is HTTPS, the HMAC secret matches, the shop domain is on your plan, and Test mode matches the key (<code>sk_test_<\/code> vs <code>sk_live_<\/code>). Sandbox webhooks have <code>livemode: false<\/code> and are ignored on a live store.<\/p><\/dd>\n<dt id=\"can%20i%20refund%20from%20woocommerce%3F\"><h3>Can I refund from WooCommerce?<\/h3><\/dt>\n<dd><p>Not through this plugin. PuranPay does not expose a refund API yet.<\/p><\/dd>\n<dt id=\"does%20this%20plugin%20send%20data%20off-site%3F\"><h3>Does this plugin send data off-site?<\/h3><\/dt>\n<dd><p>Yes, only after you save a secret key and a customer places an order. Amount, order id, and optional billing name \/ email \/ phone go to PuranPay. Details: <a href=\"https:\/\/puranpay.com\/privacy\">Privacy Policy<\/a> and <a href=\"https:\/\/puranpay.com\/terms\">Terms<\/a>.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.3<\/h4>\n\n<ul>\n<li>Set the text domain to the plugin slug puranpay-for-woocommerce.<\/li>\n<\/ul>\n\n<h4>1.0.2<\/h4>\n\n<ul>\n<li>Set text domain to plugin slug puranpay-woocommerce.<\/li>\n<li>Add WordPress.org username alamincodes to Contributors.<\/li>\n<\/ul>\n\n<h4>1.0.1<\/h4>\n\n<ul>\n<li>Load WordPress.org translations automatically (removed load_plugin_textdomain).<\/li>\n<li>Rename gateway class to WC_PuranPay_Gateway so it uses the plugin prefix.<\/li>\n<\/ul>\n\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>First release: hosted checkout, signed webhook fulfill, Checkout Blocks, HPOS.<\/li>\n<\/ul>","raw_excerpt":"Accept bKash, Nagad, Rocket, and Upay on WooCommerce through PuranPay hosted checkout.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/368810","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=368810"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/alamincodes"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=368810"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=368810"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=368810"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=368810"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=368810"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=368810"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}