{"id":323167,"date":"2026-06-13T02:19:18","date_gmt":"2026-06-13T02:19:18","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/tingee-gateway-for-woocommerce\/"},"modified":"2026-06-13T02:18:50","modified_gmt":"2026-06-13T02:18:50","slug":"heno-tingee-gateway-for-woocommerce","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/heno-tingee-gateway-for-woocommerce\/","author":23511082,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"6.7.5","requires":"5.6","requires_php":"7.2","requires_plugins":null,"header_name":"HENO Tingee Gateway for WooCommerce","header_author":"HENO","header_description":"T\u00edch h\u1ee3p c\u1ed5ng thanh to\u00e1n Tingee (by HENO) v\u00e0o WooCommerce. H\u1ed7 tr\u1ee3 QR \u0111\u1ed9ng, chuy\u1ec3n kho\u1ea3n ng\u00e2n h\u00e0ng t\u1ef1 \u0111\u1ed9ng v\u00e0 Webhook IPN.","assets_banners_color":"","last_updated":"2026-06-13 02:18:50","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/developers.tingee.vn","header_author_uri":"https:\/\/heno.vn","rating":0,"author_block_rating":0,"active_installs":0,"downloads":34,"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":"cuongnguyenba","date":"2026-06-13 02:18:50"}},"upgrade_notice":{"1.0.0":"<p>Initial release \u2014 no upgrade steps required.<\/p>"},"ratings":[],"assets_icons":[],"assets_banners":[],"assets_blueprints":{},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":[],"screenshots":{"1":"<strong>Payment method at checkout<\/strong> \u2014 Tingee option appears with title and description.","2":"<strong>QR code on thank-you page<\/strong> \u2014 shows QR image, account number, amount, and transfer reference with copy buttons.","3":"<strong>Plugin settings page<\/strong> \u2014 Client ID, Secret Token, environment, VA account number, integration mode, and connection test button.","4":"<strong>Webhook URL field<\/strong> \u2014 read-only URL to copy into your Tingee developer dashboard.","5":"<strong>Order confirmed<\/strong> \u2014 thank-you page automatically updates to \"Payment successful\" after Webhook IPN is received."}},"plugin_section":[],"plugin_tags":[127760,507,1373,200631,286],"plugin_category":[45],"plugin_contributors":[266905,266904],"plugin_business_model":[],"class_list":["post-323167","plugin","type-plugin","status-publish","hentry","plugin_tags-bank-transfer","plugin_tags-payment","plugin_tags-qr-code","plugin_tags-vietqr","plugin_tags-woocommerce","plugin_category-ecommerce","plugin_contributors-cuongnguyenba","plugin_contributors-heno","plugin_committers-cuongnguyenba"],"banners":[],"icons":{"svg":false,"icon":"https:\/\/s.w.org\/plugins\/geopattern-icon\/heno-tingee-gateway-for-woocommerce.svg","icon_2x":false,"generated":true},"screenshots":[],"raw_content":"<!--section=description-->\n<p><strong>HENO Tingee Gateway for WooCommerce<\/strong> connects your WooCommerce store to the <a href=\"https:\/\/tingee.vn\">Tingee<\/a> payment infrastructure by HENO, allowing customers to pay via bank transfer (VietQR) with <strong>automatic order confirmation<\/strong> \u2014 no manual reconciliation needed.<\/p>\n\n<h4>How it works<\/h4>\n\n<p><strong>Mode A \u2014 QR + Webhook (default)<\/strong><\/p>\n\n<ol>\n<li>Customer selects \"Tingee\" at checkout.<\/li>\n<li>Plugin generates a QR code linked to the order.<\/li>\n<li>Thank-you page displays the QR code, account number, amount, and transfer reference.<\/li>\n<li>Customer scans and transfers \u2192 Tingee sends a Webhook (IPN) to your site.<\/li>\n<li>Plugin verifies the signature, matches the transaction, and automatically marks the order as paid \u2014 <strong>within 5\u201315 seconds<\/strong>.<\/li>\n<\/ol>\n\n<p><strong>Mode B \u2014 Redirect<\/strong><\/p>\n\n<ol>\n<li>Customer selects Tingee \u2192 plugin creates a Checkout URL via Tingee API.<\/li>\n<li>Customer is redirected to Tingee's hosted payment page.<\/li>\n<li>After payment \u2192 redirected back to your site; Webhook confirms the order.<\/li>\n<\/ol>\n\n<h4>Key Features<\/h4>\n\n<ul>\n<li><strong>Automatic order confirmation<\/strong> via Webhook IPN \u2014 no manual checking.<\/li>\n<li><strong>VietQR display<\/strong> on the thank-you page with one-click copy for account number, amount, and transfer reference.<\/li>\n<li><strong>HMAC-SHA512 signature verification<\/strong> for every webhook \u2014 forged requests are rejected with 401.<\/li>\n<li><strong>Idempotency protection<\/strong> \u2014 retried webhooks (up to 5 times) never double-charge an order.<\/li>\n<li><strong>Dual integration modes<\/strong> \u2014 admin selects QR+Webhook or Redirect in settings.<\/li>\n<li><strong>Checkout Blocks compatible<\/strong> \u2014 works with both classic shortcode and the new WooCommerce Checkout Blocks.<\/li>\n<li><strong>HPOS compatible<\/strong> \u2014 supports WooCommerce High-Performance Order Storage.<\/li>\n<li><strong>WC Logger integration<\/strong> \u2014 webhook activity logged under WooCommerce &gt; Status &gt; Logs (<code>tingee-webhook<\/code>), secrets masked.<\/li>\n<li><strong>Connection test button<\/strong> \u2014 verify your Client ID and Secret Token before going live.<\/li>\n<li><strong>Vietnamese and English<\/strong> translations included.<\/li>\n<\/ul>\n\n<h4>Requirements<\/h4>\n\n<ul>\n<li>WordPress 5.6 or higher<\/li>\n<li>WooCommerce 5.0 or higher<\/li>\n<li>PHP 7.2 or higher<\/li>\n<li>A <a href=\"https:\/\/app.tingee.vn\">Tingee<\/a> merchant account with Client ID and Secret Token<\/li>\n<\/ul>\n\n<h3>External Services<\/h3>\n\n<p>This plugin connects to the <strong>Tingee<\/strong> payment API (operated by HENO) to generate QR codes, create payment links, and verify Webhook (IPN) notifications when a payment is completed.<\/p>\n\n<p><strong>Data sent to Tingee:<\/strong><\/p>\n\n<ul>\n<li>Order amount, order ID, and transfer reference \u2014 sent when creating a payment QR or checkout URL.<\/li>\n<li>No customer personal data (name, email, address) is forwarded to the Tingee API by this plugin.<\/li>\n<\/ul>\n\n<p><strong>When data is sent:<\/strong><\/p>\n\n<ul>\n<li>When the customer places an order and clicks \"Pay\" \u2014 the plugin calls the Tingee API to generate a QR code or hosted payment URL.<\/li>\n<li>When Tingee sends a Webhook to your site (this is <em>incoming<\/em> data from Tingee, not outgoing).<\/li>\n<\/ul>\n\n<p><strong>Tingee API endpoints used:<\/strong><\/p>\n\n<ul>\n<li>Production: <code>https:\/\/open-api.tingee.vn<\/code><\/li>\n<li>Sandbox (UAT): <code>https:\/\/uat-open-api.tingee.vn<\/code><\/li>\n<\/ul>\n\n<p>By using this plugin, your store connects to Tingee's infrastructure. Please review Tingee's policies before going live:<\/p>\n\n<ul>\n<li><a href=\"https:\/\/drive.google.com\/file\/d\/1snw0yOyz6hmanARQDWAX8DEMiG4r6Vmp\/view\">Terms of Service<\/a><\/li>\n<li><a href=\"https:\/\/drive.google.com\/file\/d\/1baa2tZPZvq9HK6w1Tzi2okAjdeo7bJhx\/view\">Privacy Policy<\/a><\/li>\n<\/ul>\n\n<p>For developer documentation, visit <a href=\"https:\/\/developers.tingee.vn\">https:\/\/developers.tingee.vn<\/a>.<\/p>\n\n<!--section=installation-->\n<h4>Automatic installation<\/h4>\n\n<ol>\n<li>Log in to your WordPress admin panel.<\/li>\n<li>Go to <strong>Plugins &gt; Add New<\/strong>.<\/li>\n<li>Search for <strong>HENO Tingee Gateway for WooCommerce<\/strong>.<\/li>\n<li>Click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Manual installation<\/h4>\n\n<ol>\n<li>Download the plugin zip file.<\/li>\n<li>Go to <strong>Plugins &gt; Add New &gt; Upload Plugin<\/strong>.<\/li>\n<li>Choose the zip file and click <strong>Install Now<\/strong>, then <strong>Activate<\/strong>.<\/li>\n<\/ol>\n\n<h4>Configuration<\/h4>\n\n<ol>\n<li>Go to <strong>WooCommerce &gt; Settings &gt; Payments<\/strong>.<\/li>\n<li>Find <strong>Tingee Gateway<\/strong> and click <strong>Manage<\/strong>.<\/li>\n<li>Fill in the following fields:\n\n<ul>\n<li><strong>Environment<\/strong> \u2014 choose Sandbox for testing or Production for live.<\/li>\n<li><strong>Client ID<\/strong> \u2014 from your Tingee developer dashboard.<\/li>\n<li><strong>Secret Token<\/strong> \u2014 from your Tingee developer dashboard.<\/li>\n<li><strong>VA Account Number<\/strong> \u2014 your merchant virtual account number.<\/li>\n<li><strong>Bank BIN<\/strong> \u2014 the BIN code of the bank that holds your VA.<\/li>\n<li><strong>Integration Mode<\/strong> \u2014 Mode A (QR + Webhook) or Mode B (Redirect).<\/li>\n<\/ul><\/li>\n<li>Click <strong>Test Connection<\/strong> to verify your credentials.<\/li>\n<li>Copy the <strong>Webhook URL<\/strong> displayed in the settings and paste it into your Tingee developer dashboard under Webhook configuration.<\/li>\n<li>Save settings.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20get%20my%20client%20id%20and%20secret%20token%3F\"><h3>Where do I get my Client ID and Secret Token?<\/h3><\/dt>\n<dd><p>Log in to your Tingee merchant account at <a href=\"https:\/\/app.tingee.vn\">app.tingee.vn<\/a>, navigate to the <strong>Developers<\/strong> section, and copy your Client ID and Secret Token.<\/p><\/dd>\n<dt id=\"what%20is%20the%20webhook%20url%20and%20where%20do%20i%20put%20it%3F\"><h3>What is the Webhook URL and where do I put it?<\/h3><\/dt>\n<dd><p>The Webhook URL is shown in the plugin's settings page (read-only field). Copy it and paste it into your Tingee developer dashboard under the Webhook \/ IPN configuration section. Tingee will send payment notifications to this URL.<\/p><\/dd>\n<dt id=\"do%20i%20need%20ngrok%20or%20a%20public%20url%20to%20receive%20webhooks%3F\"><h3>Do I need ngrok or a public URL to receive webhooks?<\/h3><\/dt>\n<dd><p>Yes, during local development you need a tool like <a href=\"https:\/\/ngrok.com\">ngrok<\/a> to create a public URL that Tingee can reach. On a live server with a real domain name, no extra setup is needed.<\/p><\/dd>\n<dt id=\"the%20qr%20code%20says%20%22dynamic%20qr%20not%20supported%22%20%E2%80%94%20what%20do%20i%20do%3F\"><h3>The QR code says \"Dynamic QR not supported\" \u2014 what do I do?<\/h3><\/dt>\n<dd><p>Some Tingee accounts have dynamic QR disabled by default. The plugin automatically falls back to <strong>Static QR<\/strong> (VietQR standard). In this mode, order matching relies on the transfer reference (order number) in the payment description rather than a bill ID. Contact Tingee support to enable dynamic QR for your account.<\/p><\/dd>\n<dt id=\"what%20happens%20if%20a%20customer%20sends%20the%20wrong%20amount%3F\"><h3>What happens if a customer sends the wrong amount?<\/h3><\/dt>\n<dd><p>If the transferred amount is less than the order total, the plugin keeps the order in <strong>On-Hold<\/strong> status and adds an admin note with the received amount. You can review and handle partial payments manually. Over-payments follow the same flow \u2014 the order is marked paid and the discrepancy is noted.<\/p><\/dd>\n<dt id=\"is%20it%20safe%3F%20can%20someone%20fake%20a%20webhook%3F\"><h3>Is it safe? Can someone fake a webhook?<\/h3><\/dt>\n<dd><p>Every webhook is verified using <strong>HMAC-SHA512<\/strong> with your Secret Token. Any request with an invalid or missing signature receives a <code>401 Unauthorized<\/code> response and the order is never modified. Replay attacks are also prevented: each transaction ID is stored after processing, so resending the same webhook has no effect.<\/p><\/dd>\n<dt id=\"does%20it%20work%20with%20the%20new%20woocommerce%20checkout%20blocks%3F\"><h3>Does it work with the new WooCommerce Checkout Blocks?<\/h3><\/dt>\n<dd><p>Yes. The plugin registers a Blocks-compatible payment method via <code>AbstractPaymentMethodType<\/code>, so it appears correctly in both the classic shortcode checkout and the new block-based checkout.<\/p><\/dd>\n<dt id=\"is%20it%20compatible%20with%20woocommerce%20high-performance%20order%20storage%20%28hpos%29%3F\"><h3>Is it compatible with WooCommerce High-Performance Order Storage (HPOS)?<\/h3><\/dt>\n<dd><p>Yes. All order data is read and written using <code>wc_get_order()<\/code>, <code>$order-&gt;get_meta()<\/code>, and <code>$order-&gt;update_meta_data()<\/code> \u2014 fully compatible with HPOS.<\/p><\/dd>\n<dt id=\"can%20i%20use%20both%20sandbox%20and%20production%20at%20the%20same%20time%3F\"><h3>Can I use both Sandbox and Production at the same time?<\/h3><\/dt>\n<dd><p>No. The <strong>Environment<\/strong> setting applies globally. Switch to Production only when you are ready to accept real payments.<\/p><\/dd>\n<dt id=\"will%20my%20settings%20be%20deleted%20if%20i%20deactivate%20the%20plugin%3F\"><h3>Will my settings be deleted if I deactivate the plugin?<\/h3><\/dt>\n<dd><p>No. Settings are preserved when you deactivate. They are only removed when you <strong>delete<\/strong> the plugin, and only if the \"Delete data on uninstall\" option is enabled in settings.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>1.0.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<li>Mode A: VietQR display on thank-you page with JS polling for automatic confirmation.<\/li>\n<li>Mode B: Redirect to Tingee hosted payment page.<\/li>\n<li>Webhook IPN handler with HMAC-SHA512 signature verification and idempotency protection.<\/li>\n<li>HPOS and Checkout Blocks compatibility.<\/li>\n<li>WC Logger integration with masked secrets.<\/li>\n<li>Vietnamese and English translations.<\/li>\n<li>Connection test button in settings.<\/li>\n<li>Static QR fallback when dynamic QR is not enabled on the merchant account.<\/li>\n<\/ul>","raw_excerpt":"Integrate Tingee (by HENO) payment gateway into WooCommerce. Supports VietQR, bank transfer auto-confirmation via Webhook IPN, and Checkout Blocks.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/323167","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=323167"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/cuongnguyenba"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=323167"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=323167"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=323167"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=323167"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=323167"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=323167"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}