示例插件代码1:
<?php/*** Plugin Name: WooCommerce Invoice Gateway* Plugin URI:* Description: Clones the "Cheque" gateway to create another custom payment method.* Author: Your name* Author URI: http://www.something.tld/* Version: 1.0.0* Text Domain: wc-invoice-gateway* Domain Path: /i18n/languages/** Copyright: (c) 2016-2018** License: GNU General Public License v3.0* License URI: http://www.gnu.org/licenses/gpl-3.0.html** @package wc-invoice-gateway* @author Your name* @category Admin* @copyright Copyright (c) 2020* @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0** This "Invoice" gateway forks the WooCommerce core "Cheque" payment gateway to create another custom payment method.*/defined( 'ABSPATH' ) or exit;// Make sure WooCommerce is activeif ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {return;}/*** Add the gateway to WC Available Gateways** @since 1.0.0* @param array $gateways all available WC gateways* @return array $gateways all WC gateways + Custom gateway*/function wc_invoice_add_to_gateways( $gateways ) {$gateways[] = 'WC_Invoice_Gateway';return $gateways;}add_filter( 'woocommerce_payment_gateways', 'wc_invoice_add_to_gateways' );/*** Adds plugin page links** @since 1.0.0* @param array $links all plugin links* @return array $links all plugin links + our custom links (i.e., "Settings")*/function wc_gateway_invoice_plugin_links( $links ) {$plugin_links = array('<a href="' . admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=invoice' ) . '">' . __( 'Configure', 'wc-invoice-gateway' ) . '</a>');return array_merge( $plugin_links, $links );}add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'wc_gateway_invoice_plugin_links' );/*** Invoice Payment Gateway** Provides an Custom Payment Gateway; mainly for testing purposes.* We load it later to ensure WC is loaded first since we're extending it.** @class WC_Invoice_Gateway* @extends WC_Payment_Gateway* @version 1.0.0*/add_action( 'plugins_loaded', 'wc_invoice_gateway_init', 11 );function wc_invoice_gateway_init() {class WC_Invoice_Gateway extends WC_Payment_Gateway {/*** Constructor for the gateway.*/public function __construct() {$this->id = 'invoice';$this->domain = 'wc-invoice-gateway';$this->method_title = _x( 'Invoice payments', 'Invoice payment method', $this->domain );$this->icon = apply_filters( 'woocommerce_invoice_icon', '' );$this->has_fields = false;$this->method_description = __( 'Take payments in person via Invoice. This offline gateway can also be useful to test purchases.', $this->domain );// Load the settings.$this->init_form_fields();$this->init_settings();// Define user set variables.$this->title = $this->get_option( 'title' );$this->description = $this->get_option( 'description' );$this->instructions = $this->get_option( 'instructions' );// Actions.add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );add_action( 'woocommerce_thankyou_invoice', array( $this, 'thankyou_page' ) );// Customer Emails.add_action( 'woocommerce_email_before_order_table', array( $this, 'email_instructions' ), 10, 3 );}/*** Initialize Gateway Settings Form Fields*/public function init_form_fields() {$this->form_fields = array('enabled' => array('title' => __( 'Enable/Disable', $this->domain ),'type' => 'checkbox','label' => __( 'Enable Invoice payments', $this->domain ),'default' => 'no',),'title' => array('title' => __( 'Title', $this->domain ),'type' => 'text','description' => __( 'This controls the title which the user sees during checkout.', $this->domain ),'default' => _x( 'Invoice', 'Invoice payment method', $this->domain ),'desc_tip' => true,),'description' => array('title' => __( 'Description', $this->domain ),'type' => 'textarea','description' => __( 'Payment method description that the customer will see on your checkout.', $this->domain ),'default' => __( 'Receive an invoice...', $this->domain ),'desc_tip' => true,),'instructions' => array('title' => __( 'Instructions', $this->domain ),'type' => 'textarea','description' => __( 'Instructions that will be added to the thank you page and emails.', $this->domain ),'default' => '','desc_tip' => true,),);}/*** Output for the order received page.*/public function thankyou_page() {if ( $this->instructions ) {echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) );}}/*** Add content to the WC emails.** @access public* @param WC_Order $order Order object.* @param bool $sent_to_admin Sent to admin.* @param bool $plain_text Email format: plain text or HTML.*/public function email_instructions( $order, $sent_to_admin, $plain_text = false ) {if ( $this->instructions && ! $sent_to_admin && 'invoice' === $order->get_payment_method() && $order->has_status( 'on-hold' ) ) {echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL );}}/*** Process the payment and return the result.** @param int $order_id Order ID.* @return array*/public function process_payment( $order_id ) {$order = wc_get_order( $order_id );if ( $order->get_total() > 0 ) {// Mark as on-hold (we're awaiting the invoice).$order->update_status( apply_filters( 'woocommerce_invoice_process_payment_order_status', 'on-hold', $order ), _x( 'Awaiting Invoice payment', 'Invoice payment method', $this->domain ) );} else {$order->payment_complete();}// Remove cart.WC()->cart->empty_cart();// Return thankyou redirect.return array('result' => 'success','redirect' => $this->get_return_url( $order ),);}} // end \WC_Invoice_Gateway class}<?php /** * Plugin Name: WooCommerce Invoice Gateway * Plugin URI: * Description: Clones the "Cheque" gateway to create another custom payment method. * Author: Your name * Author URI: http://www.something.tld/ * Version: 1.0.0 * Text Domain: wc-invoice-gateway * Domain Path: /i18n/languages/ * * Copyright: (c) 2016-2018 * * License: GNU General Public License v3.0 * License URI: http://www.gnu.org/licenses/gpl-3.0.html * * @package wc-invoice-gateway * @author Your name * @category Admin * @copyright Copyright (c) 2020 * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 * * This "Invoice" gateway forks the WooCommerce core "Cheque" payment gateway to create another custom payment method. */ defined( 'ABSPATH' ) or exit; // Make sure WooCommerce is active if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) { return; } /** * Add the gateway to WC Available Gateways * * @since 1.0.0 * @param array $gateways all available WC gateways * @return array $gateways all WC gateways + Custom gateway */ function wc_invoice_add_to_gateways( $gateways ) { $gateways[] = 'WC_Invoice_Gateway'; return $gateways; } add_filter( 'woocommerce_payment_gateways', 'wc_invoice_add_to_gateways' ); /** * Adds plugin page links * * @since 1.0.0 * @param array $links all plugin links * @return array $links all plugin links + our custom links (i.e., "Settings") */ function wc_gateway_invoice_plugin_links( $links ) { $plugin_links = array( '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=invoice' ) . '">' . __( 'Configure', 'wc-invoice-gateway' ) . '</a>' ); return array_merge( $plugin_links, $links ); } add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'wc_gateway_invoice_plugin_links' ); /** * Invoice Payment Gateway * * Provides an Custom Payment Gateway; mainly for testing purposes. * We load it later to ensure WC is loaded first since we're extending it. * * @class WC_Invoice_Gateway * @extends WC_Payment_Gateway * @version 1.0.0 */ add_action( 'plugins_loaded', 'wc_invoice_gateway_init', 11 ); function wc_invoice_gateway_init() { class WC_Invoice_Gateway extends WC_Payment_Gateway { /** * Constructor for the gateway. */ public function __construct() { $this->id = 'invoice'; $this->domain = 'wc-invoice-gateway'; $this->method_title = _x( 'Invoice payments', 'Invoice payment method', $this->domain ); $this->icon = apply_filters( 'woocommerce_invoice_icon', '' ); $this->has_fields = false; $this->method_description = __( 'Take payments in person via Invoice. This offline gateway can also be useful to test purchases.', $this->domain ); // Load the settings. $this->init_form_fields(); $this->init_settings(); // Define user set variables. $this->title = $this->get_option( 'title' ); $this->description = $this->get_option( 'description' ); $this->instructions = $this->get_option( 'instructions' ); // Actions. add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); add_action( 'woocommerce_thankyou_invoice', array( $this, 'thankyou_page' ) ); // Customer Emails. add_action( 'woocommerce_email_before_order_table', array( $this, 'email_instructions' ), 10, 3 ); } /** * Initialize Gateway Settings Form Fields */ public function init_form_fields() { $this->form_fields = array( 'enabled' => array( 'title' => __( 'Enable/Disable', $this->domain ), 'type' => 'checkbox', 'label' => __( 'Enable Invoice payments', $this->domain ), 'default' => 'no', ), 'title' => array( 'title' => __( 'Title', $this->domain ), 'type' => 'text', 'description' => __( 'This controls the title which the user sees during checkout.', $this->domain ), 'default' => _x( 'Invoice', 'Invoice payment method', $this->domain ), 'desc_tip' => true, ), 'description' => array( 'title' => __( 'Description', $this->domain ), 'type' => 'textarea', 'description' => __( 'Payment method description that the customer will see on your checkout.', $this->domain ), 'default' => __( 'Receive an invoice...', $this->domain ), 'desc_tip' => true, ), 'instructions' => array( 'title' => __( 'Instructions', $this->domain ), 'type' => 'textarea', 'description' => __( 'Instructions that will be added to the thank you page and emails.', $this->domain ), 'default' => '', 'desc_tip' => true, ), ); } /** * Output for the order received page. */ public function thankyou_page() { if ( $this->instructions ) { echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) ); } } /** * Add content to the WC emails. * * @access public * @param WC_Order $order Order object. * @param bool $sent_to_admin Sent to admin. * @param bool $plain_text Email format: plain text or HTML. */ public function email_instructions( $order, $sent_to_admin, $plain_text = false ) { if ( $this->instructions && ! $sent_to_admin && 'invoice' === $order->get_payment_method() && $order->has_status( 'on-hold' ) ) { echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL ); } } /** * Process the payment and return the result. * * @param int $order_id Order ID. * @return array */ public function process_payment( $order_id ) { $order = wc_get_order( $order_id ); if ( $order->get_total() > 0 ) { // Mark as on-hold (we're awaiting the invoice). $order->update_status( apply_filters( 'woocommerce_invoice_process_payment_order_status', 'on-hold', $order ), _x( 'Awaiting Invoice payment', 'Invoice payment method', $this->domain ) ); } else { $order->payment_complete(); } // Remove cart. WC()->cart->empty_cart(); // Return thankyou redirect. return array( 'result' => 'success', 'redirect' => $this->get_return_url( $order ), ); } } // end \WC_Invoice_Gateway class }<?php /** * Plugin Name: WooCommerce Invoice Gateway * Plugin URI: * Description: Clones the "Cheque" gateway to create another custom payment method. * Author: Your name * Author URI: http://www.something.tld/ * Version: 1.0.0 * Text Domain: wc-invoice-gateway * Domain Path: /i18n/languages/ * * Copyright: (c) 2016-2018 * * License: GNU General Public License v3.0 * License URI: http://www.gnu.org/licenses/gpl-3.0.html * * @package wc-invoice-gateway * @author Your name * @category Admin * @copyright Copyright (c) 2020 * @license http://www.gnu.org/licenses/gpl-3.0.html GNU General Public License v3.0 * * This "Invoice" gateway forks the WooCommerce core "Cheque" payment gateway to create another custom payment method. */ defined( 'ABSPATH' ) or exit; // Make sure WooCommerce is active if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) { return; } /** * Add the gateway to WC Available Gateways * * @since 1.0.0 * @param array $gateways all available WC gateways * @return array $gateways all WC gateways + Custom gateway */ function wc_invoice_add_to_gateways( $gateways ) { $gateways[] = 'WC_Invoice_Gateway'; return $gateways; } add_filter( 'woocommerce_payment_gateways', 'wc_invoice_add_to_gateways' ); /** * Adds plugin page links * * @since 1.0.0 * @param array $links all plugin links * @return array $links all plugin links + our custom links (i.e., "Settings") */ function wc_gateway_invoice_plugin_links( $links ) { $plugin_links = array( '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=checkout§ion=invoice' ) . '">' . __( 'Configure', 'wc-invoice-gateway' ) . '</a>' ); return array_merge( $plugin_links, $links ); } add_filter( 'plugin_action_links_' . plugin_basename( __FILE__ ), 'wc_gateway_invoice_plugin_links' ); /** * Invoice Payment Gateway * * Provides an Custom Payment Gateway; mainly for testing purposes. * We load it later to ensure WC is loaded first since we're extending it. * * @class WC_Invoice_Gateway * @extends WC_Payment_Gateway * @version 1.0.0 */ add_action( 'plugins_loaded', 'wc_invoice_gateway_init', 11 ); function wc_invoice_gateway_init() { class WC_Invoice_Gateway extends WC_Payment_Gateway { /** * Constructor for the gateway. */ public function __construct() { $this->id = 'invoice'; $this->domain = 'wc-invoice-gateway'; $this->method_title = _x( 'Invoice payments', 'Invoice payment method', $this->domain ); $this->icon = apply_filters( 'woocommerce_invoice_icon', '' ); $this->has_fields = false; $this->method_description = __( 'Take payments in person via Invoice. This offline gateway can also be useful to test purchases.', $this->domain ); // Load the settings. $this->init_form_fields(); $this->init_settings(); // Define user set variables. $this->title = $this->get_option( 'title' ); $this->description = $this->get_option( 'description' ); $this->instructions = $this->get_option( 'instructions' ); // Actions. add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); add_action( 'woocommerce_thankyou_invoice', array( $this, 'thankyou_page' ) ); // Customer Emails. add_action( 'woocommerce_email_before_order_table', array( $this, 'email_instructions' ), 10, 3 ); } /** * Initialize Gateway Settings Form Fields */ public function init_form_fields() { $this->form_fields = array( 'enabled' => array( 'title' => __( 'Enable/Disable', $this->domain ), 'type' => 'checkbox', 'label' => __( 'Enable Invoice payments', $this->domain ), 'default' => 'no', ), 'title' => array( 'title' => __( 'Title', $this->domain ), 'type' => 'text', 'description' => __( 'This controls the title which the user sees during checkout.', $this->domain ), 'default' => _x( 'Invoice', 'Invoice payment method', $this->domain ), 'desc_tip' => true, ), 'description' => array( 'title' => __( 'Description', $this->domain ), 'type' => 'textarea', 'description' => __( 'Payment method description that the customer will see on your checkout.', $this->domain ), 'default' => __( 'Receive an invoice...', $this->domain ), 'desc_tip' => true, ), 'instructions' => array( 'title' => __( 'Instructions', $this->domain ), 'type' => 'textarea', 'description' => __( 'Instructions that will be added to the thank you page and emails.', $this->domain ), 'default' => '', 'desc_tip' => true, ), ); } /** * Output for the order received page. */ public function thankyou_page() { if ( $this->instructions ) { echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) ); } } /** * Add content to the WC emails. * * @access public * @param WC_Order $order Order object. * @param bool $sent_to_admin Sent to admin. * @param bool $plain_text Email format: plain text or HTML. */ public function email_instructions( $order, $sent_to_admin, $plain_text = false ) { if ( $this->instructions && ! $sent_to_admin && 'invoice' === $order->get_payment_method() && $order->has_status( 'on-hold' ) ) { echo wp_kses_post( wpautop( wptexturize( $this->instructions ) ) . PHP_EOL ); } } /** * Process the payment and return the result. * * @param int $order_id Order ID. * @return array */ public function process_payment( $order_id ) { $order = wc_get_order( $order_id ); if ( $order->get_total() > 0 ) { // Mark as on-hold (we're awaiting the invoice). $order->update_status( apply_filters( 'woocommerce_invoice_process_payment_order_status', 'on-hold', $order ), _x( 'Awaiting Invoice payment', 'Invoice payment method', $this->domain ) ); } else { $order->payment_complete(); } // Remove cart. WC()->cart->empty_cart(); // Return thankyou redirect. return array( 'result' => 'success', 'redirect' => $this->get_return_url( $order ), ); } } // end \WC_Invoice_Gateway class }
示例插件代码2:
add_filter('woocommerce_payment_gateways', 'weldpay_add_gateway_class');function weldpay_add_gateway_class($gateways) {$gateways[] = 'wc_custom_pg';return $gateways;}add_action( 'plugins_loaded', 'init_wc_custom_payment_gateway' );function init_wc_custom_payment_gateway(){class WC_Custom_PG extends WC_Payment_Gateway {function __construct(){$this->id = 'wc_custom_pg';$this->method_title = 'Custom Payment Gateway';$this->title = 'Custom Payment Gateway';$this->has_fields = true;$this->method_description = 'Your description of the payment gateway';//load the settings 加载设置$this->init_form_fields();$this->init_settings();$this->enabled = $this->get_option('enabled');$this->title = $this->get_option( 'title' );$this->description = $this->get_option('description');//process settings with parent method 用父方法处理设置add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );}public function init_form_fields(){$this->form_fields = array('enabled' => array('title' => 'Enable/Disable','type' => 'checkbox','label' => 'Enable Custom Payment Gateway','default' => 'yes'),'title' => array('title' => 'Method Title','type' => 'text','description' => 'This controls the payment method title','default' => 'Custom Payment Gatway','desc_tip' => true,),'description' => array('title' => 'Customer Message','type' => 'textarea','css' => 'width:500px;','default' => 'Your Payment Gateway Description','description' => 'The message which you want it to appear to the customer in the checkout page.',));}function process_payment( $order_id ) {global $woocommerce;$order = new WC_Order( $order_id );/****Here is where you need to call your payment gateway API to process the paymentYou can use cURL or wp_remote_get()/wp_remote_post() to send data and receive response from your API.在这里,你需要调用你的支付网关API来处理付款。你可以使用cURL或wp_remote_get()/wp_remote_post()来发送数据并从你的API接收响应。****///Based on the response from your payment gateway, you can set the the order status to processing or completed if successful://根据你的支付网关的响应,你可以将订单状态设置为处理或完成(如果成功):$order->update_status('processing','Additional data like transaction id or reference number');//once the order is updated clear the cart and reduce the stock//一旦订单被更新,清除购物车并减少库存$woocommerce->cart->empty_cart();$order->wc_reduce_stock_levels();//if the payment processing was successful, return an array with result as success and redirect to the order-received/thank you page.//如果支付处理成功,返回一个数组,其结果为成功,并重定向到订单接收/感谢页面。return array('result' => 'success','redirect' => $this->get_return_url( $order ));}//this function lets you add fields that can collect payment information in the checkout page like card details and pass it on to your payment gateway API through the process_payment function defined above.//这个函数可以让你在结账页面添加可以收集支付信息的字段,如卡的详细信息,并通过上面定义的process_payment函数将其传递给你的支付网关API。public function payment_fields(){?><fieldset><p class="form-row form-row-wide"><?php echo esc_attr($this->description); ?></p><div class="clear"></div></fieldset><?php}}}add_filter('woocommerce_payment_gateways', 'weldpay_add_gateway_class'); function weldpay_add_gateway_class($gateways) { $gateways[] = 'wc_custom_pg'; return $gateways; } add_action( 'plugins_loaded', 'init_wc_custom_payment_gateway' ); function init_wc_custom_payment_gateway(){ class WC_Custom_PG extends WC_Payment_Gateway { function __construct(){ $this->id = 'wc_custom_pg'; $this->method_title = 'Custom Payment Gateway'; $this->title = 'Custom Payment Gateway'; $this->has_fields = true; $this->method_description = 'Your description of the payment gateway'; //load the settings 加载设置 $this->init_form_fields(); $this->init_settings(); $this->enabled = $this->get_option('enabled'); $this->title = $this->get_option( 'title' ); $this->description = $this->get_option('description'); //process settings with parent method 用父方法处理设置 add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); } public function init_form_fields(){ $this->form_fields = array( 'enabled' => array( 'title' => 'Enable/Disable', 'type' => 'checkbox', 'label' => 'Enable Custom Payment Gateway', 'default' => 'yes' ), 'title' => array( 'title' => 'Method Title', 'type' => 'text', 'description' => 'This controls the payment method title', 'default' => 'Custom Payment Gatway', 'desc_tip' => true, ), 'description' => array( 'title' => 'Customer Message', 'type' => 'textarea', 'css' => 'width:500px;', 'default' => 'Your Payment Gateway Description', 'description' => 'The message which you want it to appear to the customer in the checkout page.', ) ); } function process_payment( $order_id ) { global $woocommerce; $order = new WC_Order( $order_id ); /**** Here is where you need to call your payment gateway API to process the payment You can use cURL or wp_remote_get()/wp_remote_post() to send data and receive response from your API. 在这里,你需要调用你的支付网关API来处理付款。 你可以使用cURL或wp_remote_get()/wp_remote_post()来发送数据并从你的API接收响应。 ****/ //Based on the response from your payment gateway, you can set the the order status to processing or completed if successful: //根据你的支付网关的响应,你可以将订单状态设置为处理或完成(如果成功): $order->update_status('processing','Additional data like transaction id or reference number'); //once the order is updated clear the cart and reduce the stock //一旦订单被更新,清除购物车并减少库存 $woocommerce->cart->empty_cart(); $order->wc_reduce_stock_levels(); //if the payment processing was successful, return an array with result as success and redirect to the order-received/thank you page. //如果支付处理成功,返回一个数组,其结果为成功,并重定向到订单接收/感谢页面。 return array( 'result' => 'success', 'redirect' => $this->get_return_url( $order ) ); } //this function lets you add fields that can collect payment information in the checkout page like card details and pass it on to your payment gateway API through the process_payment function defined above. //这个函数可以让你在结账页面添加可以收集支付信息的字段,如卡的详细信息,并通过上面定义的process_payment函数将其传递给你的支付网关API。 public function payment_fields(){ ?> <fieldset> <p class="form-row form-row-wide"> <?php echo esc_attr($this->description); ?> </p> <div class="clear"></div> </fieldset> <?php } } }add_filter('woocommerce_payment_gateways', 'weldpay_add_gateway_class'); function weldpay_add_gateway_class($gateways) { $gateways[] = 'wc_custom_pg'; return $gateways; } add_action( 'plugins_loaded', 'init_wc_custom_payment_gateway' ); function init_wc_custom_payment_gateway(){ class WC_Custom_PG extends WC_Payment_Gateway { function __construct(){ $this->id = 'wc_custom_pg'; $this->method_title = 'Custom Payment Gateway'; $this->title = 'Custom Payment Gateway'; $this->has_fields = true; $this->method_description = 'Your description of the payment gateway'; //load the settings 加载设置 $this->init_form_fields(); $this->init_settings(); $this->enabled = $this->get_option('enabled'); $this->title = $this->get_option( 'title' ); $this->description = $this->get_option('description'); //process settings with parent method 用父方法处理设置 add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) ); } public function init_form_fields(){ $this->form_fields = array( 'enabled' => array( 'title' => 'Enable/Disable', 'type' => 'checkbox', 'label' => 'Enable Custom Payment Gateway', 'default' => 'yes' ), 'title' => array( 'title' => 'Method Title', 'type' => 'text', 'description' => 'This controls the payment method title', 'default' => 'Custom Payment Gatway', 'desc_tip' => true, ), 'description' => array( 'title' => 'Customer Message', 'type' => 'textarea', 'css' => 'width:500px;', 'default' => 'Your Payment Gateway Description', 'description' => 'The message which you want it to appear to the customer in the checkout page.', ) ); } function process_payment( $order_id ) { global $woocommerce; $order = new WC_Order( $order_id ); /**** Here is where you need to call your payment gateway API to process the payment You can use cURL or wp_remote_get()/wp_remote_post() to send data and receive response from your API. 在这里,你需要调用你的支付网关API来处理付款。 你可以使用cURL或wp_remote_get()/wp_remote_post()来发送数据并从你的API接收响应。 ****/ //Based on the response from your payment gateway, you can set the the order status to processing or completed if successful: //根据你的支付网关的响应,你可以将订单状态设置为处理或完成(如果成功): $order->update_status('processing','Additional data like transaction id or reference number'); //once the order is updated clear the cart and reduce the stock //一旦订单被更新,清除购物车并减少库存 $woocommerce->cart->empty_cart(); $order->wc_reduce_stock_levels(); //if the payment processing was successful, return an array with result as success and redirect to the order-received/thank you page. //如果支付处理成功,返回一个数组,其结果为成功,并重定向到订单接收/感谢页面。 return array( 'result' => 'success', 'redirect' => $this->get_return_url( $order ) ); } //this function lets you add fields that can collect payment information in the checkout page like card details and pass it on to your payment gateway API through the process_payment function defined above. //这个函数可以让你在结账页面添加可以收集支付信息的字段,如卡的详细信息,并通过上面定义的process_payment函数将其传递给你的支付网关API。 public function payment_fields(){ ?> <fieldset> <p class="form-row form-row-wide"> <?php echo esc_attr($this->description); ?> </p> <div class="clear"></div> </fieldset> <?php } } }
© 版权声明
THE END