Веб-хук Authorize.net. Недопустимый JSON, отправленный в уведомлении Webhook. - PullRequest
0 голосов
/ 27 декабря 2018

Я пытаюсь реализовать Authorize.net webhook в проекте 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,

1 Ответ

0 голосов
/ 29 декабря 2018

Ваша проблема в том, что вы не получаете уведомление о веб-крюке.Код, который вы используете, предназначен для проверки уведомлений, а не для запроса веб-крючков.Вы должны сделать запрос, чтобы получить веб-крючок.

Когда вы настраиваете свою конечную точку, вы можете использовать этот код (хотя я не думаю, что 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 - это идентификатор, связанный с веб-крючком, который вы хотите получить.Вы можете выполнить поиск в пространстве имен, чтобы увидеть вызовы других методов для определенных действий веб-крючка.

...