Authorized.net - createTransactionRequest可用于授权,捕获和取消现有付款配置文件ID的交易

时间:2016-11-11 09:48:23

标签: c# payment-gateway authorize.net

对于拥有现有付款资料ID(已保存的信用卡)的客户,我们正在使用" createCustomerProfileTransactionController"如下授权。

public createCustomerProfileTransactionResponse AuthorizePaymentProfile(int customerProfileId, int customerPaymentProfileId, decimal amount)
        {
            createCustomerProfileTransactionResponse response = null;

            ApiOperationBase<ANetApiRequest, ANetApiResponse>.RunEnvironment = environment;

            // define the merchant information (authentication / transaction id)
            ApiOperationBase<ANetApiRequest, ANetApiResponse>.MerchantAuthentication = new merchantAuthenticationType()
            {
                name = apiLoginID,
                ItemElementName = ItemChoiceType.transactionKey,
                Item = apiTransactionKey,
            };

            //construct request
            var request = new createCustomerProfileTransactionRequest
            {
                merchantAuthentication = new merchantAuthenticationType
                {
                    name = apiLoginID,
                    ItemElementName = ItemChoiceType.transactionKey,
                    Item = apiTransactionKey
                },
                transaction = new profileTransactionType
                {
                    Item = new profileTransAuthOnlyType
                    {
                        customerProfileId = customerProfileId.ToString(),
                        customerPaymentProfileId = customerPaymentProfileId.ToString(),
                        amount = amount
                    }
                },
                extraOptions = "x_duplicate_window=1"
            };

            //Prepare Request
            var controller = new createCustomerProfileTransactionController(request);
            controller.Execute();

            //Send Request to EndPoint
            response = controller.GetApiResponse();

            return response;

        }

对于没有现有付款资料ID的客户,我们使用&#34; createTransactionRequest&#34;如下授权。

public createTransactionResponse AuthorizeOneTimePayment(Card cardInfo, decimal amount)
        {
            createTransactionResponse response = null;
            ApiOperationBase<ANetApiRequest, ANetApiResponse>.RunEnvironment = environment;

            //define the merchant information (authentication / transaction id)
            ApiOperationBase<ANetApiRequest, ANetApiResponse>.MerchantAuthentication = new merchantAuthenticationType()
            {
                name = apiLoginID,
                ItemElementName = ItemChoiceType.transactionKey,
                Item = apiTransactionKey,
            };

            var creditCard = new creditCardType
            {
                cardNumber = cardInfo.CardNumber,// "4111111111111111",
                expirationDate = cardInfo.ExpirationDate// "0718"
                //cardCode=cardInfo.VerificationCode
            };

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

            string firstName = string.Empty;
            string lastName = string.Empty;

            if (!string.IsNullOrWhiteSpace(cardInfo.BillingName))
            {
                string[] name = GetBillName(cardInfo.BillingName);
                firstName = name[0];
                lastName = name[1];
            }

            var transactionRequest = new transactionRequestType
            {
                transactionType = transactionTypeEnum.authOnlyTransaction.ToString(), // authorize only
                amount = amount,
                payment = paymentType,
                billTo = new customerAddressType
                {
                    firstName = firstName,
                    lastName = lastName,
                    address = cardInfo.BillingAddress,
                    city = cardInfo.BillingCity,
                    state = cardInfo.BillingState,
                    zip = cardInfo.BillingZipCode
                }
            };

            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)
            response = controller.GetApiResponse();

            return response;

        }

遵循相同的捕获技术并使交易无效。

我的问题是我们可以使用&#34; createTransactionRequest&#34;对于所有交易,例如授权,捕获和取消具有付款配置文件ID和一次性客户的客户的交易。

我可以在authorize.net在线文档中找到任何线索。请指导我们如何做到这一点。

2 个答案:

答案 0 :(得分:1)

是的,您可以通过更改transactionRequestType和paymentType,将createTransactionRequest用于Auth / Capture,Auth Only,Prior Auth和Capture,Void和Refund。

答案 1 :(得分:0)

对于像我一样有相同问题的任何人,这就是答案。
请注意,Order是可选的,显然profile是可选的。

            ...
            var transactionRequest = new transactionRequestType {
                transactionType = transactionTypeEnum.authOnlyTransaction.ToString(),
                amount = amount,
                order = new orderType { invoiceNumber = OrderID, description = desc },
                profile = getCustomerPaymentProfile(CustomerProfileId, creditProfileID)
            };
            ...

    private customerProfilePaymentType getCustomerPaymentProfile(string CustomerProfileId, string creditProfileID) {
        return new customerProfilePaymentType {
            customerProfileId = CustomerProfileId,
            paymentProfile = new paymentProfile { paymentProfileId = creditProfileID }
        };
    }