วิธีสร้างเกตเวย์การชำระเงิน WooCommerce

เผยแพร่แล้ว: 2021-04-26

สร้างเกตเวย์การชำระเงิน WooCommerce คุณต้องการสร้าง WooCommerce Payment Gateway ที่ยอมรับตัวเลือกการชำระเงินแบบกำหนดเองของคุณหรือไม่? ในบทช่วยสอนนี้ ฉันต้องการแสดงให้คุณเห็นโดยย่อเกี่ยวกับวิธีสร้างเกตเวย์การชำระเงินใน WooCommerce เพื่อให้ลูกค้าของคุณชำระเงินผ่านเกตเวย์การชำระเงิน WooCommerce แบบกำหนดเองนี้

คุณสามารถสร้างเกตเวย์การชำระเงินของคุณเองได้ มี 2 ​​วิธีในการบรรลุเป้าหมายนี้ คุณสามารถใช้ปลั๊กอินหรือโค้ดที่กำหนดเองได้

อย่างไรก็ตาม สิ่งสำคัญที่ควรทราบคือปลั๊กอินจะทำให้ไซต์ของคุณขยายตัว นี่คือเหตุผลที่เราจะใช้ข้อมูลโค้ดที่กำหนดเอง

เราจะพูดถึงแต่ละขั้นตอนอย่างละเอียด เพื่อให้มือใหม่สามารถใช้วิธีนี้ได้

วิธีสร้างเกตเวย์การชำระเงิน WooCommerce

ในโพสต์นี้ เราจะสร้างปลั๊กอินเพื่อเพิ่มช่องทางการชำระเงินใหม่ ซึ่งหมายความว่าคุณต้องมีทักษะการเขียนโปรแกรมเพื่อทำสิ่งนี้

เราจะขยายคลาส WooCommerce WooCommerce มีคลาสหลักหลายคลาส เช่น เกตเวย์การชำระเงินหรือคลาสอีเมล

สามารถขยายคลาสเหล่านี้เพื่อเพิ่มฟังก์ชันการทำงานของคุณเองได้ ซึ่งช่วยประหยัดเวลาในการพัฒนา นอกจากนี้ยังช่วยให้มั่นใจว่าปลั๊กอินของคุณทำงานในลักษณะมาตรฐาน

WC_Payment_Gateway คลาส

คลาส WC_Payment_Gateway ขยายสิ่งนี้เพื่อให้โครงสร้างและฟังก์ชันแก่เราซึ่งจะเฉพาะกับวิธีการชำระเงิน เช่น ความสามารถในการรับยอดรวมของคำสั่งซื้อหรือ URL ของหน้าขอบคุณ

เราจะได้ประโยชน์จากโครงสร้างถ้าเราขยายคลาสนี้ การดำเนินการนี้จะจัดการกับฟังก์ชันบางอย่างสำหรับเรา รวมถึงการเรียกชื่อและคำอธิบายและแสดงบนหน้าชำระเงิน

เป็นสิ่งสำคัญที่จะต้องทราบว่าเกตเวย์การชำระเงินทั้งหมดใน WooCommerce จะเริ่มต้นด้วยการขยายคลาส WC_Payment_Gateway

นี่คือขั้นตอนที่คุณต้องปฏิบัติตาม:

1. ตรวจสอบว่า WooCommerce เปิดใช้งานอยู่หรือไม่

เนื่องจากเราจะขยายคลาส WooCommerce เราจึงต้องตรวจสอบว่ามีการใช้งานอยู่หรือไม่:

// Make sure WooCommerce is active

if ( ! in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) return;

2. สร้างชั้นเรียนลูกของคุณ

ในการทำเช่นนี้ ก่อนอื่นเราต้องรวมสิ่งนี้ไว้ในฟังก์ชัน init และเชื่อมต่อเข้ากับ plugins_loaded ช้ากว่าลำดับความสำคัญเริ่มต้น

หลังจากที่เราตรวจสอบว่า WooCommerce เปิดใช้งานอยู่หรือไม่ เราจะโหลดคลาสของเราหลังจาก WooCommerce core ซึ่งทำให้เป็นการตรวจสอบรองจากข้อผิดพลาดร้ายแรง

