{"id":376506,"date":"2026-09-29T19:43:15","date_gmt":"2026-09-29T19:43:15","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/qrpaybd-payments\/"},"modified":"2026-09-29T17:53:22","modified_gmt":"2026-09-29T17:53:22","slug":"qrpaybd-payments","status":"publish","type":"plugin","link":"https:\/\/pap-aw.wordpress.org\/plugins\/qrpaybd-payments\/","author":23574832,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"trunk","tested":"7.1.2","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"QRPayBD Payments","header_author":"QRPayBD","header_description":"Accept Bangladeshi wallet and Bangla QR payments confirmed automatically from the merchant's payment SMS. WooCommerce gateway and an Elementor \"Pay Button\" widget.","assets_banners_color":"eceff3","last_updated":"2026-09-29 17:53:22","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"","rating":0,"author_block_rating":0,"active_installs":0,"downloads":52,"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":"bitquintet","date":"2026-09-29 17:53:22","revision":3719561}},"upgrade_notice":{"0.1.0":"<p>First release.<\/p>"},"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3719561,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3719561,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3719561,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3719561,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.png":{"filename":"screenshot-1.png","revision":3719561,"resolution":"1","location":"assets","locale":"","width":1280,"height":900},"screenshot-2.png":{"filename":"screenshot-2.png","revision":3719561,"resolution":"2","location":"assets","locale":"","width":1280,"height":1037},"screenshot-3.png":{"filename":"screenshot-3.png","revision":3719561,"resolution":"3","location":"assets","locale":"","width":1280,"height":1016},"screenshot-4.png":{"filename":"screenshot-4.png","revision":3719561,"resolution":"4","location":"assets","locale":"","width":1280,"height":935}},"screenshots":{"1":"Settings &gt; QRPayBD with the Test connection result.","2":"WooCommerce gateway settings (shared connection fields, no-refunds note).","3":"Classic checkout with the three-step \"how you will pay\" text.","4":"Checkout Block with the QRPayBD method.","5":"Order screen box with status, TrxID and Re-check now.","6":"\"Paid amount differs\" order note keeping the order on hold.","7":"QRPayBD Pay Button in the Elementor editor.","8":"QRPayBD Payments list."}},"plugin_section":[],"plugin_tags":[570,76538,1887,1373,286],"plugin_category":[45],"plugin_contributors":[283484],"plugin_business_model":[],"class_list":["post-376506","plugin","type-plugin","status-publish","hentry","plugin_tags-bangladesh","plugin_tags-elementor","plugin_tags-payments","plugin_tags-qr-code","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-bitquintet","plugin_committers-bitquintet"],"banners":{"banner":"https:\/\/ps.w.org\/qrpaybd-payments\/assets\/banner-772x250.png?rev=3719561","banner_2x":"https:\/\/ps.w.org\/qrpaybd-payments\/assets\/banner-1544x500.png?rev=3719561","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/qrpaybd-payments\/assets\/icon-128x128.png?rev=3719561","icon_2x":"https:\/\/ps.w.org\/qrpaybd-payments\/assets\/icon-256x256.png?rev=3719561","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/qrpaybd-payments\/assets\/screenshot-1.png?rev=3719561","caption":"Settings &gt; QRPayBD with the Test connection result."},{"src":"https:\/\/ps.w.org\/qrpaybd-payments\/assets\/screenshot-2.png?rev=3719561","caption":"WooCommerce gateway settings (shared connection fields, no-refunds note)."},{"src":"https:\/\/ps.w.org\/qrpaybd-payments\/assets\/screenshot-3.png?rev=3719561","caption":"Classic checkout with the three-step \"how you will pay\" text."},{"src":"https:\/\/ps.w.org\/qrpaybd-payments\/assets\/screenshot-4.png?rev=3719561","caption":"Checkout Block with the QRPayBD method."}],"raw_content":"<!--section=description-->\n<p>QRPayBD confirms Bangladeshi mobile wallet and Bangla QR payments by reading the \"payment received\" SMS on an Android phone that you own. This plugin connects your WordPress site to <strong>your own QRPayBD server<\/strong>:<\/p>\n\n<ol>\n<li>Your site creates an order at QRPayBD and sends the customer to the QRPayBD-hosted payment page.<\/li>\n<li>The customer scans your shop's QR in their wallet or banking app, pays the exact amount and enters the TrxID from their payment SMS.<\/li>\n<li>QRPayBD checks the TrxID and amount against the SMS on your phone and marks the order paid.<\/li>\n<li>QRPayBD sends your site a signed webhook and your order is completed. QRPayBD never holds your money.<\/li>\n<\/ol>\n\n<p><strong>Not affiliated.<\/strong> bKash, Nagad, Upay and Rocket are trademarks of their respective owners. This plugin is not affiliated with, endorsed by or sponsored by any of them; they are named only to describe payment services your customers may already use.<\/p>\n\n<p><strong>WooCommerce (optional)<\/strong><\/p>\n\n<ul>\n<li>Classic payment gateway that also works in the Cart and Checkout <strong>Blocks<\/strong> and with the classic checkout shortcode.<\/li>\n<li>Compatible with High-Performance Order Storage (custom order tables).<\/li>\n<li>BDT only. The method is hidden at checkout for any other currency.<\/li>\n<li>The order is placed <strong>on hold<\/strong> and completed automatically. An amount mismatch is never auto-completed: the order stays on hold with a clear order note.<\/li>\n<li>Order screen box with status, reference, TrxID, match method, payment link and a <strong>Re-check now<\/strong> button.<\/li>\n<li>Cancelling the WooCommerce order cancels the pending payment at QRPayBD (best effort).<\/li>\n<\/ul>\n\n<p><strong>Elementor (optional, the free version is enough)<\/strong><\/p>\n\n<ul>\n<li>Widget <strong>QRPayBD Pay Button<\/strong> in its own \"QRPayBD\" category. It works <strong>without WooCommerce<\/strong>: fixed amount, item text, optional return URL and full style controls.<\/li>\n<li>The amount is read from the saved page <strong>on the server<\/strong>. The browser only sends the page id and widget id, so the price cannot be tampered with.<\/li>\n<li>Each click creates a private record under <strong>QRPayBD Payments<\/strong> (amount, status, reference, TrxID, times).<\/li>\n<li>The action <code>qrpaybd_payment_completed<\/code> lets you run your own automation when a payment completes.<\/li>\n<\/ul>\n\n<p><strong>Reliability<\/strong><\/p>\n\n<ul>\n<li>Webhooks are verified with HMAC-SHA256 over the raw request body (constant-time comparison).<\/li>\n<li>QRPayBD has no webhook retry queue, so the plugin also checks unpaid orders every five minutes (Action Scheduler when available, otherwise WP-Cron) for up to 48 hours, and once when the customer returns to your site.<\/li>\n<\/ul>\n\n<p><strong>No tracking.<\/strong> The plugin has no analytics, telemetry, update checks or advertising, and it never contacts any server other than the QRPayBD address you configure.<\/p>\n\n<h4>External services<\/h4>\n\n<p>This plugin connects to exactly one external service: <strong>the QRPayBD server whose base URL you enter in Settings &gt; QRPayBD<\/strong> (for example <code>https:\/\/pay.example.com<\/code>). QRPayBD is the payment-confirmation service described above. Whoever operates that server (you, or the provider you use) is the service provider, and its terms and privacy policy apply.<\/p>\n\n<p>What is sent, and when:<\/p>\n\n<ul>\n<li><strong>Creating a payment<\/strong> (a customer chooses the QRPayBD payment method at checkout, or a visitor clicks a QRPayBD Pay Button): the order total in taka, a store order id (<code>wc-&lt;site hash&gt;-&lt;order number&gt;<\/code> or <code>el-&lt;page id&gt;-&lt;widget id&gt;-&lt;random&gt;<\/code>), and a return URL (the WooCommerce order-received page, or the page holding the button). Your store API key is sent in the <code>Authorization<\/code> header. The plugin sends no customer name, email address, phone number or address. The customer's browser is then redirected to the QRPayBD-hosted payment page, where the customer enters the TrxID from their payment SMS; that page is operated by the QRPayBD server.<\/li>\n<li><strong>Checking a payment<\/strong>: the QRPayBD order id and your API key, every five minutes for unpaid orders younger than 48 hours, once when the customer returns to the order-received page, and when an administrator presses \"Re-check now\".<\/li>\n<li><strong>Cancelling a payment<\/strong>: the QRPayBD order id and your API key, when a WooCommerce order is cancelled while its payment is unpaid.<\/li>\n<li><strong>Test connection<\/strong> (administrators only, on request): a request to <code>\/health<\/code> with no data, and one lookup of a dummy order id with your API key.<\/li>\n<\/ul>\n\n<p>Data received: QRPayBD sends signed webhooks to <code>\/wp-json\/qrpaybd\/v1\/webhook<\/code> on your site containing the order ids, amounts, TrxID, match method and payment time. These are stored as order meta (WooCommerce) or in the private \"QRPayBD Payments\" records (Elementor).<\/p>\n\n<p>Terms of Service: https:\/\/qrpaybd.com\/terms\/<\/p>\n\n<p>Privacy Policy: https:\/\/qrpaybd.com\/privacy\/<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>qrpaybd-payments<\/code> folder to <code>\/wp-content\/plugins\/<\/code>, or install the zip through Plugins &gt; Add New &gt; Upload Plugin, then activate it.<\/li>\n<li>Go to <strong>Settings &gt; QRPayBD<\/strong> (or WooCommerce &gt; Settings &gt; Payments &gt; QRPayBD) and enter:\n\n<ul>\n<li><strong>QRPayBD base URL<\/strong>: must start with <code>https:\/\/<\/code>. Plain <code>http:\/\/<\/code> is only accepted for <code>localhost<\/code> or <code>127.0.0.1<\/code>.<\/li>\n<li><strong>Store API key<\/strong>: create it in your QRPayBD dashboard (Store setup).<\/li>\n<li><strong>Webhook secret<\/strong>: shown in the QRPayBD dashboard next to the webhook URL.<\/li>\n<\/ul><\/li>\n<li>Copy the <strong>Webhook URL<\/strong> shown on the settings page (<code>https:\/\/your-site\/wp-json\/qrpaybd\/v1\/webhook<\/code>) into the webhook setting of your QRPayBD dashboard. In production QRPayBD requires a public https address.<\/li>\n<li>Press <strong>Test connection<\/strong>. It checks that the server answers and that the key is accepted. The key is never displayed.<\/li>\n<li>WooCommerce: enable the QRPayBD method under WooCommerce &gt; Settings &gt; Payments and set the store currency to BDT.<\/li>\n<li>Elementor: drag <strong>QRPayBD Pay Button<\/strong> (QRPayBD category) into a page, set the amount and update the page.<\/li>\n<\/ol>\n\n<p>Both WooCommerce and Elementor are optional. Each part loads only when its plugin is active. With neither active the plugin loads harmlessly and shows a dismissible notice explaining what each part needs.<\/p>\n\n<!--section=faq-->\n<dl>\n<dt id=\"is%20this%20an%20official%20wallet%20or%20bank%20api%3F\"><h3>Is this an official wallet or bank API?<\/h3><\/dt>\n<dd><p>No. QRPayBD reads the payment SMS on your own Android phone with a collector app and matches the customer's TrxID and the exact amount. It is not an official wallet or bank API, the SMS wording of a wallet can change, and a forged SMS combined with a matching TrxID is a residual risk. Review unusual orders and use the optional balance check offered by QRPayBD.<\/p><\/dd>\n<dt id=\"which%20phones%20and%20currencies%20work%3F\"><h3>Which phones and currencies work?<\/h3><\/dt>\n<dd><p>The collector app is Android-only. Only Bangladeshi Taka (BDT) is supported.<\/p><\/dd>\n<dt id=\"can%20i%20refund%20from%20woocommerce%3F\"><h3>Can I refund from WooCommerce?<\/h3><\/dt>\n<dd><p>No. QRPayBD does not hold or move money, so the gateway supports products only and no refunds. Refund the customer from your own wallet and then update the order.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20the%20customer%20pays%20a%20different%20amount%3F\"><h3>What happens if the customer pays a different amount?<\/h3><\/dt>\n<dd><p>The order is <strong>not<\/strong> completed. It stays on hold with a note \"PAID AMOUNT DIFFERS\" showing the order total, the QRPayBD amount, the amount received and the TrxID. You decide whether to complete or cancel it.<\/p><\/dd>\n<dt id=\"what%20if%20the%20webhook%20never%20arrives%3F\"><h3>What if the webhook never arrives?<\/h3><\/dt>\n<dd><p>The plugin checks on-hold orders every five minutes and when the customer returns to the order-received page. You can also press <strong>Re-check now<\/strong> on the order.<\/p><\/dd>\n<dt id=\"does%20the%20five-minute%20check%20need%20a%20real%20cron%20job%3F\"><h3>Does the five-minute check need a real cron job?<\/h3><\/dt>\n<dd><p>WP-Cron and Action Scheduler only run when the site receives visits. On a quiet store add a system cron that requests <code>wp-cron.php<\/code> every few minutes.<\/p><\/dd>\n<dt id=\"why%20must%20my%20webhook%20url%20be%20https%20and%20public%20in%20production%3F\"><h3>Why must my webhook URL be https and public in production?<\/h3><\/dt>\n<dd><p>The QRPayBD server refuses webhook URLs that are not https or that point at a private or loopback address when it runs in production mode.<\/p><\/dd>\n<dt id=\"is%20the%20elementor%20pro%20checkout%20widget%20supported%3F\"><h3>Is the Elementor Pro Checkout widget supported?<\/h3><\/dt>\n<dd><p>Elementor Pro widgets render the standard WooCommerce checkout, which this gateway supports. The plugin was tested on a page built with free Elementor and the <code>[woocommerce_checkout]<\/code> shortcode. Elementor Pro itself could not be tested, so the Pro widgets are untested.<\/p><\/dd>\n<dt id=\"where%20is%20the%20bangla%20translation%3F\"><h3>Where is the Bangla translation?<\/h3><\/dt>\n<dd><p>A <code>bn_BD<\/code> translation ships with the plugin. It has not been reviewed by a native speaker; corrections are welcome.<\/p><\/dd>\n<dt id=\"does%20the%20plugin%20work%20without%20woocommerce%20or%20without%20elementor%3F\"><h3>Does the plugin work without WooCommerce or without Elementor?<\/h3><\/dt>\n<dd><p>Yes. Each integration loads only when its host plugin is active. The Pay Button needs Elementor but not WooCommerce; the gateway needs WooCommerce but not Elementor.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>First release: WooCommerce gateway (classic and Blocks checkout, HPOS), signed webhook receiver, five-minute reconciliation, order box and cancel hook, Elementor Pay Button with server-side amount and payment records, Bangla translation.<\/li>\n<\/ul>","raw_excerpt":"Accept Bangladeshi wallet and Bangla QR payments confirmed from your own phone&#039;s payment SMS. WooCommerce gateway and Elementor Pay Button.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/376506","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=376506"}],"author":[{"embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/bitquintet"}],"wp:attachment":[{"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=376506"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=376506"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=376506"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=376506"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=376506"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/pap-aw.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=376506"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}