【问题标题】:Get 4 digit credit card number Authorize.net获取 4 位信用卡号 Authorize.net
【发布时间】:2018-10-18 17:26:33
【问题描述】:

您好,我找到了一个示例代码,它要求传递 ApiLoginID、ApiTransactionKey 和 transactionId。

我能够获取 ApiLoginID 和 ApiTransactionKey,但是如何获取测试 transactionID,因为在测试模式下 authorize.net 总是将 transactionid 设为 0

下面是我需要通过它检索信用卡号码的代码。请建议这是不是检索信用卡详细信息的真实代码?

public class GetTransactionDetails
{
    public static ANetApiResponse Run(String ApiLoginID, String ApiTransactionKey, string transactionId)
  {
        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
        Console.WriteLine("Get transaction details sample");

      ApiOperationBase<ANetApiRequest, ANetApiResponse>.RunEnvironment = AuthorizeNet.Environment.SANDBOX;
      // define the merchant information (authentication / transaction id)
      ApiOperationBase<ANetApiRequest, ANetApiResponse>.MerchantAuthentication = new merchantAuthenticationType()
      {
          name = ApiLoginID,
          ItemElementName = ItemChoiceType.transactionKey,
          Item = ApiTransactionKey,
      };

      var request = new getTransactionDetailsRequest();
      request.transId = transactionId;

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

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

      if (response != null && response.messages.resultCode == messageTypeEnum.Ok)
      {
          if (response.transaction == null)
              return response;

          Console.WriteLine("Transaction Id: {0}", response.transaction.transId);
          Console.WriteLine("Transaction type: {0}", response.transaction.transactionType);
          Console.WriteLine("Transaction status: {0}", response.transaction.transactionStatus);
          Console.WriteLine("Transaction auth amount: {0}", response.transaction.authAmount);
          Console.WriteLine("Transaction settle amount: {0}", response.transaction.settleAmount);
      }
      else if (response != null)
      {
          Console.WriteLine("Error: " + response.messages.message[0].code + "  " +
                            response.messages.message[0].text);
      }

      return response;
   }
 }
}

在示例代码中,我在凭据下方传递

const string apiLoginId = "5KP3u95bQpv";
const string transactionKey = "346HZ32z3fP4hTG2";
const string transactionId = "2249735976";

我在哪里检索数据,如下图所示,但无法获取信用卡详细信息

我只想检索信用卡详细信息以进行授权。任何帮助

在我的代码中,我还添加了如下代码,但我收到错误

var obj = (creditCardMaskedType)response.transaction.payment.Item;
Console.WriteLine("Creditcard settle cardnumber: {0}", obj.cardNumber);

错误

附加信息:无法将“AuthorizeNet.Api.Contracts.V1.bankAccountMaskedType”类型的对象转换为“AuthorizeNet.Api.Contracts.V1.creditCardMaskedType”类型。

【问题讨论】:

  • 你不能得到值“0”吗?
  • @theMayer 请查看更新后的问题
  • @theMayer 有什么想法吗?
  • 不,我不确定您要做什么。您试图获得的东西似乎与您发布的代码完全不一致。
  • 您能否至少链接到您正在查看的示例 api 文档的部分?

标签: c# asp.net payment-gateway authorize.net


【解决方案1】:

信用卡的最后四位数字位于响应的transaction &gt; payment &gt; creditcard &gt; cardnumber 部分。您应该可以使用response.transaction.payment.creditCard.cardNumber 访问。

以下是来自getTransactionDetails API 调用的示例响应供您参考。这应该向您展示结构并更好地了解如何获取您想要的数据。

{  
   "transaction":{  
      "transId":"2162566217",
      "submitTimeUTC":"2011-09-01T16:30:49.39Z",
      "submitTimeLocal":"2011-09-01T10:30:49.39",
      "transactionType":"authCaptureTransaction",
      "transactionStatus":"settledSuccessfully",
      "responseCode":1,
      "responseReasonCode":1,
      "responseReasonDescription":"Approval",
      "authCode":"JPG9DJ",
      "AVSResponse":"Y",
      "batch":{  
         "batchId":"1221577",
         "settlementTimeUTC":"2011-09-01T16:38:54.52Z",
         "settlementTimeUTCSpecified":true,
         "settlementTimeLocal":"2011-09-01T10:38:54.52",
         "settlementTimeLocalSpecified":true,
         "settlementState":"settledSuccessfully"
      },
      "order":{  
         "invoiceNumber":"60",
         "description":"Auto-charge for Invoice #60"
      },
      "requestedAmountSpecified":false,
      "authAmount":1018.88,
      "settleAmount":1018.88,
      "prepaidBalanceRemainingSpecified":false,
      "taxExempt":false,
      "taxExemptSpecified":true,
      "payment":{  
         "creditCard":{  
            "cardNumber":"XXXX4444",
            "expirationDate":"XXXX",
            "cardType":"MasterCard"
         }
      },
      "customer":{  
         "typeSpecified":false,
         "id":"4"
      },
      "billTo":{  
         "phoneNumber":"(619) 274-0494",
         "firstName":"Matteo",
         "lastName":"Bignotti",
         "address":"625 Broadway\nSuite 1025",
         "city":"San Diego",
         "state":"CA",
         "zip":"92101",
         "country":"United States"
      },
      "recurringBilling":false,
      "recurringBillingSpecified":true,
      "product":"Card Not Present",
      "marketType":"eCommerce"
   },
   "messages":{  
      "resultCode":"Ok",
      "message":[  
         {  
            "code":"I00001",
            "text":"Successful."
         }
      ]
   }
}

【讨论】:

  • 这里你写了响应但是应该是什么请求?请求与我在问题中写的相同还是可能不同?
  • 您的请求已经正确,否则您将不会得到响应。
  • 我的交易状态显示为已拒绝,因此可能是因为交易 ID 不正确。正确的?我需要通过 livemode 凭证来检查实际细节。正确的?因为当我在测试模式下进行时,我总是收到交易 id 为 0
  • 您使用的是沙盒帐户吗?还是测试模式下的生产帐户?两者是有区别的。在沙箱中,您将在进行测试交易时获得交易 ID。
  • 我在沙盒中创建但始终能够检索到交易 id 为 0
猜你喜欢
  • 1970-01-01
  • 2013-01-20
  • 1970-01-01
  • 1970-01-01
  • 2016-11-17
  • 1970-01-01
  • 2014-05-12
  • 1970-01-01
  • 2012-01-13
相关资源
最近更新 更多