นอกจากนี้ยังช่วยให้แน่ใจว่าคลาส WC_Payment_Gateway พร้อมใช้งาน o ขยายคลาส คุณจะทำตามรูปแบบ:

คลาส My_Child_Class ขยาย The_Parent_Class { }

นี่คือสิ่งที่จะดูเหมือนในปลั๊กอินของเรา:

/**

* Offline Payment Gateway

* @class       WC_Gateway_Offline

* @extends     WC_Payment_Gateway

* @version     1.0.0

* @package     WooCommerce/Classes/Payment

* @author      Njengah

*/

add_action( 'plugins_loaded', 'wc_offline_gateway_init', 11 );

function wc_offline_gateway_init() {

class WC_Gateway_Offline extends WC_Payment_Gateway {

// You plugin code starts here

} // end \WC_Gateway_Offline class

}

3. สร้างเกตเวย์

เนื่องจากเราไม่มีคลาส เราจึงต้องสร้างฟังก์ชัน __construct() ของเรา เพื่อให้แน่ใจว่าตัวแปรที่เราจำเป็นต้องรวมไว้ในชั้นเรียนของเรา

นี่คือตัวแปรที่จำเป็น:

  • $this->id
  • $นี้->ไอคอน
  • $this->has_fields = จริงหรือเท็จ (บูล)
  • $this->method_title
  • $this->method_description

หลังจากตั้งค่าตัวแปรแล้ว คอนสตรัคเตอร์จะต้องใช้ฟังก์ชันอื่นๆ อีกสองสามอย่าง

ฟิลด์แบบฟอร์มจะถูกตั้งค่าในฟังก์ชัน init_form_fields() ฟังก์ชันนี้จะเพิ่มฟิลด์การตั้งค่าทั้งหมด เช่น การเปิดใช้งานเกตเวย์และการเพิ่มชื่อ

$this->init_form_fields();
$this->init_settings();

4. เริ่มต้นฟิลด์แบบฟอร์ม

ในส่วนนี้ เราจะสร้างฟังก์ชัน init_form_fields() เพื่อตั้งค่าฟิลด์แบบฟอร์มสำหรับเกตเวย์การชำระเงินของเรา

ฟังก์ชันไม่ทำอะไรเลยในคลาสพาเรนต์ แต่ทำให้แน่ใจว่าไม่มีข้อผิดพลาดร้ายแรง ถ้าคุณไม่แทนที่มัน

อย่างไรก็ตาม เราจะให้ฟังก์ชันบางอย่างในชั้นเรียนย่อยของเรา

ฟิลด์พื้นฐานที่เราควรรวมไว้คือชื่อและคำอธิบายที่เปิดใช้งาน

/**

* Initialize Gateway Settings Form Fields

*/

public function init_form_fields() {

$this->form_fields = apply_filters( 'wc_offline_form_fields', array(

'enabled' => array(

'title'   => __( 'Enable/Disable', 'wc-gateway-offline' ),

'type'    => 'checkbox',

'label'   => __( 'Enable Offline Payment', 'wc-gateway-offline' ),

'default' => 'yes'

),

'title' => array(

'title'       => __( 'Title', 'wc-gateway-offline' ),

'type'        => 'text',

'description' => __( 'This controls the title for the payment method the customer sees during checkout.', 'wc-gateway-offline' ),

'default'     => __( 'Offline Payment', 'wc-gateway-offline' ),

'desc_tip'    => true,

),

'description' => array(

'title'       => __( 'Description', 'wc-gateway-offline' ),

'type'        => 'textarea',

'description' => __( 'Payment method description that the customer will see on your checkout.', 'wc-gateway-offline' ),

'default'     => __( 'Please remit payment to Store Name upon pickup or delivery.', 'wc-gateway-offline' ),

'desc_tip'    => true,

),

'instructions' => array(

'title'       => __( 'Instructions', 'wc-gateway-offline' ),

'type'        => 'textarea',

'description' => __( 'Instructions that will be added to the thank you page and emails.', 'wc-gateway-offline' ),

'default'     => '',

'desc_tip'    => true,

),

) );

}

