مرکز ابزارها، افزونه ها و مثال های اتصال

در این صفحه بسته های آماده برای اتصال به سرویس پرداخت، افزونه های کمکی و مثال های اجرایی را مثل یک ریپازیتوری مرور می کنید: فایل ها را می بینید، README را می خوانید و کل بسته را با یک دانلود می گیرید.

CONTROLLED RELEASE

انتشار کنترل شده از پنل رسمی

هر بسته از مسیر مدیریتی رسمی پی اکسا منتشر می شود و قبل از دانلود، اطلاعات کلیدی آن به صورت شفاف نمایش داده می شود.

PRE-DOWNLOAD VISIBILITY

شفافیت محتوا پیش از دریافت

پیش نمایش README، مرور ساختار فایل و نمایش متادیتای بسته کمک می کند قبل از دانلود، ارزیابی دقیق تری از محتوا داشته باشید.

TRUST PROFILE

نمای رسمی تر برای انتخاب ابزار

صفحه بر پایه شفافیت انتشار، نمایش منبع README، تاریخ بروزرسانی و آمار دانلود چیده شده تا حس ارزیابی حرفه ای تری منتقل کند.

مرجع حقوقی و هویتی کنار دسترس

ساختار صفحه طوری چیده شده که اطلاعات انتشار، محتوای فایل ها و جزئیات هر بسته بدون شلوغی اضافه در دسترس باشند.

افزونه repository / wordpress-plugin

افزونه وردپرس - ووكامرس

افزونه پرداخت براي فروشگاه ووكامرس

دانلود بسته
21 فایل payexa-gateway-for-woocommerce-1.0.10.zip README: readme.txt

دانلود ثبت شده

101

آخرین بروزرسانی

2026-09-25

حجم بسته

339.6 KB

منتشرکننده

مدیر ارشد سامانه

وضعیت نمایش

عمومی و فعال

پیش نمایش فایل

payexa-gateway/includes/class-payexa-plugin.php

