woocommerce AB站跳转代码

admin

Administrator
管理成员
在A站的主题的functions.php文件里面添加已下代码:
PHP:
// A站:创建订单后发送数据到B站并重定向到支付页面
add_action('woocommerce_thankyou', 'send_order_to_b_site', 10, 1);

function send_order_to_b_site($order_id) {
    if (!$order_id) {
        return;
    }

    $order = wc_get_order($order_id);
    $order_data = array(
        'order_id' => $order_id,
        'amount' => $order->get_total(),
        'currency' => $order->get_currency(),
        'customer_email' => $order->get_billing_email(),
        'items' => array()
    );

    foreach ($order->get_items() as $item_id => $item) {
        $product = $item->get_product();
        $order_data['items'][] = array(
            'product_id' => $product->get_id(),
            'quantity' => $item->get_quantity(),
            'total' => $item->get_total()
        );
    }

    $ch = curl_init('https://b-site.com/api/create_order');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($order_data));
    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));

    $response = curl_exec($ch);
    curl_close($ch);

    $response_data = json_decode($response, true);
    if (isset($response_data['payment_url'])) {
        // 在完成订单后重定向到B站支付页面
        wp_redirect($response_data['payment_url']);
        exit;
    }
}

B站处理并生成支付链接代码:
PHP:
// B站:API接收订单请求
function create_order() {
    // 获取A站发送的订单数据
    $order_id = $_POST['order_id'];
    $amount = $_POST['amount'];
    $currency = $_POST['currency'];
    $customer_email = $_POST['customer_email'];
    $items = $_POST['items'];

    // 在B站创建订单并生成支付链接
    $payment_url = generate_payment_url($order_id, $amount, $currency, $customer_email, $items);

    // 返回支付链接给A站
    echo json_encode(array('payment_url' => $payment_url));
    exit;
}

function generate_payment_url($order_id, $amount, $currency, $customer_email, $items) {
    // 生成支付链接逻辑
    $payment_id = uniqid('pay_');
    return "https://b-site.com/pay/$payment_id";
}

// 确保你设置了适当的路由来处理这个请求

3. 在 B 站支付处理结果返回支付到 A 站代码:
PHP:
// B站:支付完成后发送支付结果回A站
function payment_callback() {
    $payment_status = $_POST['status'];
    $order_id = $_POST['order_id'];

    // 将支付结果发送回A站
    $callback_url = 'https://a-site.com/api/payment_callback';
    $ch = curl_init($callback_url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(array('status' => $payment_status, 'order_id' => $order_id)));

    $response = curl_exec($ch);
    curl_close($ch);

    // 处理A站的响应
    $response_data = json_decode($response, true);
    if ($response_data['success']) {
        // 支付成功逻辑
    } else {
        // 支付失败逻辑
    }
}
4.在 A 站创建一个 API 接口来接收 B 站的支付结果代码:
PHP:
// A站:API接收支付结果
add_action('rest_api_init', function () {
    register_rest_route('myplugin/v1', '/payment_callback', array(
        'methods' => 'POST',
        'callback' => 'payment_callback',
    ));
});

function payment_callback(WP_REST_Request $request) {
    $status = $request->get_param('status');
    $order_id = $request->get_param('order_id');

    $order = wc_get_order($order_id);
    if ($status == 'success') {
        // 更新订单状态为已支付
        $order->update_status('completed');
        return new WP_REST_Response(array('success' => true), 200);
    } else {
        // 更新订单状态为支付失败
        $order->update_status('failed');
        return new WP_REST_Response(array('success' => false), 200);
    }
}

注意!!!​

通过上述步骤,可以实现 WooCommerce 网站 A 站下单后无痕跳转到 B 站支付,同时确保客户看不到 B 站并且对支付系统隐藏 A 站的存在。所有代码都可以放置在主题的 functions.php 文件中,或创建一个自定义插件来包含这些代码。通过服务器端请求传输数据,可以确保数据传输的安全性和隐私。
 
后退
顶部