woocommerceで支払いゲートウェイプラグインを作成しましたが、コールバックファイルがあり、WC_Payment_Gatewayクラスの外部からチェックアウト設定フィールドからPRIVATE_KEYを取得する必要があります。Woocommerce WC_Payment_Gatewayクラスの外部でフィールド値を設定するにはどうすればよいですか?
私はセッションをコールバックに使用していますが、セッションを取り除き、設定フィールド値(PRIVATE_KEY)を使用したいと思います。私はWC設定フィールドからPRIVATE_KEYを引き出す方法を知らない。
コールバックは何ですか?
コールバックは、POSTによってメインのチェックアウト機能からトークンと金額を取得し、トランザクションを作成する金額とともにPRIVATE_KEYとともにサーバーに別の要求を行います。
プラグインはhttps://gist.github.com/John-Henrique/1617074と同じですが、設定フィールドを保存するのにhttps://docs.woothemes.com/document/settings-api/を使用しています。ここで
は私のプラグイン_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"];
すべてのヘルプは感謝していただければ幸いです。
セッションは、どのように動作するかを示す一時的なソリューションでした。コールバック要求を持つ大きな理由の1つは、セキュリティに関することです。 postまたはsessionのどちらかでmyplugin.phpから秘密鍵を渡すべきではありません。私はちょうど支払いゲートウェイクラスの外でWCからの設定フィールドの値を取得する必要があります。 –