diff --git a/commerce_authnet.post_update.php b/commerce_authnet.post_update.php
index 35dc111..8f753f9 100644
--- a/commerce_authnet.post_update.php
+++ b/commerce_authnet.post_update.php
@@ -6,6 +6,7 @@
  */
 
 use Drupal\commerce_payment\Entity\PaymentGateway;
+use Drupal\commerce_payment\Entity\PaymentGatewayInterface;
 use Drupal\commerce_payment\Entity\PaymentMethod;
 use Drupal\commerce_payment\Entity\Payment;
 use Drupal\commerce_order\Entity\Order;
@@ -15,6 +16,7 @@ use Drupal\commerce_order\Entity\Order;
  * payment_methods and payments.
  */
 function commerce_authnet_post_update_echeck(&$sandbox) {
+  \Drupal::service('plugin.manager.commerce_payment_gateway')->clearCachedDefinitions();
   $entity_type_manager = \Drupal::entityTypeManager();
   $payment_gateway_storage = $entity_type_manager->getStorage('commerce_payment_gateway');
   $payment_method_storage = $entity_type_manager->getStorage('commerce_payment_method');
@@ -116,5 +118,26 @@ function commerce_authnet_post_update_echeck(&$sandbox) {
     $sandbox['#finished'] = 1;
   }
 
-  return t('All Authorize.net gateways, payment methods and payments have been updated.');
+  return t('All Authorize.net gateways, payment methods and payments have been updated. Please double check all configuration.');
+}
+
+/**
+ * Alerts users to payment gateway configurations missing a client key.
+ */
+function commerce_authnet_post_update_verify_client_key() {
+  $messenger = \Drupal::service('messenger');
+  $entity_type_manager = \Drupal::entityTypeManager();
+  $payment_gateway_storage = $entity_type_manager->getStorage('commerce_payment_gateway');
+  /** @var \Drupal\commerce_payment\Entity\PaymentGatewayInterface[] $gateways */
+  $gateways = array_filter($payment_gateway_storage->loadMultiple(), function (PaymentGatewayInterface $gateway) {
+    return in_array($gateway->getPluginId(), ['authorizenet_acceptjs', 'authorizenet_echeck']);
+  });
+  foreach ($gateways as $gateway) {
+    $configuration = $gateway->getPluginConfiguration();
+    if (empty($configuration['client_key'])) {
+      $messenger->addWarning(t('Please provide a client key for %label. It is required to continue accepting payments.', [
+        '%label' => $gateway->label()
+      ]));
+    }
+  }
 }
diff --git a/tests/src/Kernel/UpgradeConfigTest.php b/tests/src/Kernel/UpgradeConfigTest.php
index 4329443..c78e2e8 100644
--- a/tests/src/Kernel/UpgradeConfigTest.php
+++ b/tests/src/Kernel/UpgradeConfigTest.php
@@ -3,6 +3,7 @@
 namespace Drupal\Tests\commerce_authnet\Kernel;
 
 use Drupal\commerce_payment\Entity\PaymentGateway;
+use Drupal\Core\Messenger\MessengerInterface;
 use Drupal\KernelTests\KernelTestBase;
 
 /**
@@ -30,7 +31,7 @@ class UpgradeConfigTest extends KernelTestBase {
     $this->assertCount(1, $gateways);
 
     $authnet_post_updates = $this->container->get('update.post_update_registry')->getModuleUpdateFunctions('commerce_authnet');
-    $this->assertCount(1, $authnet_post_updates);
+    $this->assertCount(2, $authnet_post_updates);
     foreach ($authnet_post_updates as $authnet_post_update) {
       $sandbox = [];
       $authnet_post_update($sandbox);
@@ -50,6 +51,28 @@ class UpgradeConfigTest extends KernelTestBase {
       'display_label' => 'Authorize.net',
       'payment_method_types' => ['credit_card'],
     ], $gateway_configuration);
+  }
+
+  public function testClientKeyMessage() {
+    $messenger = $this->container->get('messenger');
+    $this->installFixture(__DIR__ . '/../../fixtures/authorizenet-pre-acceptjs.php.gz');
+    $authnet_post_updates = $this->container->get('update.post_update_registry')->getModuleUpdateFunctions('commerce_authnet');
+    $this->assertCount(2, $authnet_post_updates);
+    foreach ($authnet_post_updates as $authnet_post_update) {
+      $sandbox = [];
+      $authnet_post_update($sandbox);
+    }
+
+    $messages = $messenger->messagesByType(MessengerInterface::TYPE_WARNING);
+    $this->assertCount(1, $messages);
+
+    /** @var \Drupal\commerce_payment\Entity\PaymentGateway $gateway */
+    $gateway = PaymentGateway::load('authorizenet_pre_acceptjs');
+    $this->assertEquals(
+      (string) t('Please provide a client key for %label. It is required to continue accepting payments.', [
+        '%label' => $gateway->label()
+      ]), reset($messages)
+    );
 
   }
 
