=== NotivGo QRIS for WooCommerce ===
Contributors: notivgo
Tags: qris, woocommerce, payment, indonesia, qr code
Requires at least: 6.2
Tested up to: 7.1
Requires PHP: 7.4
Requires Plugins: woocommerce
Stable tag: 0.1.1
License: GPL-2.0-or-later
License URI: https://www.gnu.org/licenses/gpl-2.0.html

QRIS paid straight to the store's own account, with a helper that matches incoming payments read from phone notifications.

== Description ==

Add a QRIS payment method to WooCommerce. The plugin requests a QR code with an amount from the store's own QRIS, then periodically checks the order status. Orders are processed automatically only when NotivGo reports a paid status with the matching amount.

NotivGo is not a payment gateway: money does not pass through NotivGo or a third party. The plugin helps match payments, it does not guarantee them. The final decision and checking bank transactions remain the store owner's responsibility. The plugin polls NotivGo for the order status; webhooks are not used yet.

Supports HPOS order storage and Checkout Blocks. Assets are included locally without a CDN.
Requires WordPress 6.2, PHP 7.4, and WooCommerce 8.2 or later.
The plugin interface and the text shown to buyers are in Indonesian.

= Requirements =

* An active NotivGo account and an API key from the portal.
* The store's QRIS saved in the NotivGo portal.
* An Android phone running the NotivGo app and receiving the store's bank/e-wallet notifications.
* The "Pengaturan → Pencocokan Pembayaran" (Settings → Payment matching) switch enabled, an active Payment App Package or trial, and the phone online.
* Store currency set to IDR.

== Installation ==

= How to install =

1. Upload the zip through Plugins → Add New → Upload Plugin.
2. Activate WooCommerce, then the NotivGo QRIS plugin.
3. Open WooCommerce → Settings → Payments → NotivGo QRIS.
4. Paste the API key from the NotivGo portal, then save.
5. Click "Uji sambungan" (Test connection), which uses the saved settings.
6. Set the time limit and unique code, then enable the payment method.

The API key field is always empty for security. Leaving it empty when saving keeps the old key. To revoke access, revoke the key in the portal or uninstall the plugin. Change the server address only if instructed; HTTPS is required except for a localhost test server.

== Frequently Asked Questions ==

= Is this a payment gateway? =

No. Buyers pay directly to the store's account through the store's QRIS. NotivGo provides QR codes and helps match payments from phone notifications; it does not hold money.

= Why are a few rupiah added to the total? =

The unique code distinguishes the amounts of orders awaiting payment. The fee item is shown as "Kode unik pembayaran" (Unique payment code); fractions of a rupiah are rounded up. The unique code can be disabled in settings. Store owners must ensure that their policy on additional amounts complies with applicable QRIS/acquirer rules.

= What happens if the phone is off? =

Orders keep waiting during the payment window. Check bank transactions, then mark the order manually if it has actually been paid. Do not hand over goods just because a buyer presses "Saya sudah bayar" (I have paid) or the status requires review. After the deadline and grace period, the background checker may cancel the order.

= What if amounts are identical? =

NotivGo requests a review in the portal → Orders. The plugin does not mark orders as paid based on needs_review. Orders requiring review are not cancelled automatically.

= What if a buyer pays after the deadline? =

Orders are cancelled automatically 15 minutes after the deadline, only after a successful fresh check with no payment or review. Errors or uncertain statuses postpone cancellation. For 24 hours after the deadline, replaced/cancelled bills continue to be checked. If the money is detected later, an unpaid order is marked "Ditahan" (On hold) with a note asking the store owner to check bank transactions and process it manually, rather than being marked as paid automatically.

Old references are not discarded merely because of their age: after the 24-hour window closes, a successful status reading is required. Network errors keep the queue intact. History is not truncated; if 10 old references still await reconciliation, creating a new payment is postponed. QR codes for cancelled references are no longer offered even if creating their replacements fails. The buyer's page keeps reading the status until 15 minutes after the deadline, without offering expired QR codes.

= Does the background checker keep checking when the buyer closes the page? =

Yes, through Action Scheduler every minute, or WP-Cron every five minutes if Action Scheduler is unavailable. Scheduling depends on the site's cron workers; use server cron on low-traffic sites. Network errors do not trigger automatic cancellation.

== External services ==

The plugin sends the order number, amount, IDR currency, payment deadline, and the note "WooCommerce #number" to the NotivGo service at https://portal.notivgo.com using the saved API key. It also reads the list of open order amounts and queries order statuses on that server. Requests occur when creating a QR code, testing the connection, or checking payments. The plugin does not send the buyer's name, address, or email. There is no webhook receiver in the plugin.

The service requires a NotivGo account and may incur charges according to the account plan.
Service information: https://notivgo.com
Terms of service: https://notivgo.com/tos
Privacy policy: https://notivgo.com/kebijakan-privasi

On uninstall, plugin settings and transients are deleted. Order metadata is retained as the store's payment history.

== Changelog ==

= 0.1.1 =
* Updated the plugin name, translated the readme into English, and tidied up Plugin Check findings. No changes to payment behaviour.

= 0.1.0 =
* Initial release with QR codes containing amounts, buyer polling, background checking, HPOS, and Checkout Blocks.
