تفکیک هاست و دامنه اتصال به درگاه پرداخت

با عرض سلام و وقت بخیر خدمت شما دوستای عزیز
سوالی داشتم در خصوص اینکه آیا میشه دامنه و هاست مخصوص درگاه پرداخت داشت ؟
به عنوان مثال کاربر از لینک x.com بازدید میکنه و محصولاتشو به سبد خرید اضافه میکنه و به صفحه تسویه حساب میره و وقتی میخواد پرداخت کنه و روی پرداخت کلیک میکنه کاربر به pay.x.com که یک ساب دامین هست و به هاست ایران متصل هست منتقل بشه و از طریق اون ارتباط با درگاه پرداخت برقرار بشه و پرداخت رو انجام بده و به سایت برگرده و سفارشش ثبت بشه.
همونطور که میدونید الان درگاه ها ایران اکسس هستند و وقتی وب سایت ما روی هاست خارج هست نمیتونیم به درگاه ها متصل بشیم به همین سبب من فکری به ذهنم رسید که هم دامنه و هم هاست مخصوص اتصال به درگاه پرداخت رو از سایت اصلی جدا کنم.
ممنون میشم راهنمایی کنید.

2 پسندیده

سلام وقت بخیر

چنین چیزی از لحاظ فنی شدنی هست. می تونید با برنامه نویسی یه callback تعریف کنید و در تنظیمات درگاه اون مسیر رو ارایه بدین مثلا جای callback اصلی ارایه شده توسط درگاه جایگزین کنید، callback جایگزین رو ارایه بدین.

مثلا: pay.x.com/callback/payment.php

نکته: تو درگاه پرداخت باید به جای دامنه اصلی ساب دامنه رو ارایه بدین تا پرداخت ها valid باشه.

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

موفق باشید

بنظر شما استفاده از پروکسی ایران جهت اتصال به درگاه پرداخت بهینه تر نیست ؟

1 پسندیده

پراکسی که 100% پایدار باشه سراغ ندارم. یه میلی ثانیه قطعی تراکنش لغو میشه. اصولی ترین راه استفاده از callback هست.

البته یه تست A/B کنید بد نیست. تو بلند مدت میشه پایداریش رو تخمین زد.

من اومدم با php همچین کاری رو بکنم
اول اومدم این کد رو داخل فانکشن قالب قرار دادم که برای پرداخت به دامنه pay.x.com منتقل بشه

add_filter('woocommerce_get_checkout_payment_url', 'redirect_to_payment_subdomain', 10, 2);
function redirect_to_payment_subdomain($payment_url, $order) {
   $order_id = $order->get_id();
   $new_url = "https://pay.x.com/process-payment?order_id=" . $order_id;
    return $new_url;
}

بعدش اومدم یک API داخل RESET API ووکامرس ساختم و بعد داخل هاست ایران که مربوط به دامنه pay.x.com هست اومدم دو فایل php ایجاد کردم.
فایل process-payment.php با محتوای

<?php
// Get the order ID from the URL
$order_id = $_GET['order_id'];
$api_url = "https://x.com/wp-json/wc/v3/orders/$order_id";

// WooCommerce API credentials
$consumer_key = 'YOUR_CONSUMER_KEY';
$consumer_secret = 'YOUR_CONSUMER_SECRET';

// Fetch order details from the main site
$response = wp_remote_get($api_url, [
    'headers' => [
        'Authorization' => 'Basic ' . base64_encode("$consumer_key:$consumer_secret")
    ]
]);

// Process the response
if (!is_wp_error($response)) {
    $order_data = json_decode(wp_remote_retrieve_body($response), true);
    // Display order details and redirect to the payment gateway
    echo "Order ID: " . $order_data['id'];
    echo "Order Total: " . $order_data['total'];
    // Redirect to the payment gateway with necessary details
}

دوم فایل update-payment.php با محتوای

<?php
// Get the order ID and payment status
$order_id = $_GET['order_id'];
$api_url = "https://x.com/wp-json/wc/v3/orders/$order_id";

// WooCommerce API credentials
$consumer_key = 'YOUR_CONSUMER_KEY';
$consumer_secret = 'YOUR_CONSUMER_SECRET';

// Update order status on the main site
$response = wp_remote_post($api_url, [
    'headers' => [
        'Authorization' => 'Basic ' . base64_encode("$consumer_key:$consumer_secret"),
        'Content-Type' => 'application/json',
    ],
    'body' => json_encode([
        'status' => 'completed' // Update to the desired status
    ])
]);

if (!is_wp_error($response)) {
    // Redirect back to the main site
    header("Location: https://x.com/order-confirmation?order_id=$order_id");
    exit;
}

اما متاسفانه بعد از اعمال این موارد، در هنگام تست با خطای 404 داخل pay.x.com روبرو میشم.

وقت بخیر

