TL; DR URL-адрес обратного вызова WooCommerce, который запускает класс с тем же именем, сломался. Как будто я мог получить доступ к своему классу
valitorcallback
, перейдя вhttp://mywebsite.com/wc-api/valitorcallback
, есть ли способ включить этот URL или каким-то образом получить доступ к этому классу?
Я разработал плагин платежного шлюза WooCommerce для подключения к исландской системе PayPal, такой как компания Valitor.
Процесс оплаты прост:
- Покупатели добавляют товары в свою корзину и переходят к оформлению заказа.
- Перенаправить покупателя интернет-магазина на Valitor с указанием информации о заказе в параметрах запроса.
- Клиент производит оплату своей кредитной или дебетовой картой.
- Клиент перенаправляется на предоставленную страницу с благодарностью, и Valitor вызывает другой URL-адрес (обратный вызов), чтобы уведомить о завершении платежа и указать информацию о заказе и коды / метод проверки.
Единственное, что делает плагин, - это шаги 2 и 4. На шаге 4, если заказ действителен, плагин снижает запас и изменяет состояние заказа, чтобы сказать, что платеж был завершен.
Проблема в том, что после обновления WooCommerce около 2 месяцев назад URL-адрес обратного вызова сломался, вероятно, из соображений безопасности. Мне не удалось найти код, чтобы снова включить этот URL-адрес или решить эту проблему. Думаю, это можно сделать с помощью метода add_action или некоторых хуков, но мне не удалось заставить это работать.
Вот руководство, которое я считаю ключевым, но я делаю что-то не так: http://docs.woothemes.com/document/payment-gateway-api/#section-4
Структура плагина кода выглядит так:
<?php
function initWooCommerceValitorGatewayPlugin()
{
class WooCommerceValitorGateway extends WC_Payment_Gateway
{
public function __construct()
{
// ...Varible code...
// Actions
add_action('woocommerce_update_options_payment_gateways_'.$this->id, array($this, 'process_admin_options'));
}
public function init_form_fields()
{
// ...Define settings code...
}
public function process_payment($orderId)
{
// ...Magic code...
// Redirect to Valitor with all necessary data
return array(
'result' => 'success',
'redirect' => add_query_arg($valitorData, $gatewayUrl)
);
}
// ...Helper functions code (like sending an email)...
}
}
class valitorcallback
{
public function __construct()
{
$this->verifyPayment();
}
public function verifyPayment()
{
// ...Verification code...
}
// ...Helper functions code (like sending an email)...
}
// Add plugin to wordpress/woocommerce
add_action('plugins_loaded', 'initWooCommerceValitorGatewayPlugin');
function addValitorGateway($methods)
{
$methods[] = 'WooCommerceValitorGateway';
return $methods;
}
// Add gateway method to woocommerce
add_filter('woocommerce_payment_gateways', 'addValitorGateway');
?>
Теперь вы видите имя функции и, возможно, можете сказать мне, где следует разместить add_action.
Я знаю о mywebsite.com/wc-api/v3 / ... REST API, но я надеялся, что смогу снова включить URL-адрес, чтобы мне не пришлось снова кодировать эту часть, и я не уверен, как получить настройки этого плагина из другого файла.
Спасибо, Сигурдур
РЕДАКТИРОВАТЬ: добавлен раздел TL; DR вверху и жирным шрифтом, когда я излагаю проблему.
$_POST
запрос, вы можете получить значения из$_POST['some_value']
как обычно. Если они отправляют более сложные данные, вам может потребоваться использовать file_get_contents вместо этого, чтобы получить входные данные и проанализировать их в соответствии с вашими потребностями. 22.02.2019