<?php if ( ! defined( 'ABSPATH' ) ) { exit; } class Payexa_Plugin { protected static $instance = null; protected $api; protected $blocks_support_registered = false; public static function instance() { if ( null === self::$instance ) { self::$instance = new self(); } return self::$instance; } private function __construct() { $this->api = new Payexa_API(); add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_assets' ) ); add_filter( 'plugin_action_links_' . plugin_basename( PAYEXA_GATEWAY_FILE ), array( $this, 'add_settings_link' ) ); Payexa_Admin_Settings::init(); $this->bootstrap_woocommerce_integration(); } public static function get_settings() { return Payexa_Admin_Settings::get_settings(); } protected function bootstrap_woocommerce_integration() { if ( ! class_exists( 'WooCommerce' ) ) { $this->maybe_add_admin_notice(); return; } require_once PAYEXA_GATEWAY_PATH . 'includes/class-payexa-gateway.php'; if ( did_action( 'before_woocommerce_init' ) ) { $this->declare_compatibility(); } else { add_action( 'before_woocommerce_init', array( $this, 'declare_compatibility' ) ); } add_filter( 'woocommerce_payment_gateways', array( $this, 'register_gateway' ) ); add_action( 'woocommerce_api_payexa_callback', array( $this, 'handle_callback' ) ); add_action( 'woocommerce_api_wc_gateway_payexa', array( $this, 'handle_callback' ) ); if ( did_action( 'woocommerce_blocks_loaded' ) ) { $this->register_blocks_support(); } else { add_action( 'woocommerce_blocks_loaded', array( $this, 'register_blocks_support' ) ); } } public function register_blocks_support() { if ( $this->blocks_support_registered ) { return; } $this->blocks_support_registered = true; $this->log_debug( 'blocks_loaded', array( 'abstract_exists' => class_exists( '\\Automattic\\WooCommerce\\Blocks\\Payments\\Integrations\\AbstractPaymentMethodType' ) ) ); if ( ! class_exists( '\Automattic\WooCommerce\Blocks\Payments\Integrations\AbstractPaymentMethodType' ) ) { return; } require_once PAYEXA_GATEWAY_PATH . 'includes/class-payexa-blocks-support.php'; add_action( 'woocommerce_blocks_payment_method_type_registration', function ( $payment_method_registry ) { $this->log_debug( 'blocks_registry_register', array( 'registry_class' => is_object( $payment_method_registry ) ? get_class( $payment_method_registry ) : gettype( $payment_method_registry ) ) ); $payment_method_registry->register( new Payexa_Blocks_Support() ); } ); } public function declare_compatibility() { if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) { \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', PAYEXA_GATEWAY_FILE, true ); \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', PAYEXA_GATEWAY_FILE, true ); } } public function register_gateway( $gateways ) { if ( ! in_array( 'WC_Gateway_Payexa', $gateways, true ) ) { $gateways[] = 'WC_Gateway_Payexa'; } $this->log_debug( 'register_gateway', array( 'gateways' => $gateways ) ); return $gateways; } public function add_settings_link( $links ) { $links[] = '<a href="' . esc_url( admin_url( 'admin.php?page=wc-settings&tab=checkout&section=payexa' ) ) . '">' . esc_html__( 'تنظیمات', 'payexa-gateway-for-woocommerce' ) . '</a>'; return $links; } protected function maybe_add_admin_notice() { if ( class_exists( 'WooCommerce' ) ) { return; } add_action( 'admin_notices', function () { echo '<div class="notice notice-error"><p>' . esc_html__( 'برای استفاده از افزونه درگاه پی اکسا، افزونه ووکامرس باید نصب و فعال باشد.', 'payexa-gateway-for-woocommerce' ) . '</p></div>'; } ); } public function enqueue_frontend_assets() { if ( ! function_exists( 'is_checkout' ) ) { return; } if ( is_checkout() || is_order_received_page() ) { $this->log_debug( 'enqueue_frontend_assets', array( 'is_checkout' => is_checkout(), 'is_order_received_page' => is_order_received_page() ) ); wp_enqueue_style( 'payexa-fonts', PAYEXA_GATEWAY_URL . 'assets/fonts.css', array(), PAYEXA_GATEWAY_VERSION ); wp_enqueue_style( 'payexa-frontend', PAYEXA_GATEWAY_URL . 'assets/frontend.css', array( 'payexa-fonts' ), PAYEXA_GATEWAY_VERSION ); wp_enqueue_script( 'payexa-frontend', PAYEXA_GATEWAY_URL . 'assets/frontend.js', array(), PAYEXA_GATEWAY_VERSION, true ); wp_localize_script( 'payexa-frontend', 'payexaFrontend', array( 'toast' => $this->get_toast_payload() ) ); } } protected function log_debug( $event, array $context ) { if ( ! function_exists( 'wc_get_logger' ) ) { return; } $logger = wc_get_logger(); $logger->debug( $event . ' ' . wp_json_encode( $context, JSON_UNESCAPED_UNICODE ), array( 'source' => 'payexa-gateway-debug' ) ); } public function handle_callback() { $request = $this->get_callback_request_data(); $order_id = absint( $this->extract_callback_value( $request, array( 'order_id', 'invoice_id', 'invoiceId' ), 0 ) ); $raw_order_id = sanitize_text_field( (string) $this->extract_callback_value( $request, array( 'order_id', 'invoice_id', 'invoiceId' ), '' ) ); $order_key = sanitize_text_field( (string) $this->extract_callback_value( $request, array( 'key', 'order_key' ), '' ) ); $authority = sanitize_text_field( (string) $this->extract_callback_value( $request, array( 'authority', 'Authority', 'token' ), '' ) ); $status = sanitize_text_field( (string) $this->extract_callback_value( $request, array( 'status', 'state', 'result', 'payment_status', 'paymentStatus' ), '' ) ); $gateway_order_id = sanitize_text_field( (string) $this->extract_callback_value( $request, array( 'gateway_order_id', 'gatewayOrderId', 'payment_order_id', 'paymentOrderId' ), '' ) ); $callback_status = $this->normalize_callback_status( $status ); $this->log_debug( 'callback_received', array( 'order_id' => $order_id, 'raw_order_id' => $raw_order_id, 'has_order_key' => ! empty( $order_key ), 'authority' => $authority, 'status' => $status, 'callback_status' => $callback_status, 'gateway_order_id' => $gateway_order_id, 'keys' => array_keys( $request ), ) ); $order = $this->resolve_callback_order( $order_id, $raw_order_id, $order_key, $authority, $gateway_order_id ); if ( ! $order ) { $this->log_debug( 'callback_invalid_order', array( 'order_id' => $order_id, 'raw_order_id' => $raw_order_id, 'authority' => $authority, 'gateway_order_id' => $gateway_order_id ) ); wp_safe_redirect( wc_get_checkout_url() ); exit; } $order->update_meta_data( '_payexa_callback_status', $status ); if ( $authority ) { $order->update_meta_data( '_payexa_authority', $authority ); } $order->save(); if ( 'failed' === $callback_status ) { if ( $order->is_paid() ) { wp_safe_redirect( $this->build_success_redirect_url( $order, $order->get_meta( '_payexa_tracking_code', true ) ) ); exit; } $fault_message = __( 'پرداخت توسط کاربر لغو شد یا پی اکسا وضعیت ناموفق برگرداند.', 'payexa-gateway-for-woocommerce' ); $order->update_status( 'failed', __( 'پی اکسا در callback وضعیت ناموفق یا لغو شده (NOK) برگرداند.', 'payexa-gateway-for-woocommerce' ) ); $order->add_order_note( __( 'تراکنش توسط کاربر لغو شد یا پی اکسا وضعیت ناموفق برگرداند؛ verify اجرا نشد.', 'payexa-gateway-for-woocommerce' ) ); $this->save_transaction_meta( $order, array( 'status' => 'failed', 'tracking_code' => $authority ) ); $this->add_payment_notice( 'failure' ); wp_safe_redirect( $this->build_failure_redirect_url( $order, $fault_message ) ); exit; } $verify_token = sanitize_text_field( (string) $order->get_meta( '_payexa_verify_token', true ) ); $request_order_id = sanitize_text_field( (string) $order->get_meta( '_payexa_request_order_id', true ) ); if ( ! $verify_token || ! $request_order_id ) { $fault_message = __( 'اطلاعات لازم برای وریفای پی اکسا در سفارش ذخیره نشده است. نیاز به بررسی دستی دارد.', 'payexa-gateway-for-woocommerce' ); $this->log_debug( 'callback_missing_verify_data', array( 'order_id' => $order->get_id(), 'authority' => $authority, 'verify_token' => $verify_token, 'request_order_id' => $request_order_id, 'status' => $status, 'keys' => array_keys( $request ) ) ); $order->update_status( 'on-hold', $fault_message ); $this->save_transaction_meta( $order, array( 'status' => 'pending' ) ); $this->add_payment_notice( 'failure' ); wp_safe_redirect( $this->build_failure_redirect_url( $order, $fault_message ) ); exit; } $this->log_debug( 'callback_verify_start', array( 'order_id' => $order->get_id(), 'authority' => $authority, 'verify_token' => $verify_token, 'request_order_id' => $request_order_id, 'callback_status' => $callback_status, 'gateway_order_id' => $order->get_meta( '_payexa_gateway_order_id', true ), 'is_paid_before' => $order->is_paid(), ) ); if ( $order->is_paid() ) { $this->add_payment_notice( 'success' ); wp_safe_redirect( $this->build_success_redirect_url( $order, $order->get_meta( '_payexa_tracking_code', true ) ) ); exit; } $verification = $this->api->verify_payment( $order, self::get_settings() ); if ( is_wp_error( $verification ) ) { $fault_message = $verification->get_error_message(); $this->log_debug( 'callback_verify_error', array( 'order_id' => $order->get_id(), 'authority' => $authority, 'verify_token' => $verify_token, 'request_order_id' => $request_order_id, 'status' => $status, 'callback_status' => $callback_status, 'message' => $verification->get_error_message() ) ); $order->update_status( 'on-hold', $fault_message ); $this->save_transaction_meta( $order, array( 'status' => 'failed', 'tracking_code' => $authority ) ); $this->add_payment_notice( 'failure' ); wp_safe_redirect( $this->build_failure_redirect_url( $order, $fault_message ) ); exit; } $normalized_status = $this->normalize_result_status( $verification['status'] ); $this->save_transaction_meta( $order, $verification ); if ( 'success' === $normalized_status ) { $order->payment_complete( $verification['tracking_code'] ); $order->add_order_note( sprintf( 'تراکنش Payexa با کد رهگیری %s با موفقیت تایید شد.', $verification['tracking_code'] ?: '-' ) ); $this->add_payment_notice( 'success' ); wp_safe_redirect( $this->build_success_redirect_url( $order, $verification['tracking_code'] ?? '' ) ); exit; } if ( 'already_verified' === $normalized_status ) { if ( $order->is_paid() ) { $order->add_order_note( __( 'پی اکسا پاسخ 201 برگرداند اما سفارش قبلاً با موفقیت پرداخت شده بود؛ وضعیت تغییر نکرد.', 'payexa-gateway-for-woocommerce' ) ); $this->add_payment_notice( 'success' ); wp_safe_redirect( $this->build_success_redirect_url( $order, $order->get_meta( '_payexa_tracking_code', true ) ) ); exit; } $tracking_code = $verification['tracking_code'] ?? $order->get_meta( '_payexa_tracking_code', true ) ?? $authority; $order->payment_complete( $tracking_code ); $order->add_order_note( sprintf( __( 'پی اکسا پاسخ 201 برگرداند (تراکنش قبلاً تایید شده). سفارش با کد رهگیری %s نهایی شد.', 'payexa-gateway-for-woocommerce' ), $tracking_code ?: '-' ) ); $this->add_payment_notice( 'success' ); wp_safe_redirect( $this->build_success_redirect_url( $order, $tracking_code ) ); exit; } if ( 'pending' === $normalized_status ) { $fault_message = __( 'تراکنش در وضعیت در انتظار تایید قرار دارد.', 'payexa-gateway-for-woocommerce' ); $order->update_status( 'on-hold', __( 'تراکنش در وضعیت در انتظار تایید قرار دارد.', 'payexa-gateway-for-woocommerce' ) ); $order->add_order_note( __( 'پی اکسا پاسخ NOT_SETTLED برگرداند. سفارش در حالت در انتظار تایید باقی ماند.', 'payexa-gateway-for-woocommerce' ) ); $this->add_payment_notice( 'failure' ); wp_safe_redirect( $this->build_failure_redirect_url( $order, $fault_message ) ); exit; } $fault_message = __( 'پرداخت توسط پی اکسا تایید نشد.', 'payexa-gateway-for-woocommerce' ); $order->update_status( 'failed', $fault_message ); $this->add_payment_notice( 'failure' ); wp_safe_redirect( $this->build_failure_redirect_url( $order, $fault_message ) ); exit; } protected function add_payment_notice( $type ) { if ( ! function_exists( 'wc_add_notice' ) || ! function_exists( 'is_checkout' ) ) { return; } if ( ! is_checkout() && ! is_order_received_page() ) { return; } $settings = self::get_settings(); if ( 'success' === $type ) { $message = sanitize_text_field( (string) ( $settings['success_message'] ?? '' ) ); if ( '' !== $message ) { wc_add_notice( $message, 'success' ); } return; } $message = sanitize_text_field( (string) ( $settings['failure_message'] ?? '' ) ); if ( '' !== $message ) { wc_add_notice( $message, 'error' ); } } protected function build_success_redirect_url( WC_Order $order, $transaction_id = '' ) { $args = array( 'payexa_notice' => 'success' ); $transaction_id = sanitize_text_field( (string) $transaction_id ); if ( '' === $transaction_id ) { $transaction_id = sanitize_text_field( (string) $order->get_meta( '_payexa_tracking_code', true ) ); } if ( '' !== $transaction_id ) { $args['payexa_transaction_id'] = $transaction_id; } return add_query_arg( $args, $order->get_checkout_order_received_url() ); } protected function build_failure_redirect_url( WC_Order $order, $fault = '' ) { $args = array( 'payexa_notice' => 'failure' ); $fault = sanitize_text_field( (string) $fault ); if ( '' !== $fault ) { $args['payexa_fault'] = $fault; } return add_query_arg( $args, $order->get_checkout_payment_url( false ) ); } protected function get_toast_payload() { $notice_type = sanitize_key( wp_unslash( $_GET['payexa_notice'] ?? '' ) ); if ( ! in_array( $notice_type, array( 'success', 'failure' ), true ) ) { return null; } $settings = self::get_settings(); $message_template = 'success' === $notice_type ? sanitize_text_field( (string) ( $settings['success_message'] ?? '' ) ) : sanitize_text_field( (string) ( $settings['failure_message'] ?? '' ) ); if ( '' === $message_template ) { return null; } $transaction_id = sanitize_text_field( (string) wp_unslash( $_GET['payexa_transaction_id'] ?? '' ) ); $fault = sanitize_text_field( (string) wp_unslash( $_GET['payexa_fault'] ?? '' ) ); $message = strtr( $message_template, array( '{transaction_id}' => $transaction_id, '{fault}' => $fault, ) ); return array( 'type' => 'success' === $notice_type ? 'success' : 'error', 'message' => $message, ); } protected function normalize_callback_status( $status ) { $status = strtolower( trim( (string) $status ) ); if ( in_array( $status, array( 'ok', 'success', 'successful', 'paid', 'verified', '1', '100' ), true ) ) { return 'success'; } if ( in_array( $status, array( 'nok', 'failed', 'fail', 'cancel', 'canceled', 'cancelled', '-1', '0' ), true ) ) { return 'failed'; } return 'unknown'; } protected function get_callback_request_data() { $get_data = wp_unslash( $_GET ); $post_data = wp_unslash( $_POST ); if ( ! is_array( $get_data ) ) { $get_data = array(); } if ( ! is_array( $post_data ) ) { $post_data = array(); } return array_merge( $get_data, $post_data ); } protected function resolve_callback_order( $order_id, $raw_order_id, $order_key, $authority, $gateway_order_id ) { $order = $order_id ? wc_get_order( $order_id ) : false; if ( $order && ( empty( $order_key ) || $order->get_order_key() === $order_key ) ) { return $order; } foreach ( array( array( '_payexa_gateway_order_id', $gateway_order_id ), array( '_payexa_gateway_order_id', $raw_order_id ), array( '_payexa_authority', $authority ), ) as $lookup ) { $resolved = $this->find_order_by_meta( $lookup[0], $lookup[1] ); if ( $resolved ) { return $resolved; } } return false; } protected function find_order_by_meta( $meta_key, $meta_value ) { $meta_value = trim( (string) $meta_value ); if ( '' === $meta_value || ! function_exists( 'wc_get_orders' ) ) { return false; } $orders = wc_get_orders( array( 'limit' => 1, 'type' => 'shop_order', 'return' => 'objects', 'meta_key' => $meta_key, 'meta_value' => $meta_value, ) ); if ( empty( $orders ) ) { return false; } return $orders[0] instanceof WC_Order ? $orders[0] : false; } protected function extract_callback_value( array $request, array $keys, $default = '' ) { foreach ( $keys as $key ) { if ( isset( $request[ $key ] ) && '' !== $request[ $key ] && null !== $request[ $key ] ) { return $request[ $key ]; } } return $default; } protected function normalize_result_status( $status ) { $status = strtolower( (string) $status ); if ( in_array( $status, array( 'success', 'successful', 'paid', 'verified', 'ok', '1', '100' ), true ) ) { return 'success'; } if ( 'already_verified' === $status ) { return 'already_verified'; } if ( in_array( $status, array( 'pending', 'processing', 'waiting', 'not_settled' ), true ) ) { return 'pending'; } return 'failed'; } protected function save_transaction_meta( WC_Order $order, array $verification ) { $status = $this->normalize_result_status( $verification['status'] ?? 'failed' ); $order->update_meta_data( '_payexa_status', $status ); if ( ! empty( $verification['request_order_id'] ) ) { $order->update_meta_data( '_payexa_request_order_id', sanitize_text_field( (string) $verification['request_order_id'] ) ); } if ( ! empty( $verification['tracking_code'] ) ) { $order->update_meta_data( '_payexa_tracking_code', sanitize_text_field( (string) $verification['tracking_code'] ) ); } if ( isset( $verification['verification_code'] ) ) { $order->update_meta_data( '_payexa_verification_code', absint( $verification['verification_code'] ) ); } if ( isset( $verification['merchant_verified'] ) ) { $order->update_meta_data( '_payexa_merchant_verified', $verification['merchant_verified'] ? 'yes' : 'no' ); } if ( ! empty( $verification['merchant_verified_at'] ) ) { $order->update_meta_data( '_payexa_merchant_verified_at', sanitize_text_field( (string) $verification['merchant_verified_at'] ) ); } $order->update_meta_data( '_payexa_verified_payload', wp_json_encode( $verification['raw'] ?? array(), JSON_UNESCAPED_UNICODE ) ); $order->save(); } }

README / توضیحات

منبع: readme.txt

=== Payexa Gateway for WooCommerce | درگاه پرداخت پی اکسا برای ووکامرس === Contributors: payexa Tags: payment, gateway, payexa, pexn, woocommerce, iran payment, درگاه پرداخت, پی‌اکسا, پرداخت آنلاین, ووکامرس Requires at least: 6.4 Tested up to: 6.8 Requires PHP: 7.4 Stable tag: 1.0.0 License: GPLv2 or later License URI: https://www.gnu.org/licenses/gpl-2.0.html WC requires at least: 8.0 WC tested up to: 9.0

افزونه حرفه ای درگاه پرداخت Payexa برای WooCommerce با رابط فارسی RTL، تایید تراکنش، حالت سندباکس و بازگشت استاندارد به صفحات خود ووکامرس. Professional Payexa payment gateway for WooCommerce with Persian RTL UX, PAYEXA sandbox token support, transaction verification, and standard WooCommerce order flow.

== Description ==

Payexa Gateway for WooCommerce یک افزونه حرفه ای برای اتصال فروشگاه وردپرسی شما به درگاه پرداخت پی اکسا است. این افزونه برای فروشگاه های فارسی زبان، کسب وکارهای ایرانی و توسعه دهندگانی طراحی شده است که به یک درگاه پرداخت WooCommerce سبک، پایدار، امن و آماده انتشار نیاز دارند.

Payexa Gateway for WooCommerce provides a production-grade payment gateway integration for merchants who need a reliable Payexa, PEXN, and Iran payment solution inside WooCommerce. The plugin includes sandbox support, callback verification, structured logging, RTL Persian UI, and a clean checkout experience.

Features and SEO keywords:

  • درگاه پرداخت پی اکسا برای ووکامرس
  • اتصال مستقیم به Payexa API
  • پشتیبانی از محیط عملیاتی و سندباکس با توکن PAYEXA
  • تایید تراکنش از طریق callback و verify
  • رابط کاربری فارسی و RTL در مدیریت و فرانت
  • ثبت لاگ با WooCommerce Logger
  • بازگشت استاندارد به صفحه سفارش و پرداخت ووکامرس
  • سازگار با WooCommerce و WordPress جدید
  • Ideal for payment, gateway, payexa, pexn, woocommerce, iran payment, checkout, Persian ecommerce

Why this WooCommerce Payexa plugin matters:

  • سبک و بهینه است و فقط در صفحات مورد نیاز asset لود می کند.
  • برای بازار ایران و سناریوهای درگاه پرداخت فارسی طراحی شده است.
  • ساختار توسعه پذیر برای سفارشی سازی و نگهداری بلندمدت دارد.
  • تجربه پرداخت کاربر را با پیام اعتماد، رابط RTL و بازگشت شفاف سفارش بهبود می دهد.

Plugin capabilities:

  • Payment request via /v1/payment/request
  • Sends official Content-Type: application/json and X-API-KEY headers
  • Payment verify via /v1/payment/verify
  • Redirects shoppers to /startPay?authority={authority}
  • Dedicated WooCommerce callback endpoint with wc-api=payexa_callback
  • Uses WooCommerce order-received page for successful payments
  • Returns failed or canceled payments to the WooCommerce payment page
  • Sandbox access by entering PAYEXA in the API key field
  • Production token support from https://pexn.ir
  • Persian admin configuration panel with Test Connection button
  • Finalizes WooCommerce orders only after verify HTTP 200 SUCCESS
  • Detects duplicate verify HTTP 201 and avoids double finalization

== Third-Party Services ==

This plugin connects to the external Payexa payment service to create and verify payment transactions.

It sends the following data to Payexa when a customer starts payment:

  • Order amount
  • Callback URL
  • A unique merchant-side order reference

It sends the following data to Payexa when verifying a payment:

  • Payexa request order ID returned by the payment request API
  • The unique verification token returned by Payexa as amount_unique

The service endpoints used by the plugin are:

  • https://pay.pexn.ir/v1/payment/request
  • https://pay.pexn.ir/v1/payment/verify
  • https://sandbox.pexn.ir/v1/payment/request
  • https://sandbox.pexn.ir/v1/payment/verify

Merchant API keys are stored in WordPress and sent server-to-server in the X-API-KEY header.

Please review the provider terms and policies before using the service:

  • https://pexn.ir

== Installation ==

  1. پوشه payexa-gateway را در مسیر /wp-content/plugins/ قرار دهید.
  2. افزونه را از بخش افزونه های وردپرس فعال کنید.
  3. مطمئن شوید WooCommerce نصب و فعال است.
  4. از منوی WooCommerce > درگاه پی اکسا وارد تنظیمات شوید.
  5. برای استفاده از سندباکس، در فیلد API Key مقدار PAYEXA را وارد کنید.
  6. برای استفاده در محیط واقعی، در https://pexn.ir ثبت نام کنید و API Key خود را وارد کنید.
  7. درگاه پرداخت Payexa را در تسویه حساب WooCommerce فعال کنید و یک سفارش تست ثبت کنید.

== Frequently Asked Questions ==

= آیا افزونه از سندباکس پشتیبانی می کند؟ = بله. برای استفاده از سندباکس کافی است در فیلد API Key مقدار PAYEXA را وارد کنید تا افزونه به صورت خودکار از آدرس sandbox و توکن ثابت PAYEXA استفاده کند.

= برای محیط واقعی چه چیزی لازم است؟ = باید در pexn.ir ثبت نام کنید و API token اختصاصی خود را در تنظیمات افزونه وارد کنید.

= آیا این افزونه برای ووکامرس فارسی مناسب است؟ = بله. رابط مدیریت، پیام های کاربری و چیدمان checkout به صورت فارسی و RTL طراحی شده است.

= آیا لاگ ثبت می شود؟ = بله. این افزونه از WooCommerce Logger برای ثبت درخواست، پاسخ و خطاهای ارتباطی استفاده می کند.

= هدرهای رسمی API چگونه ارسال می شوند؟ = افزونه درخواست های سروری Payexa را با هدرهای Content-Type: application/json و X-API-KEY ارسال می کند. کلید API فقط در سمت سرور وردپرس نگهداری می شود.

= سفارش دقیقا چه زمانی موفق می شود؟ = فقط وقتی verify پی اکسا با HTTP 200 و status برابر SUCCESS برگردد، سفارش نهایی می شود. اگر verify کد 201 برگرداند، یعنی قبلا تایید شده و افزونه از ثبت موفقیت تکراری جلوگیری می کند.

== Screenshots ==

  1. صفحه تنظیمات فارسی درگاه Payexa در مدیریت ووکامرس
  2. نمایش درگاه پرداخت پی اکسا در checkout ووکامرس
  3. بازگشت موفق به صفحه استاندارد سفارش ووکامرس پس از verify
  4. بازگشت ناموفق یا لغو پرداخت به صفحه پرداخت ووکامرس

== Changelog ==

= 1.0.0 = * انتشار اولیه افزونه درگاه پرداخت Payexa برای WooCommerce * افزودن request، verify و callback حرفه ای * افزودن پنل تنظیمات فارسی RTL * استفاده از بازگشت استاندارد WooCommerce برای حالت موفق و ناموفق * افزودن readme دو زبانه با تمرکز بر سئو کلمات کلیدی payment gateway, Payexa, PEXN, WooCommerce, درگاه پرداخت

== Upgrade Notice ==

= 1.0.0 = اولین نسخه پایدار افزونه Payexa Gateway for WooCommerce منتشر شد.

PAYEXA ASSISTANT

من دستیار پی اکسا هستم، شما را در تمام مسیر راهنمایی می‌کنم و اگر به من نیازی ندارید با ۲ بار کلیک خاموش می‌شوم.