=== AhaPay Buy Now Pay Later === Contributors: ahapay.my, ahapay Requires at least: 5.4 Tested up to: 7.1 Stable tag: 1.1.0 Requires PHP: 7.4 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html Tags: BNPL, Buy Now Pay Later, Payment Gateway, WooCommerce, AhaPay AhaPay is a Buy Now Pay Later (BNPL) payment solution that enables customers to split their purchases into 4 to 12 installments. == Description == AhaPay integrates with WooCommerce to provide flexible payment options for your customers. The plugin allows shoppers to split their payments into 4 to 12 installments automatically, with no hidden fees. == Requirements == - WordPress 5.4 or higher - WooCommerce 4.8 or higher - PHP 7.4 or higher - OpenSSL PHP extension - SSL certificate installed on your domain (for secure transactions) == Installation == 1. Download the plugin 2. Go to WordPress admin > Plugins > Add New 3. Click Upload Plugin and choose the downloaded file 4. Click Install Now and then Activate 5. Go to WooCommerce > Settings > Payments 6. Find "AhaPay Buy Now Pay Later" and click Manage 7. Configure your API credentials and settings == Configuration == = Basic Settings = 1. Enable/Disable - Turn the payment method on or off 2. Title - The payment method title shown to customers 3. Description - The payment method description shown to customers 4. Environment - Choose between Sandbox (testing) and Production 5. API Key - Enter your AhaPay API key 6. External Merchant ID - Required only for Partner API keys; leave empty for Trade Outlet API keys Note: AhaPay is offered only on orders at or above the minimum, which is 55 MYR by default and editable in the gateway settings (`minimum_amount`). A merchant may set it lower or higher — 20 and 50 are as valid as 100 — and only a negative figure is refused, since it says nothing; a blank field keeps the default. Below whatever is set, no checkout offers AhaPay and product pages show no instalment banner. = Display Settings = - Product Label - Enable/disable BNPL information on product pages - Product Label Text - Customize the BNPL message - Product Label Color - Set the background color for labels - Product Label Text Color - Set the text color for labels == Features == - Seamless integration with WooCommerce checkout - Automatic order status updates - Real-time payment verification - Custom product page badges and banners - Responsive payment modal - Support for both desktop and mobile devices - Order status checking in admin panel - Sandbox environment for testing - Detailed payment status tracking - Support for refunds == Payment Flow == 1. Customer selects AhaPay at checkout 2. Order is created and customer is redirected to AhaPay 3. Customer completes payment setup with AhaPay 4. Order status is automatically updated 5. Customer is redirected back to your store == Order Statuses == - PAYMENT_SUCCESSFUL - Payment completed - CANCELLED - Payment cancelled by customer - UNAVAILABLE - Payment failed - PAYMENT_IN_PROGRESS - Payment pending - REFUNDED - Payment refunded == Support == For support or questions, please contact AhaPay support team or visit your AhaPay merchant dashboard. == External services == This plugin connects to the AhaPay API to process Buy Now Pay Later payments and handle order status updates. The plugin uses AhaPay External API V2: - `GET /v2/health` to verify API key connectivity - `POST /v2/orders/default` to create checkout orders - `GET /v2/orders/{online_order_id}/status` to check order status - `POST /v2/orders/{online_order_id}/refund` to process full refunds For Partner API keys, configure External Merchant ID with the merchant identifier assigned by the partner platform. For Trade Outlet API keys, leave this field empty. Amounts and order item prices are sent as decimal MYR values. V2 callbacks are expected with `online_order_status`; the plugin also accepts `status` for compatibility with older callback documentation. It sends the following data when processing payments or checking status: - Order ID and transaction details - API key for authentication - External Merchant ID when configured for Partner API key integrations - Refund requests with order information Data is sent securely via HTTPS to AhaPay's servers only when necessary for payment processing or status verification. This service is provided by AhaPay: [Terms of Service](https://merchant-help.ahapay.my/hc/en-my), [Privacy Policy](https://ahapay.my/privacy-policy). == Development == This plugin uses webpack to build JavaScript and CSS assets. = Build Process = 1. Install the locked dependencies: `npm ci` 2. Build assets: `npm run build` (or `npm run dev` for development) Source files are located in the `blocks/` directory. Built files are in `assets/blocks/`. The installable plugin ZIP includes the Checkout block source, webpack configuration, and locked npm manifests needed to review, modify, and rebuild the distributed bundle. == Changelog == = 1.1.0 = - Quoted the product banner instalment as a starting figure (`from RM X × 12 installments`), because the client fee is added to the payments later in checkout. - Replaced the "interest-free" wording on the product banner with the twelve-instalment quote. - Migrated payment creation, callbacks, refunds, and status checks to External API V2. - Added Partner API key support through the optional External Merchant ID setting. - Hardened callback validation, terminal-state handling, and duplicate delivery processing. - Prevented concurrent callbacks and refunds from applying monetary or stock side effects twice. - Made uncertain refund outcomes recoverable without allowing another refund to be sent prematurely. - Kept classic and block checkout availability aligned with the 55 MYR minimum order amount. - Updated checkout copy to describe the supported range of 4 to 12 installments. = 1.0.0 = - Initial release - Basic payment integration - Order status management - Product page integration - Admin interface - Sandbox/Production environments == License == This plugin is licensed under the terms of use provided by AhaPay. == Customize Payment Fields CSS == You can add custom CSS that will be applied specifically to AhaPay's payment fields on the checkout page from the plugin settings in the WordPress admin. How to update the CSS 1. In WordPress admin go to: WooCommerce → Settings → Payments. 2. Find "AhaPay Buy Now Pay Later" in the list and click Manage (or click the Settings link). 3. Scroll down to the setting named "Additional CSS for Payment Fields". 4. Paste your CSS into the textarea and click Save changes. How the plugin applies your CSS - The plugin stores the textarea content and adds it as inline CSS attached to the plugin stylesheet handle `ahapaybuynowpaylater-block-style`. - The payment fields output by the gateway are wrapped in a container with the class `.ahapay-payment-fields`, so we recommend scoping your rules under that selector to avoid affecting other parts of your site. - The plugin will strip surrounding `