404 عملا یعنی فایل وجود نداره. مسیری که تعریف می کنید می بایست وجود داشته باشه تا callback بتونه به درستی عمل کنه. من این تاپیک رو ارجاع می کنم به بچه های برنامه نویس تا نظرشون رو براتون ارسال کنن.

موفق باشید

سلام وقتتون بخیر.
موردی که فرمودین قابل انجام هست و البته روش انجامش هم با توجه به نوع درگاه بانکی و API درگاه بانکی که استفاده میکنید ممکنه یه مقدار متفاوت باشه.
به عنوان مثال فرض کنید درگاه پرداخت زرین پال استفاده میکنید. API این درگاه به اینصورت هستش که برای اینکه بتونه کاربر رو به درگاه پرداخت وصل کنه نیاز به یکسری ورودی مثل قیمت کل داره.
شما میتونید زمانی که کاربر داره پرداختی رو داخل سایتتون انجام میده بجای اینکه مستقیم از سایت اصلی وصلش کنید به درگاه پرداخت، شناسه سفارش و مبلغ کل و بقیه مقادیر دلخواه رو به یک صفحه توی سابدامین خودتون ارسال کنید، با کد نویسی پردازش‌های لازم رو در سابدامین انجام بدید و در صورت موفقیت امیز بودن پرداخت، اطلاعات رو به همراه شناسه سفارش مجددا به سایت اصلی ارسال کنید.
حالا برای اینکه سایت اصلی تشخیص بده که این پرداخت انجام شده نیاز هست که کد زیر رو به فانکشن قالب سایتتون اضافه کنید.

add_action('rest_api_init', function() {
    register_rest_route('custom/v1', '/update-order-status', array(
        'methods' => 'POST',
        'callback' => 'update_order_status',
        'permission_callback' => '__return_true',
    ));
});

function update_order_status(WP_REST_Request $request) {
    $order_id = $request->get_param('order_id');
    $result = $request->get_param('result');

    if ($result == 200) {
        $order = wc_get_order($order_id);
        if ($order) {
            $order->update_status('completed');
            return new WP_REST_Response('Order status updated to completed.', 200);
        } else {
            return new WP_REST_Response('Order not found.', 404);
        }
    } else {
        return new WP_REST_Response('Payment not confirmed.', 400);
    }
}

با اضافه کردن این کد به سایت x.com اگه پرداخت کاربر در pay.x.com موفقیت امیز باشه فقط کافیه که مقادیر زیر رو:

{
    "order_id": 123,  // شناسه سفارش
    "result": 200     // نتیجه پرداخت
}

از طریق POST به آدرس:
https:/x.com/wp-json/custom/v1/update-order-status
ارسال کنید.

ضمنا قطعه کدی که ارسال کردید یکسری نقص ها داره. مثلا تا جایی که متوجه شدم فقط داره order_id یا همون شناسه سفارش رو ارسال میکنه من جایی ندیدم که مبلغ کل هم بفرسته. همه درگاه ها مبلغ کل سفاش رو نیاز دارن خلاصه. خطای ۴۰۴ هم زمانی نمایش داده میشه که صفحه ای که دنبال اون میگردید وجود نداره. احتمالا یجا تو کدهاتون توی ادرس دهی ها اشتباهی انجام دادید. که تا وضعیت سایتتون رو تو حالت واقعی بررسی نکنم نمیتونم متوجه بشم که این اشتباه دقیقا کجا بوده.

در کل انجام اینکار نیاز به دانش فنی تقریبا بالایی داره و یه مقدار زمان بر هم هستش. بهتره که این پروژه رو به یک برنامه نویس بسپارین تا بصورت کامل این موارد رو برای شما انجام بدن.

3 پسندیده

سلام وقت بخیر
خیلی ممنونم از راهنمایی شما
من همیشه از درگاه های مستقیم استفاده میکنم و علاقه ای به درگاه های واسط ندارم.
اما برای این چالشی که درگیرش هستم فعلا موقتا اومدم و از سرور های ایرانم استفاده کردم و یک پروکسی ساختم و ارتباط بین سرور خارج و ایران برقرار شده و برای درگاه ها از IP ایران استفاده میشه.
اما چالش های متنوعی در این زمینه وجود داره
احتمال ایران اکسس شدن سرور ایران و قطع ارتباط خارج با ایران
احتمال فیلتر شدن سرور خارج و قطع ارتباط با سرور ایران
احتمال پایداری نامناسب سرور مجازی در ایران ( البته این مورد هم در هاست ها دیده میشه چون بلاخره اونا هم روی سرورهایی ران میشن و در نهایت در شبکه ایران هستن ) اما خب من شخصا فکر میکنم پایداری سرورهایی که در ایران اختصاصا برای میزبانی سرویس ها استفاده میشن از سرورهایی که به صورت عمومی در دست مردم هست بیشتر باشه.
فعلا این کار رو انجام دادم و امیدوارم بزودی این مسئله ایران اکسس شدن درگاه های ایران رفع بشه و بتونیم با سرور خارج به درگاه ها متصل بشیم.

2 پسندیده