WooCommerce 自定义支付网关 [英] WooCommerce Custom Payment Gateway

查看:35
本文介绍了WooCommerce 自定义支付网关的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试为我的商家帐户制作自定义网关插件,但我卡住了,不知道如何继续.

I am trying to make a Custom Gateway Plugin for my Merchant Account but I got stuck and I don't know how to continue.

现在,这是我目前所做的:

Now, here is what I done so far:

<?php
 /*
  Plugin Name: Paysecure.ro Payment Gateway
  Plugin URI: http://www.Paysecure.ro
  Description: Allows you to use Paysecure.ro Payment Gateway with the WooCommerce plugin.
  Version: 0.0.1
  Author: Andrei Raileanu
 */

if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly

add_action('plugins_loaded', 'woocommerce_Paysecure', 0);

function woocommerce_Paysecure(){
    if (!class_exists('WC_Payment_Gateway'))
        return; // if the WC payment gateway class is not available, do nothing
    if(class_exists('WC_Paysecure'))
        return;

    class WC_Gateway_Paysecure extends WC_Payment_Gateway{
        public function __construct(){

            $plugin_dir = plugin_dir_url(__FILE__);

            global $woocommerce;

            $this->id = 'Paysecure';
            $this->icon = apply_filters('woocommerce_Paysecure_icon', ''.$plugin_dir.'Paysecure.png');
            $this->has_fields = true;

            // Load the settings
            $this->init_form_fields();
            $this->init_settings();

            // Define user set variables
            $this->title = "Credit/Debit Card";
             $this->description = "You will be redirected to paysecure.ro to complete your purchase.";
            $this->cui = "XXXXXXXXX";
            $this->encryption_key = "XXXXXXXXX";
            $this->currency = "USD";

            // Logs
            if ($this->debug == 'yes'){
                $this->log = $woocommerce->logger();
            }

            // Actions
            add_action('woocommerce_receipt_' . $this->id, array($this, 'receipt_page'));

            // Save options
            add_action( 'woocommerce_update_options_payment_gateways_' . $this->id, array( $this, 'process_admin_options' ) );

            // Payment listener/API hook
            add_action('woocommerce_api_wc_' . $this->id, array($this, 'check_ipn_response'));

        }

        function init_form_fields()
            {
                $this->form_fields = array(
                    'enabled' => array(
                        'title' => __( 'Enable/Disable', 'woocommerce' ),
                        'type' => 'checkbox',
                        'label' => __( 'Enable Paysecure', 'woocommerce' ),
                        'default' => 'yes'
                    )
                );
        }

        public function admin_options() {

            ?>
            <h3><?php _e( 'Paysecure', 'woocommerce' ); ?></h3>
            <p><?php _e( 'Paysecure Payment Gateway', 'woocommerce' ); ?></p>

            <table class="form-table">
                    <?php $this->generate_settings_html(); ?>
              </table>

             <?php
        }

        function payment_fields() {
            $plugin_dir = plugin_dir_url(__FILE__);
            // Description of payment method from settings
            if ($this->description) { ?>
                <p><?php
                echo $this->description; ?>
                </p><?php
            } ?>

<?php
        }

        function process_payment( $order_id ) {
            global $woocommerce;

            $order = new WC_Order($order_id);

            // I WILL NEED THESE FIELDS
            //$this->notify_url;
        //$order->get_total();
            //$order->get_order_number();
            //$order->billing_first_name; 
            //$order->billing_email;

        }

    }

    function add_Paysecure_gateway($methods){
        $methods[] = 'WC_Gateway_Paysecure';
        return $methods;
    }

    add_filter('woocommerce_payment_gateways', 'add_Paysecure_gateway');

}

以下是我的商家帐户提供商提供的 PHP 说明:

Here are the PHP instructions from my merchant account provider:

<?php 
 require_once('./functions.php'); 
 $key = 'THIS IS THE ENCRYPTION KEY'; 
 $data = array( 'cui' => 'THIS IS THE CUI CODE',
'AMOUNT' => '200',
'CURRENCY' => 'USD',
'ORDER' =>  '12313',
'DESC' => ps_clean('SHORT DESCRIPTION'),
'PENTRU' => 'EMAIL ADDRESS',
'TRTYPE' => 0,                              
'BACKREF' => 'http://www.site.ro/test.php',
'TIMESTAMP'=>time()   

);

 echo '<form action="https://paysecure.ro/order/cgi-bin/" method="post" >';

  foreach ($data as $l => $v ) echo '<input size="55" readonly type="text" name="'.$l.'" value="'.$v.'" /> : <label for="'.$l.'">'.$l.'</label><br>'; 

  echo '<input size="55" type="text" name="P_SIGN" readonly value="'.calculateSign($data,$key).'" /><br>' ; //se calculeaza P_SIGN - ul , encriptarea datelor

?>
<input type="submit" />
</form>

有人可以帮我完成其余的代码吗?

Can someone help me with the rest of the code?

推荐答案

我注意到你犯的第一个错误,$this->id 必须为小写.'Paysecure' 在 API 钩子的时候不会在这里工作.

1st mistake I noticed you made, $this->id MUST be in lowercase. 'Paysecure' is not gonna work here come time for the API hook.

// Payment listener/API hook
add_action('woocommerce_api_wc_' . $this->id, array($this, 'check_ipn_response'));

改为这样:

// Payment listener/API hook
add_action('woocommerce_api_wc_paysecure', array($this, 'check_ipn_response'));

第二个错误是你忘记创建函数 check_ipn_response()

2nd mistake is that you forgot to create the function check_ipn_response()

   // Handles the callbacks received from the payment backend. give this url to your payment processing comapny as the ipn response URL:
    // USAGE:  http://myurl.com/?wc-api=WC_Gateway_Paysecure
      function check_ipn_response() {

        $http_contents  = file_get_contents("php://input");
        $json = json_decode($http_contents, true);
        $order = new WC_Order($json['custom']);

                if ($callback_json['status'] == 'Transaction approved') 
                {
            $order->payment_complete();  //This will ensure stock reductions are made, and the status is changed to the correct value.
            $order->add_order_note( __( 'KiwiPay Transaction Approved.', 'kiwipay' ) );
                }                   
else
                {
                        $order->update_status('failed');
                        $order->add_order_note('KiwiPay status received - ' . $callback_json['status']);
    }


                //references:
                //http://docs.woothemes.com/document/payment-gateway-api/
                //https://github.com/Paymium/WooCommerce/blob/master/checkout.php
                //https://github.com/tubiz/voguepay-woocommerce-payment-gateway/blob/master/voguepay-woocommerce-payment-gateway.php


                /*
                {
                "id":1863,
                "amount":1750,
                "status":"Transaction approved",
                "created":1434198776,
                "reference":"2626", //this is the order number $order->get_order_number()
                "name":"HamishTest Test",
                "email":"hamish@tst.xom",
                "address":{"street":"my rd","region":"N/A","city":"tauranga","zip":"3175","country":"NZ"},
                "test":true,
                "price":"17.50",
                "custom":"6589"   //this is the wc order_id passed during process_payment to the paymen processor.
                }
                */

这篇关于WooCommerce 自定义支付网关的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