【问题标题】:How to programatically create order in woocommerce and redirect to payment gateway如何以编程方式在 woocommerce 中创建订单并重定向到支付网关
【发布时间】:2017-11-18 02:03:18
【问题描述】:

我对支付网关集成非常陌生。我了解到,可以通过编程方式创建订单,而无需在 woocommerce 中添加产品并做到这一点。

现在的问题是,我不确定单击提交订单按钮后如何自动执行付款流程。

目前,当提交订单时,我以编程方式在 woocommerce 中创建订单,并希望用户重定向到选定的(当前默认为 billPlz)支付网关页面进行支付。

我已经安装了 woocomerce 和 billPlz 支付网关。而WC()->payment_gateways->get_available_payment_gateways() 确实将账单归还给我。

但是支付网关没有显示支付表单,供用户将支付提交到 billPlz。

我看到“成功”消息并重定向到mydomain/order-received/72?key=wc_order_5a0f8f3ead251

我认为这是感谢页面?

创建订单时如何重定向到支付网关?

订单(我自己的,不是来自woocomerce)

<form action="<?php echo esc_url( admin_url('admin-post.php') ); ?>" method="POST">
    <input type="text" name="action" value="createOrder">
    <input type="text" name="booking_id" value="123">
    <input type="text" name="customer_id" value="1006">
    <input type="text" name="order_amount" value="180.00">
    <input type="text" name="order_status" value="1">

    <input type="submit" value="PROCEED TO MAKE PAYMENT">
</form>

创建订单函数

public function createOrder()
    {

        $product_id = 222;
        $quantity = 1;

        $args = array( 
         'variation' => array( 'attribute_color' => 'red'),
         'status' => 'complete',
         'customer_id'=> 23
        ); 

        $order = wc_create_order();
        $order_id = trim(str_replace('#', '', $order->get_order_number()));


        $order->add_product( get_product( $product_id ), $quantity, $args );

        $order->set_status( $args['status'] );
        $order->set_customer_id( is_numeric( $args['customer_id'] ) ? absint( $args['customer_id'] ) : 0 );
        $order->set_total( ($discount['amount']/100) , 'order_discount'); // not pennies (use dollar amount)

        update_post_meta( $order_id, '_payment_method', 'billplz' );
        update_post_meta( $order_id, '_payment_method_title', 'Billplz Payment Gateway' );

        $order->calculate_totals();


        // Process Payment
        $available_gateways = WC()->payment_gateways->get_available_payment_gateways();

        $result = $available_gateways[ 'billplz' ]->process_payment( $order_id );

        // Redirect to success/confirmation/payment page
        if ( $result['result'] == 'success' ) {

            $result = apply_filters( 'woocommerce_payment_successful_result', $result, $order_id );
            $return_url = $available_gateways[ 'billplz' ]->get_return_url( $order );

            wp_redirect($return_url);
            exit;
        }
    }

【问题讨论】:

  • 你好。你能告诉我在哪里可以使用你的功能来测试它吗?因为我需要使用类似的解决方案。谢谢。
  • 有什么方法可以添加自定义价格的产品?

标签: woocommerce payment-gateway orders


【解决方案1】:

您可以使用以下订单功能为未付款订单生成付款 URL,就像它显示在“我的帐户”页面中的“订单”选项卡下一样。

$order->get_checkout_payment_url()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-07
    • 2023-01-08
    • 2013-01-21
    • 2018-08-06
    • 2016-08-12
    • 1970-01-01
    • 2020-11-20
    相关资源
    最近更新 更多