如何以编程方式在woocommerce中创建订单并将其重定向到支付网关
问题描述:
我对支付网关集成很陌生。我了解到,可以通过编程创建订单,而无需在woocommerce中添加产品并完成此操作。如何以编程方式在woocommerce中创建订单并将其重定向到支付网关
现在的问题是,我不知道如何在点击提交订单按钮后自动执行付款流程。
当前订单表单被提交时,我创建订单以编程方式进入woocommerce,并期望用户重定向到选定的(目前默认为billPlz)付款网关页面进行付款。
我已经安装了woocomerce和billPlz支付网关。而WC()->payment_gateways->get_available_payment_gateways()
确实会给我返回billPlz。
但是,支付表格并未显示在支付网关上,以供用户将付款提交到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;
}
}
答
您可以生成未付订单付款URL像它出现在我的帐户页面下通过使用以下命令功能来订购TAB。
$order->get_checkout_payment_url()