افزونه وردپرس - ووكامرس
افزونه پرداخت براي فروشگاه ووكامرس
دانلود ثبت شده
100
آخرین بروزرسانی
2026-09-25
حجم بسته
339.6 KB
منتشرکننده
مدیر ارشد سامانه
وضعیت نمایش
عمومی و فعال
در این صفحه بسته های آماده برای اتصال به سرویس پرداخت، افزونه های کمکی و مثال های اجرایی را مثل یک ریپازیتوری مرور می کنید: فایل ها را می بینید، README را می خوانید و کل بسته را با یک دانلود می گیرید.
CONTROLLED RELEASE
انتشار کنترل شده از پنل رسمی
هر بسته از مسیر مدیریتی رسمی پی اکسا منتشر می شود و قبل از دانلود، اطلاعات کلیدی آن به صورت شفاف نمایش داده می شود.
PRE-DOWNLOAD VISIBILITY
شفافیت محتوا پیش از دریافت
پیش نمایش README، مرور ساختار فایل و نمایش متادیتای بسته کمک می کند قبل از دانلود، ارزیابی دقیق تری از محتوا داشته باشید.
TRUST PROFILE
نمای رسمی تر برای انتخاب ابزار
صفحه بر پایه شفافیت انتشار، نمایش منبع README، تاریخ بروزرسانی و آمار دانلود چیده شده تا حس ارزیابی حرفه ای تری منتقل کند.
مرجع حقوقی و هویتی کنار دسترس
ساختار صفحه طوری چیده شده که اطلاعات انتشار، محتوای فایل ها و جزئیات هر بسته بدون شلوغی اضافه در دسترس باشند.
افزونه پرداخت براي فروشگاه ووكامرس
دانلود ثبت شده
100
آخرین بروزرسانی
2026-09-25
حجم بسته
339.6 KB
منتشرکننده
مدیر ارشد سامانه
وضعیت نمایش
عمومی و فعال
پوشه جاری را انتخاب کنید یا برای فایل های متنی پیش نمایش بگیرید.
| نام | نوع | اندازه |
|---|---|---|
| بازگشت به پوشه قبل | پوشه | - |
| class-payexa-admin-settings.php | قابل پیش نمایش | 17.2 KB |
payexa-gateway/admin/class-payexa-admin-settings.php
<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
class Payexa_Admin_Settings {
const OPTION_KEY = 'payexa_gateway_settings';
const WC_OPTION_KEY = 'woocommerce_payexa_settings';
const MENU_CAPABILITY = 'manage_options';
public static function init() {
add_action( 'admin_menu', array( __CLASS__, 'register_menu' ) );
add_action( 'admin_init', array( __CLASS__, 'register_settings' ) );
add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue_assets' ) );
add_action( 'wp_ajax_payexa_test_connection', array( __CLASS__, 'ajax_test_connection' ) );
}
public static function defaults() {
return array(
'enabled' => 'yes',
'title' => 'پرداخت از طریق پی اکسا',
'description' => 'پرداخت آنلاین امن با اتصال مستقیم به درگاه Payexa و تایید خودکار تراکنش.',
'environment' => 'production',
'api_key' => '',
'currency' => 'auto',
'trust_message' => 'پرداخت شما از طریق بستر امن پی اکسا انجام می شود و وضعیت تراکنش به صورت خودکار در سفارش ثبت خواهد شد.',
'success_message' => 'پرداخت شما با موفقیت انجام شد و سفارش ثبت شد.',
'failure_message' => 'پرداخت ناموفق بود یا توسط کاربر لغو شد. در صورت تمایل دوباره تلاش کنید.',
);
}
public static function get_settings() {
$settings = get_option( self::OPTION_KEY, array() );
if ( empty( $settings ) ) {
$legacy_settings = get_option( self::WC_OPTION_KEY, array() );
if ( ! empty( $legacy_settings ) ) {
$legacy_api_key = $legacy_settings['api_key'] ?? '';
$settings = array(
'enabled' => self::normalize_checkbox_value( $legacy_settings['enabled'] ?? 'no' ),
'environment' => self::normalize_environment( 'yes' === self::normalize_checkbox_value( $legacy_settings['sandbox'] ?? 'no' ) ? 'sandbox' : 'production' ),
'api_key' => 'PAYEXA' === strtoupper( trim( (string) $legacy_api_key ) ) ? '' : $legacy_api_key,
);
}
}
if ( empty( $settings['environment'] ) ) {
$settings['environment'] = self::normalize_environment( 'PAYEXA' === strtoupper( trim( (string) ( $settings['api_key'] ?? '' ) ) ) ? 'sandbox' : 'production' );
}
if ( 'sandbox' === self::normalize_environment( $settings['environment'] ) && 'PAYEXA' === strtoupper( trim( (string) ( $settings['api_key'] ?? '' ) ) ) ) {
$settings['api_key'] = '';
}
unset( $settings['sandbox'] );
return wp_parse_args( $settings, self::defaults() );
}
public static function register_menu() {
add_submenu_page(
'woocommerce',
__( 'تنظیمات درگاه پی اکسا', 'payexa-gateway-for-woocommerce' ),
__( 'درگاه پی اکسا', 'payexa-gateway-for-woocommerce' ),
self::MENU_CAPABILITY,
'payexa-gateway',
array( __CLASS__, 'render_page' )
);
}
public static function register_settings() {
register_setting(
'payexa_gateway_group',
self::OPTION_KEY,
array(
'type' => 'array',
'sanitize_callback' => array( __CLASS__, 'sanitize_settings' ),
'default' => self::defaults(),
)
);
add_settings_section(
'payexa_gateway_main',
__( 'پیکربندی درگاه پرداخت پی اکسا', 'payexa-gateway-for-woocommerce' ),
array( __CLASS__, 'render_section_intro' ),
'payexa-gateway'
);
$fields = array(
'enabled' => __( 'فعال سازی درگاه', 'payexa-gateway-for-woocommerce' ),
'title' => __( 'عنوان درگاه', 'payexa-gateway-for-woocommerce' ),
'description' => __( 'توضیحات درگاه', 'payexa-gateway-for-woocommerce' ),
'environment' => __( 'محیط پرداخت', 'payexa-gateway-for-woocommerce' ),
'api_key' => __( 'کلید API', 'payexa-gateway-for-woocommerce' ),
'currency' => __( 'واحد پولی', 'payexa-gateway-for-woocommerce' ),
'trust_message' => __( 'متن اعتماد در صفحه پرداخت', 'payexa-gateway-for-woocommerce' ),
'success_message' => __( 'متن پرداخت موفق', 'payexa-gateway-for-woocommerce' ),
'failure_message' => __( 'متن پرداخت ناموفق', 'payexa-gateway-for-woocommerce' ),
);
foreach ( $fields as $key => $label ) {
add_settings_field(
$key,
$label,
array( __CLASS__, 'render_field' ),
'payexa-gateway',
'payexa_gateway_main',
array( 'key' => $key )
);
}
}
public static function sanitize_settings( $input ) {
$defaults = self::defaults();
$output = array();
$output['enabled'] = self::normalize_checkbox_value( $input['enabled'] ?? 'no' );
$output['title'] = sanitize_text_field( $input['title'] ?? $defaults['title'] );
$output['description'] = sanitize_textarea_field( $input['description'] ?? $defaults['description'] );
$output['environment'] = self::normalize_environment( $input['environment'] ?? $defaults['environment'] );
$output['api_key'] = sanitize_text_field( $input['api_key'] ?? '' );
$output['currency'] = self::normalize_currency( $input['currency'] ?? $defaults['currency'] );
$output['trust_message'] = sanitize_textarea_field( $input['trust_message'] ?? $defaults['trust_message'] );
$output['success_message'] = sanitize_textarea_field( $input['success_message'] ?? $defaults['success_message'] );
$output['failure_message'] = sanitize_textarea_field( $input['failure_message'] ?? $defaults['failure_message'] );
return wp_parse_args( $output, $defaults );
}
protected static function normalize_checkbox_value( $value ) {
return in_array( (string) $value, array( 'yes', '1', 'true' ), true ) ? 'yes' : 'no';
}
protected static function normalize_environment( $value ) {
return 'sandbox' === sanitize_key( (string) $value ) ? 'sandbox' : 'production';
}
protected static function normalize_currency( $value ) {
$value = sanitize_key( (string) $value );
return in_array( $value, array( 'auto', 'IRT', 'IRR' ), true ) ? $value : 'auto';
}
public static function render_section_intro() {
echo '<p>' . esc_html__( 'در این بخش می توانید درگاه Payexa را برای ووکامرس فعال کرده، محیط پرداخت را مشخص کنید، کلید API تولید را ثبت کنید و دسترسی به سرویس را بررسی کنید.', 'payexa-gateway-for-woocommerce' ) . '</p>';
echo '<h3>' . esc_html__( 'تنظیمات عملیات پرداخت', 'payexa-gateway-for-woocommerce' ) . '</h3>';
}
public static function render_field( $args ) {
$key = $args['key'];
$settings = self::get_settings();
$value = $settings[ $key ] ?? '';
switch ( $key ) {
case 'enabled':
printf(
'<label class="payexa-switch"><input type="checkbox" name="%1$s[%2$s]" value="yes" %3$s><span></span></label>',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
checked( 'yes', (string) $value, false )
);
break;
case 'environment':
printf(
'<select class="regular-text payexa-input" name="%1$s[%2$s]"><option value="production" %3$s>%4$s</option><option value="sandbox" %5$s>%6$s</option></select>',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
selected( 'production', (string) $value, false ),
esc_html__( 'عملیاتی', 'payexa-gateway-for-woocommerce' ),
selected( 'sandbox', (string) $value, false ),
esc_html__( 'سندباکس', 'payexa-gateway-for-woocommerce' )
);
echo '<p class="description">' . esc_html__( 'پیش فرض افزونه روی محیط عملیاتی است. برای جلوگیری از ثبت ناخواسته سفارش های آزمایشی، سندباکس فقط وقتی فعال می شود که این گزینه را به صورت صریح روی سندباکس قرار دهید.', 'payexa-gateway-for-woocommerce' ) . '</p>';
break;
case 'title':
printf(
'<input type="text" class="regular-text payexa-input" name="%1$s[%2$s]" value="%3$s">',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
esc_attr( $value )
);
break;
case 'description':
printf(
'<textarea class="large-text payexa-input" rows="3" name="%1$s[%2$s]">%3$s</textarea>',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
esc_textarea( $value )
);
break;
case 'api_key':
printf(
'<div class="payexa-api-key-row"><input type="text" class="regular-text payexa-input" dir="ltr" name="%1$s[%2$s]" value="%3$s" autocomplete="off"><button type="button" class="button-link payexa-help-trigger" aria-expanded="false" aria-controls="payexa-api-key-help"><span class="dashicons dashicons-editor-help" aria-hidden="true"></span><span class="screen-reader-text">%4$s</span></button></div>',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
esc_attr( $value ),
esc_attr__( 'راهنمای دریافت کلید اتصال', 'payexa-gateway-for-woocommerce' )
);
echo '<p class="description">' . esc_html__( 'این فیلد فقط برای کلید API محیط عملیاتی است. در حالت سندباکس نیازی به وارد کردن PAYEXA در این فیلد نیست.', 'payexa-gateway-for-woocommerce' ) . '</p>';
echo '<div id="payexa-api-key-help" class="payexa-help-modal" hidden><div class="payexa-help-modal__backdrop"></div><div class="payexa-help-modal__dialog" role="dialog" aria-modal="true" aria-labelledby="payexa-api-key-help-title"><button type="button" class="button-link payexa-help-modal__close" aria-label="' . esc_attr__( 'بستن راهنما', 'payexa-gateway-for-woocommerce' ) . '">×</button><h3 id="payexa-api-key-help-title">' . esc_html__( 'راهنمای دریافت کلید اتصال', 'payexa-gateway-for-woocommerce' ) . '</h3><p>' . esc_html__( 'برای دریافت کلید اتصال، در سایت pexn.ir ثبت نام پذیرنده انجام دهید، کارت بانکی خود را ثبت کنید و نرم افزار SMSuploader معرفی شده در منوی دستگاه های متصل را نصب نمایید.', 'payexa-gateway-for-woocommerce' ) . '</p></div></div>';
echo '<p><button type="button" class="button button-secondary payexa-test-connection">' . esc_html__( 'تست اتصال', 'payexa-gateway-for-woocommerce' ) . '</button> <span class="payexa-test-result" aria-live="polite"></span></p>';
break;
case 'currency':
printf(
'<select class="regular-text payexa-input" name="%1$s[%2$s]"><option value="auto" %3$s>%4$s</option><option value="IRT" %5$s>%6$s</option><option value="IRR" %7$s>%8$s</option></select>',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
selected( 'auto', (string) $value, false ),
esc_html__( 'خودکار (بر اساس تنظیمات ووکامرس)', 'payexa-gateway-for-woocommerce' ),
selected( 'IRT', (string) $value, false ),
esc_html__( 'تومان (IRT) — ضرب در ۱۰', 'payexa-gateway-for-woocommerce' ),
selected( 'IRR', (string) $value, false ),
esc_html__( 'ریال (IRR) — بدون تبدیل', 'payexa-gateway-for-woocommerce' )
);
echo '<p class="description">' . esc_html__( 'درگاه پی اکسا با ریال کار میکند. اگر واحد پولی فروشگاه شما تومان است (IRT)، مبلغ قبل از ارسال به درگاه ضربدر ۱۰ میشود. در حالت خودکار، واحد پولی تنظیمشده در ووکامرس بررسی میشود.', 'payexa-gateway-for-woocommerce' ) . '</p>';
break;
case 'trust_message':
printf(
'<textarea class="large-text payexa-input" rows="2" name="%1$s[%2$s]">%3$s</textarea>',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
esc_textarea( $value )
);
echo '<p class="description">' . esc_html__( 'این متن در صفحه پرداخت ووکامرس زیر روش پرداخت پی اکسا نمایش داده میشود. برای حذف، خالی بگذارید.', 'payexa-gateway-for-woocommerce' ) . '</p>';
break;
case 'success_message':
printf(
'<textarea class="large-text payexa-input" rows="2" name="%1$s[%2$s]">%3$s</textarea>',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
esc_textarea( $value )
);
echo '<p class="description">' . esc_html__( 'متن پیامی که می خواهید بعد از پرداخت موفق به کاربر نمایش دهید را وارد نمایید. می توانید از شورت کد {transaction_id} برای نمایش کد رهگیری یا توکن پی اکسا استفاده کنید.', 'payexa-gateway-for-woocommerce' ) . '</p>';
break;
case 'failure_message':
printf(
'<textarea class="large-text payexa-input" rows="2" name="%1$s[%2$s]">%3$s</textarea>',
esc_attr( self::OPTION_KEY ),
esc_attr( $key ),
esc_textarea( $value )
);
echo '<p class="description">' . esc_html__( 'متن پیامی که می خواهید بعد از پرداخت ناموفق به کاربر نمایش دهید را وارد نمایید. می توانید از شورت کد {fault} برای نمایش دلیل خطا یا علت ناموفق بودن پرداخت استفاده کنید.', 'payexa-gateway-for-woocommerce' ) . '</p>';
break;
}
}
public static function enqueue_assets( $hook ) {
if ( 'woocommerce_page_payexa-gateway' !== $hook ) {
return;
}
wp_enqueue_style( 'payexa-fonts', PAYEXA_GATEWAY_URL . 'assets/fonts.css', array(), PAYEXA_GATEWAY_VERSION );
wp_enqueue_style( 'payexa-admin', PAYEXA_GATEWAY_URL . 'assets/admin.css', array( 'payexa-fonts' ), PAYEXA_GATEWAY_VERSION );
wp_enqueue_script( 'payexa-admin', PAYEXA_GATEWAY_URL . 'assets/admin.js', array(), PAYEXA_GATEWAY_VERSION, true );
wp_localize_script(
'payexa-admin',
'payexaAdmin',
array(
'ajaxUrl' => admin_url( 'admin-ajax.php' ),
'nonce' => wp_create_nonce( 'payexa_test_connection' ),
'messages' => array(
'checking' => __( 'در حال بررسی اتصال...', 'payexa-gateway-for-woocommerce' ),
'empty' => __( 'پاسخی دریافت نشد.', 'payexa-gateway-for-woocommerce' ),
'error' => __( 'امکان بررسی اتصال وجود ندارد.', 'payexa-gateway-for-woocommerce' ),
),
)
);
}
public static function render_page() {
if ( ! current_user_can( self::MENU_CAPABILITY ) ) {
wp_die( esc_html__( 'شما مجوز دسترسی به تنظیمات درگاه پی اکسا را ندارید.', 'payexa-gateway-for-woocommerce' ) );
}
?>
<div class="wrap payexa-admin-wrap">
<div class="payexa-admin-card">
<div class="payexa-admin-card__hero">
<img class="payexa-admin-card__logo" src="<?php echo esc_url( PAYEXA_GATEWAY_URL . 'assets/logo-payexa.jpg' ); ?>" alt="<?php echo esc_attr__( 'لوگوی پی اکسا', 'payexa-gateway-for-woocommerce' ); ?>">
<h1><?php echo esc_html__( 'درگاه پرداخت پی اکسا برای ووکامرس', 'payexa-gateway-for-woocommerce' ); ?></h1>
<p><?php echo esc_html__( 'پیکربندی حرفه ای، تایید تراکنش و مدیریت ایمن پرداخت های آنلاین فروشگاه شما.', 'payexa-gateway-for-woocommerce' ); ?></p>
</div>
<form method="post" action="options.php">
<?php settings_fields( 'payexa_gateway_group' ); ?>
<?php do_settings_sections( 'payexa-gateway' ); ?>
<?php submit_button( __( 'ذخیره تنظیمات', 'payexa-gateway-for-woocommerce' ), 'primary payexa-save-button' ); ?>
</form>
</div>
</div>
<?php
}
public static function ajax_test_connection() {
check_ajax_referer( 'payexa_test_connection', 'nonce' );
if ( ! current_user_can( self::MENU_CAPABILITY ) ) {
wp_send_json_error( array( 'message' => 'شما مجوز این عملیات را ندارید.' ), 403 );
}
$api = new Payexa_API();
$settings = self::get_settings();
$settings['api_key'] = sanitize_text_field( wp_unslash( $_POST['api_key'] ?? ( $settings['api_key'] ?? '' ) ) );
$settings['environment'] = self::normalize_environment( wp_unslash( $_POST['environment'] ?? ( $settings['environment'] ?? 'production' ) ) );
$result = $api->test_connection( $settings );
if ( is_wp_error( $result ) ) {
wp_send_json_error( array( 'message' => $result->get_error_message() ), 500 );
}
$code = (int) ( $result['code'] ?? 0 );
$message = sanitize_text_field( (string) ( $result['message'] ?? '' ) );
$is_token_valid = ! empty( $result['is_token_valid'] );
$merchant_name = sanitize_text_field( (string) ( $result['merchant_name'] ?? '' ) );
$merchant_status = sanitize_text_field( (string) ( $result['merchant_status'] ?? '' ) );
if ( $is_token_valid ) {
$success_message = $message;
if ( $merchant_name ) {
$success_message .= ' (' . sprintf( 'پذیرنده: %s', $merchant_name ) . ')';
}
wp_send_json_success(
array(
'message' => $success_message,
)
);
}
if ( in_array( $code, array( 401, 403 ), true ) ) {
$error_message = $message;
if ( $merchant_status ) {
$error_message .= ' (' . sprintf( 'وضعیت پذیرنده: %s', $merchant_status ) . ')';
}
wp_send_json_error(
array(
'message' => $error_message,
)
,
401
);
}
wp_send_json_error(
array(
'message' => $message ?: 'سرور پی اکسا پاسخ غیرمنتظره برگرداند.',
),
502
);
}
}
منبع: 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:
Why this WooCommerce Payexa plugin matters:
Plugin capabilities:
== 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:
It sends the following data to Payexa when verifying a payment:
The service endpoints used by the plugin are:
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:
== Installation ==
== 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 ==
== 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 منتشر شد.
من دستیار پی اکسا هستم، شما را در تمام مسیر راهنمایی میکنم و اگر به من نیازی ندارید با ۲ بار کلیک خاموش میشوم.