I’ve created a payment gateway plugin with woocommerce successfully however I have a callback file and I need to retrieve the the PRIVATE_KEY from the checkout settings fields from the outside of WC_Payment_Gateway class.
I’m using session to make the callback but I’d like to get rid of session and use the settings field value (PRIVATE_KEY). I don’t know how to pull PRIVATE_KEY from WC setting fields.
what does callback do?
Callback gets the token and amount from the main checkout function by POST and make another request to server with the PRIVATE_KEY along with the amount to create the transaction.
the plugin is same as https://gist.github.com/John-Henrique/1617074 and I’m using https://docs.woothemes.com/document/settings-api/ to store the setting fields.
Here is part of my plugin _construct fucntion:
myplugin.php
session_start(); // I HAVE TO GET RID OF SESSION
add_action('plugins_loaded', 'woocommerce_myplugin', 0);
function woocommerce_myplugin(){
if (!class_exists('WC_Payment_Gateway'))
return; // if the WC payment gateway class is not available, do nothing
class WC_Gateway_Myplugin extends WC_Payment_Gateway{
// Logging
public static $log_enabled = false;
public static $log = false;
public function __construct(){
$plugin_dir = plugin_dir_url(__FILE__);
global $woocommerce;
$this->id = 'myplugin';
$this->icon = apply_filters('woocommerce_myplugin_icon', ''.$plugin_dir.'myplugin.png');
$this->has_fields = true;
// Load the settings
$this->init_form_fields();
$this->init_settings();
// Define user set variables
$this->title = $this->get_option('title');
$this->publishable_key = $this->get_option('publishable_key');
$this->private_key = $this->get_option('private_key');
unset($_SESSION['private_key']);
if($this->sandbox == "no"){
$_SESSION['private_key'] = $this->private_key;
$_SESSION['url'] = 'https://www.xxxxx.io/api/v1/charge';
} else {
$_SESSION['private_key'] = $this->sb_private_key;
$_SESSION['url'] = 'https://sandbox.xxxx.io/api/v1/charge';
}
}
callback.php
$url = $_SESSION['url'];
$token=$_POST["token"];
$amount=$_POST["amount"]*100;
$fields = array(
'token' => $token,
'amount' => $amount,
'key' => $_SESSION['private_key'], //<==== INSTEAD OF SESSION I NEED TO USE WC FUNCT TO GET THE PRIVATE_KEY FROM CHECKOUT SETTINGS.
);
//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string, '&');
//open connection
$ch = curl_init();
//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_POST, count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS, $fields_string);
//execute post
$result = curl_exec($ch);
$http_code = curl_getinfo($ch)["http_code"];
any help would be gratefully appreciated.
Add it under the
add_action(‘plugins_loaded’, ‘woocommerce_myplugin_init’, 0);
You can get Woocommerces own instance of your gateway to get the setting field value.