{"id":318526,"date":"2026-06-02T12:06:17","date_gmt":"2026-06-02T12:06:17","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/ezone-pay\/"},"modified":"2026-06-14T15:59:04","modified_gmt":"2026-06-14T15:59:04","slug":"ezone-pay","status":"publish","type":"plugin","link":"https:\/\/wordpress.org\/plugins\/ezone-pay\/","author":23513583,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"0.1.0","stable_tag":"0.1.0","tested":"7.0","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Ezone Pay","header_author":"EzonePay","header_description":"Create Ezone Pay payment buttons and embedded payment-link checkout flows.","assets_banners_color":"9566ba","last_updated":"2026-06-14 15:59:04","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"","header_author_uri":"https:\/\/ezonepay.ly\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":202,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"0.1.0":{"tag":"0.1.0","author":"anastaleb","date":"2026-06-14 15:59:04"}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3558059,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3558059,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3558059,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3558059,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{},"all_blocks":[],"tagged_versions":["0.1.0"],"block_files":[],"assets_screenshots":[],"screenshots":[]},"plugin_section":[],"plugin_tags":[3148,265460,167170,1887],"plugin_category":[45],"plugin_contributors":[266088],"plugin_business_model":[],"class_list":["post-318526","plugin","type-plugin","status-publish","hentry","plugin_tags-checkout","plugin_tags-ezone-pay","plugin_tags-payment-link","plugin_tags-payments","plugin_category-ecommerce","plugin_contributors-ezonepay","plugin_committers-anastaleb","plugin_committers-ezonepay"],"banners":{"banner":"https:\/\/ps.w.org\/ezone-pay\/assets\/banner-772x250.png?rev=3558059","banner_2x":"https:\/\/ps.w.org\/ezone-pay\/assets\/banner-1544x500.png?rev=3558059","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/ezone-pay\/assets\/icon-128x128.png?rev=3558059","icon_2x":"https:\/\/ps.w.org\/ezone-pay\/assets\/icon-256x256.png?rev=3558059","generated":false},"screenshots":[],"raw_content":"<!--section=description-->\n<p>Ezone Pay creates payment-link checkout sessions from WordPress. The plugin stores a local payment reference, displays the returned payment link in an iframe, and updates payment status by polling the Ezone Pay API after the customer returns to WordPress.<\/p>\n\n<p>Features:<\/p>\n\n<ul>\n<li>Development and production API modes.<\/li>\n<li>Separate API keys for development and production.<\/li>\n<li>Embedded iframe checkout for payment links.<\/li>\n<li>Payment confirmation using Ezone Pay payment-link details and transactions.<\/li>\n<li>Shortcode-based payment button.<\/li>\n<\/ul>\n\n<p>Important: embedded checkout depends on Ezone Pay allowing your site domain in iframe\/frame headers. If the Ezone Pay checkout page blocks framing, Ezone Pay must allow the merchant site domain or the browser will block the iframe.<\/p>\n\n<h3>Configuration<\/h3>\n\n<p>The plugin supports two API modes:<\/p>\n\n<ul>\n<li>Development: <code>https:\/\/test.ezonepay.ly<\/code><\/li>\n<li>Production: <code>https:\/\/api.ezonepay.ly<\/code><\/li>\n<\/ul>\n\n<p>To get a development API key, register or log in at <code>https:\/\/demo.ezonepay.ly\/<\/code>, then go to <strong>\u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a &gt; \u0645\u0641\u0627\u062a\u064a\u062d API<\/strong>.<\/p>\n\n<p>To get a production API key, register or log in at <code>https:\/\/my.ezonepay.ly\/<\/code>, then go to <strong>\u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a &gt; \u0645\u0641\u0627\u062a\u064a\u062d API<\/strong>.<\/p>\n\n<p>When creating an API key, enable these permissions:<\/p>\n\n<ul>\n<li><strong>\u0625\u0646\u0634\u0627\u0621 \u0631\u0627\u0628\u0637 \u062f\u0641\u0639<\/strong><\/li>\n<li><strong>\u0639\u0631\u0636 \u0631\u0648\u0627\u0628\u0637 \u0627\u0644\u062f\u0641\u0639<\/strong><\/li>\n<\/ul>\n\n<p>You can manage settings in WordPress admin or define constants in <code>wp-config.php<\/code>:<\/p>\n\n<pre><code>define('EZONE_PAY_API_MODE', 'dev');\ndefine('EZONE_PAY_DEV_API_KEY', 'your-dev-secret-key');\ndefine('EZONE_PAY_PRODUCTION_API_KEY', 'your-production-secret-key');\n<\/code><\/pre>\n\n<p>If your WordPress server cannot resolve one of the default API hosts, you can override the base URL:<\/p>\n\n<pre><code>define('EZONE_PAY_DEV_BASE_URL', 'https:\/\/test.ezonepay.ly');\ndefine('EZONE_PAY_PRODUCTION_BASE_URL', 'https:\/\/api.ezonepay.ly');&lt;h3&gt;Shortcode&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>Use:<\/p>\n\n<pre><code>[ezone_pay_button amount=\"0.1\" reference=\"ORDER-123\" title=\"Pay with Ezone\"]\n<\/code><\/pre>\n\n<p>Optional customer fields:<\/p>\n\n<pre><code>[ezone_pay_button amount=\"0.1\" reference=\"ORDER-123\" title=\"Pay with Ezone\" customer_first_name=\"Ali\" customer_last_name=\"Saleh\" customer_phone=\"0910000000\"]\n<\/code><\/pre>\n\n<p>Ezone Pay requires customer data when creating a payment link. If the shortcode does not include customer details, the plugin sends <code>WordPress Guest<\/code> and <code>0910000000<\/code>.<\/p>\n\n<h3>Customer data<\/h3>\n\n<p>The plugin sends customer data to Ezone Pay in this shape:<\/p>\n\n<pre><code>Customer.FirstName\nCustomer.LastName\nCustomer.PhoneNumber\n<\/code><\/pre>\n\n<p>Customer values can come from shortcode attributes:<\/p>\n\n<pre><code>[ezone_pay_button amount=\"0.1\" reference=\"ORDER-123\" title=\"Pay with Ezone\" customer_first_name=\"Ali\" customer_last_name=\"Saleh\" customer_phone=\"0910000000\"]\n<\/code><\/pre>\n\n<p>If the shortcode does not provide customer values, the plugin uses these defaults:<\/p>\n\n<pre><code>FirstName: WordPress\nLastName: Guest\nPhoneNumber: 0910000000\n<\/code><\/pre>\n\n<p>Developers can change the defaults with the <code>ezone_pay_default_customer<\/code> filter:<\/p>\n\n<pre><code>add_filter('ezone_pay_default_customer', function ($customer) { return ['FirstName' =&gt; 'Site', 'LastName' =&gt; 'Customer', 'PhoneNumber' =&gt; '0910000000']; });\n<\/code><\/pre>\n\n<p>Developers can read the stored customer data after payment completion from the <code>ezone_pay_payment_marked_paid<\/code> action:<\/p>\n\n<pre><code>add_action('ezone_pay_payment_marked_paid', function ($order_reference, $payment) { $first_name = $payment['customer']['FirstName'] ?? ''; $phone = $payment['customer']['PhoneNumber'] ?? ''; }, 10, 2);&lt;h3&gt;Payment confirmation&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>When a customer clicks the shortcode button, the plugin creates a single-use Ezone Pay payment link and stores the local payment session in WordPress.<\/p>\n\n<p>After Ezone Pay sends the customer back to WordPress, the plugin marks the local session as returned and polls Ezone Pay directly using payment-link details and transactions. The selected API key must have permission to create and view payment links.<\/p>\n\n<p>The local status endpoint is:<\/p>\n\n<pre><code>\/wp-json\/ezone-pay\/v1\/status\/{order_reference}?status_token={status_token}\n<\/code><\/pre>\n\n<p>That endpoint returns the current local payment status, such as <code>pending<\/code>, <code>returned<\/code>, or <code>paid<\/code>. The status token is generated by the plugin and stored with the payment session.<\/p>\n\n<h3>After payment is completed<\/h3>\n\n<p>When Ezone Pay confirms the payment, the plugin updates the stored payment status to <code>paid<\/code>, records <code>paid_utc<\/code>, and exposes filters\/actions so the site can decide what to show or do next.<\/p>\n\n<p>Developers can customize the payment completed message with the <code>ezone_pay_completed_message<\/code> filter, change the success URL with the <code>ezone_pay_success_url<\/code> filter, and provide site-specific content with the <code>ezone_pay_completed_content<\/code> filter.<\/p>\n\n<p>To run custom site logic after a payment is marked paid, use the <code>ezone_pay_payment_marked_paid<\/code> action:<\/p>\n\n<pre><code>add_action('ezone_pay_payment_marked_paid', function ($order_reference, $payment) { \/* Update your order here. *\/ }, 10, 2);&lt;h3&gt;External services&lt;\/h3&gt;\n<\/code><\/pre>\n\n<p>This plugin connects to the Ezone Pay API to create payment links, display the Ezone Pay checkout page, and confirm whether a payment has been completed. This service is provided by Ezone.<\/p>\n\n<p>The plugin connects to one of these Ezone Pay API endpoints depending on the selected environment mode:<\/p>\n\n<ul>\n<li>Development: <code>https:\/\/test.ezonepay.ly<\/code><\/li>\n<li>Production: <code>https:\/\/api.ezonepay.ly<\/code><\/li>\n<\/ul>\n\n<p>When a visitor clicks the payment button, the plugin sends the configured Ezone Pay API key, payment amount, payment title, optional note, order reference, internal reference, WordPress return URL, and optional customer first name, last name, and phone number to Ezone Pay. This data is sent so Ezone Pay can create a payment link and return the checkout URL.<\/p>\n\n<p>After the visitor is redirected back to WordPress, the plugin may send the configured Ezone Pay API key, payment link ID, amount, and order reference to Ezone Pay to check payment-link details and payment-link transactions. This data is sent so WordPress can confirm whether the payment was completed.<\/p>\n\n<p>The checkout itself is loaded from the payment link returned by Ezone Pay. Any payment details entered by the customer inside the Ezone Pay checkout are submitted directly to Ezone Pay and are not processed by this plugin.<\/p>\n\n<p>Terms of service: https:\/\/ezonepay.ly\/ar\/terms<\/p>\n\n<p>Privacy policy: https:\/\/ezonepay.ly\/ar\/privacy<\/p>\n\n<h3>Trademark notice<\/h3>\n\n<p>This plugin uses the Ezone Pay name to identify the payment service it integrates with. Public distribution should only proceed after you confirm that you have permission from the Ezone Pay trademark owner to use the name, brand, and any related marks.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>ezone-pay<\/code> folder to <code>\/wp-content\/plugins\/<\/code>.<\/li>\n<li>Activate <strong>Ezone Pay<\/strong> in WordPress.<\/li>\n<li>Go to <strong>Settings &gt; Ezone Pay<\/strong>.<\/li>\n<li>Choose the environment mode.<\/li>\n<li>Add the development and\/or production API keys.<\/li>\n<li>Make sure each API key has the <strong>Create Payment Link<\/strong> and <strong>View Payment Links<\/strong> permissions enabled.<\/li>\n<li>Add the shortcode to a page.<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"does%20this%20plugin%20process%20card%20or%20wallet%20credentials%3F\"><h3>Does this plugin process card or wallet credentials?<\/h3><\/dt>\n<dd><p>No. The plugin creates Ezone Pay payment links and embeds the returned checkout URL.<\/p><\/dd>\n<dt id=\"why%20does%20the%20payment%20page%20stay%20on%20%22waiting%20for%20confirmation%22%3F\"><h3>Why does the payment page stay on \"waiting for confirmation\"?<\/h3><\/dt>\n<dd><p>WordPress has not yet confirmed the payment. Make sure the API key can view payment links and transactions.<\/p><\/dd>\n<dt id=\"why%20is%20the%20iframe%20blank%20or%20blocked%3F\"><h3>Why is the iframe blank or blocked?<\/h3><\/dt>\n<dd><p>The Ezone Pay checkout page may be using frame-blocking headers. Ezone Pay must allow the merchant domain for iframe checkout.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h4>0.1.0<\/h4>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"Create Ezone Pay payment links from WordPress and display checkout in an embedded iframe.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/318526","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=318526"}],"author":[{"embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/ezonepay"}],"wp:attachment":[{"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=318526"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=318526"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=318526"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=318526"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=318526"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=318526"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}