Я пытаюсь реализовать веб-крючок Authorize.net в проекте Laravel. В интерфейсе продавца я добавил конечную точку webhook. Но когда я пытаюсь получить события, выдается неверная ошибка JSON. Что я делаю не так в коде ниже?
namespace App\Http\Controllers\Api\Anet;
use Illuminate\Http\Request;
use net\authorize\api\contract\v1 as AnetAPI;
use net\authorize\api\controller as AnetController;
use App\Http\Controllers\Controller;
use JohnConde\Authnet\AuthnetWebhook;
class xxxController extends Controller
{
public function webhook(){
$headers = getallheaders();
$payload = file_get_contents("php://input");
$webhook = new AuthnetWebhook(hex2bin('XXXXXD4FF0A6060E23DBCD9AE507E20XXXXX'), $payload, $headers);
if ($webhook->isValid()) {
// Get the transaction ID
$transactionId = $webhook->payload->id;
// Here you can get more information about the transaction
$request = AuthnetApiFactory::getJsonApiHandler('services.authorize.login', 'services.authorize.key');
$response = $request->getTransactionDetailsRequest(array(
'transId' => $transactionId
));
/* You can put these response values in the database or whatever your business logic dictates.
$response->transaction->transactionType
$response->transaction->transactionStatus
$response->transaction->authCode
$response->transaction->AVSResponse
*/
}
}
}
Ошибка:
"message": "Invalid JSON sent in the Webhook notification",
"exception": "JohnConde\\Authnet\\AuthnetInvalidJsonException",
"file": "/var/www/html/staging/vendor/stymiee/authnetjson/src/authnet/AuthnetWebhook.php",
"line": 67,
Ваша проблема в том, что вы не получаете уведомление о подключении через Интернет. Код, который вы используете, предназначен для проверки уведомлений, а не для запроса веб-крючков. Вы должны сделать запрос, чтобы получить веб-крючок.
Когда вы настраиваете свою конечную точку, вы можете использовать этот код (хотя я не думаю, что hex2bin () требуется) для проверки веб-хуков, а затем извлекать из них информацию.
Чтобы создать запрос веб-хука, вы можете использовать такой код:
$webhooksArray = array(' net.authorize.payment.authorization.created','
net.authorize.payment.authcapture.created','
net.authorize.payment.capture.created');
$webhooksUrl = 'https://{yourserver.com}/{your path}/{your endpoint}';
$webhook = new AuthnetAPIFactory();
$handler = $webhook->getWebhooksHandler($login,$transId);
$createWebhooks = $handler->createWebhooks($webhooksArray,$webhooksUrl);
Это зарегистрирует вас в событиях, которые будут автоматически отправлены на вашу конечную точку
т.е. https://{yourserver.com}/{your path}/{your endpoint}
,
Затем вы можете использовать приведенный выше код для проверки веб-крючков, когда они достигают вашей конечной точки. После того, как вы зарегистрированы в событиях и веб-хуки отправляются на конечную точку, вы можете получить историю, используя такой код:
$webhook = new AuthnetAPIFactory();
$handler = $webhook->getWebhooksHandler($login,$transId);
$history = $handler->getNotificationHistory();
print_r($history);
Вы можете получить определенный веб-крючок, как это-
$webhook = new AuthnetAPIFactory();
$handler = $webhook->getWebhooksHandler($login,$transId);
$webhook = $handler->getWebhook($webhookId);
Где $ webhookId — это идентификатор, связанный с webhook, который вы хотите получить. Вы можете выполнить поиск в пространстве имен, чтобы увидеть вызовы других методов для определенных действий веб-крючка.
Других решений пока нет …