首页 文章

Wordpress Woocommerce自定义支付网关

提问于
浏览
1

关于Woocommerce支付网关的问题 .

我已经定制了一个支付网关来接受采购订单,并从插件中正确加载,然后按照ID的方式显示在结帐页面上;我认为这是一个非常好的开始 .

无论如何,我有一个非标准的表单条目(购买订单号),其ID类似于人们要填写,但我不知道如何将其附加到我的自定义支付网关,以便它显示在生成的管理员侧页面上 .

一切正常:

function payment_fields(){
    if ( $description = $this->get_description() )
        echo wpautop( wptexturize( $description ) );
    global $woocommerce;
    ?>
<form class="form-horizontal" role="form" id="bv-form">
<fieldset>
<!-- Form Name -->
  <legend>Purchase Order</legend>
  <!-- Text input-->
    <div class="form-group">
      <label class="control-label" for="po_no">PO Number</label>  
      <div class="">
      <input id="po_no" name="po_no" type="text" placeholder="" class="form-control input-md">
      </div>
    </div>
...

但是当我到达这里时,我不知道如何修改 process_payment( $order_id ) (或添加到 functions.php 的内容)以从支付字段中获取表单值 . 我看到有 $order->billingAddress1 等,我如何提交额外的几个表单字段以及订单,然后,我将如何访问它以从新创建的 WC_Order 中获取 po_no

  • WP:3.9.2

  • WC:2.1.11

谢谢你的帮助!

1 回答

  • 3

    如果您要创建自定义支付网关,那么您应该在其中实现 process_payment() . 此代码可以访问支付表单提交的 $_POST 变量,因此您可以将其称为:

    $po_number = ( isset( $_POST['po_no'] ) )? $_POST['po_no'] : 0;
    

    这听起来像你的问题,你可能没有实际编写自定义网关,而是尝试将自定义字段附加到订单 . 如果你想挂钩到另一个网关(如PayPal,Authorize.net等),你应该使用作为 WC_Order.payment_complete() 的一部分调用的WooCommerce动作挂钩,这是网关收集付款后调用的 . 这些操作是 woocommerce_pre_payment_complete ,它在其他任何操作之前运行,并将订单ID作为参数,并且在设置了库存/状态/等之后 woocommerce_payment_complete .

    add_action( 'woocommerce_payment_complete', 'my_woocommerce_payment_complete');
    function my_woocommerce_payment_complete( $order_id ){
        $po_number = ( isset( $_POST['po_no'] ) )? $_POST['po_no'] : 0;
        update_post_meta( $order_id, 'po_number', $po_number );
    }
    

    然后,您可以通过添加元框在“订单编辑”页面上显示此自定义字段 . 如果要使其可编辑,则需要挂钩 save_post 并将 po_number 更改为输入 .

    add_action( 'add_meta_boxes',  'po_number_metabox' );
    function add_po_number_metabox(){
        global $post;
        if ( $post->post_type = 'shop_order' ){
                add_meta_box( 'po-number', 'Title',  'po_number_metabox', 'shop_order', 'side', 'default');
        }
    }
    function po_number_metabox(){
        global $post;
        $po_number = get_post_meta( $post->ID, 'po_number', true);
        echo "PO:> {$po_number}";
    }
    

相关问题