На самом деле я пишу собственный плагин для подключения платежного шлюза к Woocommerce, и я застрял в проблеме на несколько часов:
Я не могу получить обратный вызов обработки платежа.
Я много гуглил, чтобы найти проблему, но пока безуспешно.
Среда выглядит следующим образом:
Мой класс выглядит так:
add_filter('woocommerce_payment_gateways', 'woogatewaypro_add_gateway_class');
function woogatewaypro_add_gateway_class($gateways){
$gateways[] = 'WC_Gateway_Pro';
return $gateways;
}
add_action('plugins_loaded', 'woogatewaypro_init_gateway_class');
function woogatewaypro_init_gateway_class(){
class WC_Gateway_Pro extends WC_Payment_Gateway{
public function __construct(){
global $wpdb;
global $woocommerce;
$this->id = 'woogatewaypro';
$this->icon = '';
$this->has_fields = true;
$this->method_title = 'Gateway Pro payment gateway';
$this->method_description = __('Allow payment from Gateway Pro gateway.','woogatewaypro');
$this->supports = array(
'products',
'subscriptions',
'subscription_cancellation',
'subscription_suspension',
'subscription_reactivation',
'subscription_amount_changes',
'subscription_date_changes',
'subscription_payment_method_change',
'subscription_payment_method_change_customer',
'subscription_payment_method_change_admin',
'multiple_subscriptions'
);
$this->init_form_fields();
$this->init_settings();
$this->title = $this->get_option('title');
$this->description = $this->get_option('description');
$this->enabled = $this->get_option('enabled');
$this->testmode = 'yes' === $this->get_option('testmode');
$this->private_key = $this->testmode ? $this->get_option('test_private_key') : $this->get_option('private_key');
$this->publishable_key = $this->testmode ? $this->get_option('test_publishable_key') : $this->get_option('publishable_key');
/* some code... */
add_action('woocommerce_api_'.strtolower(get_class($this)), 'woogatewaypro_payment_callback');
add_action('woocommerce_api_woogatewaypro_cancel_payment', array($this, 'woogatewaypro_cancel_payment'));
add_action('woocommerce_api_woogatewaypro_payment_ko', array($this, 'woogatewaypro_payment_ko'));
add_action('woocommerce_api_woogatewaypro_payment_ok', array($this, 'woogatewaypro_payment_ok'));
add_action('woocommerce_update_options_payment_gateways_'.$this->id, array($this, 'process_admin_options'));
add_action('wp_enqueue_scripts', array($this, 'payment_scripts'));
/* some code... */
}
public function init_form_fields(){
/* some code... */
}
public function payment_scripts(){
/* some code... */
}
public function process_payment($order_id){
/* some code... */
}
public function woogatewaypro_cancel_payment(){
wp_redirect(get_permalink(get_option('woocommerce_checkout_page_id')).'?woogatewaypro=cancelled-payment');
}
public function woogatewaypro_payment_ko(){
wp_redirect(get_permalink(get_option('woocommerce_checkout_page_id')).'?woogatewaypro=payment-ko');
}
public function woogatewaypro_payment_ok(){
/* some code... */
wp_redirect(get_permalink(get_option('woocommerce_checkout_page_id')).'?woogatewaypro=payment-ok');
}
}
}
function add_wc_gateway_pro_gateway($methods){
$methods[] = 'WC_Gateway_Pro';
return $methods;
}
add_filter('woocommerce_payment_gateways', 'add_wc_gateway_pro_gateway');
function woogatewaypro_payment_callback(){
mail('user@mydomain.tld','Check callback','Enter func');
// wp_die();
exit;
}
Что я я делаю что-то не так?
Я пытался поместить мою функцию woogatewaypro_payment_callback в свой класс, но она не работает.
Мой URL для обратного вызова выглядит так:
if('' == get_option('permalink_structure')){
$callback = site_url().'/?wc-api=WC_Gateway_Pro';
}else{
$callback = site_url().'/wc-api/WC_Gateway_Pro/';
}
Я просматриваю журналы на моем сервере, и кажется, что данные опубликованы: я получаю 200 статус с POST.
Когда я пытаюсь получить доступ к функции с помощью GET, у меня все еще есть 1 на пустой странице .
Могут ли некоторые плагины создать проблему?
Заранее спасибо за помощь;).