Php WooCommerce以编程方式创建订单,并重定向到IFRAME内的付款

Php WooCommerce以编程方式创建订单,并重定向到IFRAME内的付款,php,wordpress,woocommerce,Php,Wordpress,Woocommerce,基于此,, 对于WooCommerce,对于自定义产品(使用UNI CPO 4插件),我试图通过编程方式创建一个onepage签出,包括产品页面上iframe中的付款页面 据我所见,大多数onepage签出插件不包括同一页面上的实际付款(iframe付款) 这就是我到目前为止所做的: 我已将[woocommerce\u checkout]快捷码添加到产品页面 在functions.php中,我绕过了“submitorder”submit按钮事件,将其附加到一个ajax函数,该函数创建订单并返回支

基于此,, 对于WooCommerce,对于自定义产品(使用UNI CPO 4插件),我试图通过编程方式创建一个onepage签出,包括产品页面上iframe中的付款页面

据我所见,大多数onepage签出插件不包括同一页面上的实际付款(iframe付款)

这就是我到目前为止所做的:

  • 我已将
    [woocommerce\u checkout]
    快捷码添加到产品页面
  • 在functions.php中,我绕过了“submitorder”submit按钮事件,将其附加到一个ajax函数,该函数创建订单并返回支付url,以便将其加载到此签出页面上附加到DIV的iframe中
  • 除了IFRAME在没有支付网关支付表单的情况下加载订单审阅之外,它似乎可以工作。在订单审查下,该部门通常会出现什么

    <div id="step-payment" class="checkout-step">
    //payment method gateway form 
    </div>
    
    
    //支付方式网关表单
    
    你知道为什么吗?我怀疑这可能与nonce没有传递到IFRAME有关。也许有人对如何以更好的方式实现这一点有很好的想法。 这就是我目前所拥有的 (functions.php)

    
    jQuery(函数($){
    $(document.body).on(“submit”,“form.checkout”,函数(evt){
    evt.preventDefault();
    var formArr=$('form.checkout').serializeArray();
    $.ajax({
    键入:“POST”,
    url:“/wp admin/admin ajax.php”,
    contentType:“application/x-www-form-urlencoded;charset=UTF-8”,
    enctype:“多部分/表单数据”,
    数据:{
    “操作”:“ajax_顺序”,
    “字段”:formArr,
    “用户id”:,
    },
    成功:功能(结果){
    var res=$.parseJSON(结果);
    $(“#内联支付”).empty().append(“”);
    $(“#内联签出”).toggleClass(“滑入隐藏”);
    },
    错误:函数(错误){
    }
    });
    });
    });
    
    因此,我最终设法让它工作起来。问题在于支付网关。在WC order_receipt.php模板中

        <?php do_action( 'woocommerce_receipt_' . $order->get_payment_method(), $order->get_id() ); ?>
    
    
    
    调用测试会话参数的网关类,该参数定义是否在iframe中完成支付,如果是,则退出该类。我必须将此会话参数更改为false

    <div id="inline-checkout">
    <!-- this is where the order form checkout shortcode in appended -->
    <?php define( 'WOOCOMMERCE_CHECKOUT', true ); ?>
    </div>
                                
    <div id="inline-payment">
        <!-- this is where the inline payment iframe happens -->
    </div>
    
        <?php do_action( 'woocommerce_receipt_' . $order->get_payment_method(), $order->get_id() ); ?>