5. ดำเนินการชำระเงิน

นี่เป็นส่วนที่สำคัญที่สุดในการสร้างเกตเวย์การชำระเงิน เราจำเป็นต้องเพิ่มฟังก์ชันเพื่อจัดการกับการประมวลผลคำสั่งซื้อ โดยบอก WooCommerce ว่าสถานะใดควรมีสถานะและลูกค้าไปที่ใดหลังจากใช้งาน:

public function process_payment( $order_id ) {

$order = wc_get_order( $order_id );

// Mark as on-hold (we're awaiting the payment)

$order->update_status( 'on-hold', __( 'Awaiting offline payment', 'wc-gateway-offline' ) );

// Reduce stock levels

$order->reduce_order_stock();

// Remove cart

WC()->cart->empty_cart();

// Return thankyou redirect

return array(

'result'    => 'success',

'redirect'  => $this->get_return_url( $order )

);

}

6. เพิ่มข้อมูลเกตเวย์การชำระเงินไปยังคำสั่งซื้อที่ได้รับและอีเมล

เกตเวย์ที่เราเพิ่มเข้าไปนั้นต้องการคำแนะนำเพิ่มเติมเพื่อชำระเงินให้เสร็จสิ้น เราจำเป็นต้องตรวจสอบให้แน่ใจว่าคำแนะนำเหล่านี้แสดงอยู่ในทั้งหน้าขอบคุณและอีเมลคำสั่งซื้อโดยใช้วิธีต้นขั้ว Thankyou_page() และ email_instructions()

/**

* Output for the order received page.

*/

public function thankyou_page() {

if ( $this->instructions ) {

echo wpautop( wptexturize( $this->instructions ) );

}

}

/**

* Add content to the WC emails.

*

* @access public

* @param WC_Order $order

* @param bool $sent_to_admin

* @param bool $plain_text

*/

public function email_instructions( $order, $sent_to_admin, $plain_text = false ) {

if ( $this->instructions && ! $sent_to_admin && 'offline' === $order->payment_method && $order->has_status( 'on-hold' ) ) {

echo wpautop( wptexturize( $this->instructions ) ) . PHP_EOL;

}

}

7. เพิ่มไปยัง WooCommerce Payment Gateways

ขั้นตอนสุดท้ายคือเพื่อให้แน่ใจว่าเกตเวย์การชำระเงินอยู่ภายใต้ WooCommerce > Settings > Checkout

เราจะใช้ตัวกรอง woocommerce_payment_gateways ที่ให้อาร์เรย์ของเกตเวย์ที่มีอยู่ทั้งหมดแก่เรา ซึ่งหมายความว่าเราจะเพิ่มเกตเวย์ของเราลงในอาร์เรย์นี้ จากนั้นจึงส่งคืนอาร์เรย์ด้วยการเพิ่มเกตเวย์ของเรา

function wc_offline_add_to_gateways( $gateways ) {

$gateways[] = 'WC_Gateway_Offline';

return $gateways;

}

add_filter( 'woocommerce_payment_gateways', 'wc_offline_add_to_gateways' );

บทสรุป

สิ่งที่คุณต้องทำเพื่อเพิ่มเกตเวย์การชำระเงินที่กำหนดเอง เราเพียงแค่ลอกแบบฟังก์ชันของเกตเวย์ "เช็ค"

หากคุณกำลังทำงานร่วมกับผู้ประมวลผลการชำระเงิน โปรดทราบว่าคุณจำเป็นต้องรวมข้อมูลการลงรายการบัญชีและรับข้อมูลจากผู้ประมวลผลการชำระเงิน

หากกระบวนการนี้ซับซ้อนเกินไป คุณสามารถจ้างนักพัฒนาที่ผ่านการรับรองได้ เพื่อให้แน่ใจว่าคุณจะไม่ทำลายไซต์ของคุณ

บทความที่คล้ายกัน

  1. WooCommerce Redirect หลังจากออกจากระบบ [สุดยอดคู่มือ]
  2. วิธีปรับแต่งหน้าผลิตภัณฑ์ WooCommerce
  3. วิธีการเปลี่ยนจุดชำระเงิน WooCommerce