3 位卡代码失败,错误 E00003 根据其数据类型,值 XXXXXXX 无效 - 模式约束失败

3 digit card codes failing with error E00003 The value XXXXXXX is invalid according to its datatype - The Pattern constraint failed

代码如下:-

public bool AuthorizePayment(string Card_Num, string Exp_Date, string Card_Code, string amount)
{
      //Console.WriteLine("Charge Credit Card Sample");

      ApiOperationBase<ANetApiRequest, ANetApiResponse>.RunEnvironment = AuthorizeNet.Environment.SANDBOX;

      // define the merchant information (authentication / transaction id)
      ApiOperationBase<ANetApiRequest, ANetApiResponse>.MerchantAuthentication = new merchantAuthenticationType()
      {
          name = ConfigurationManager.AppSettings["AuthNetID"],
          ItemElementName = ItemChoiceType.transactionKey,
          Item = ConfigurationManager.AppSettings["AuthNetKey"],
      };

      var creditCard = new creditCardType
      {
          cardNumber = Card_Num,
          expirationDate = Exp_Date,
          cardCode = Card_Code
      };

      //standard api call to retrieve response
      var paymentType = new paymentType { Item = creditCard };

      var transactionType = objInf.Get("x_type") == "AUTH_CAPTURE" ? transactionTypeEnum.authCaptureTransaction.ToString() : transactionTypeEnum.refundTransaction.ToString();

      var transactionRequest = new transactionRequestType
      {
          transactionType = transactionType,
          amount = Convert.ToDecimal(amount),
          payment = paymentType,
      };

      if (objInf.Get("x_invoice_num") != null)
      {
          transactionRequest.order = new orderType { invoiceNumber = objInf.Get("x_invoice_num") };
      }
      if (objInf.Get("x_trans_id") != null)
      {
          transactionRequest.refTransId = objInf.Get("x_trans_id");
      }

      var request = new createTransactionRequest { transactionRequest = transactionRequest };

      // instantiate the controller that will call the service
      var controller = new createTransactionController(request);
      controller.Execute();

      // get the response from the service (errors contained if any)
      var response = controller.GetApiResponse();

      // validate response
      if (response != null)
      {
          //other code
      }
      else
      {
          //other code
      }
  }

大部分代码是从 AuthNet 站点复制粘贴的,如果我发送给 AuthNet 的卡代码是 3 位数字,则交易失败并且 Api returns 空响应,即使它的API 文档中明确提到 3 位卡代码有效。对此问题的任何帮助将不胜感激。

错误消息中的

XXXXXXX 提示 Authorize.Net 正在获取 5 个字符,请检查您的 cardCode 是否包含在空格中(例如 "cardCode":" 123" 或 " 123 " 或 "123 ").

当 cardType 是 AmericanExpress 并且卡代码是 3 位时会出现问题,这应该是因为 Amex 卡有 4 位代码,所以用户输入的数据似乎不正确。

我工作的网站之前使用的是 AuthNet api 的 AIMs 实现。 AIMs 从未发生过这个问题,所以我猜 Authnet 没有检查将位数与其卡类型匹配到 AIMs 中。为了解决这个问题,我们联系了authnet客服,根据他们的建议,我们完全停止发送卡码。