29 votes

Utilisation de comptes bancaires avec SDK Authorize.Net C #

Après avoir joué avec les Authorize.Net CIM API XML exemple de code C# , j'ai commencé à utiliser le Authorize.Net C# SDK. Je suis en mesure d'ajouter des cartes de crédit et comptes bancaires à des profils de clients à l'aide de la CIM API XML exemple de code. Je ne vois pas comment ajouter des comptes bancaires à l'aide du SDK si.

L'ajout de compte bancaire avec CIM API XML:

...
customerPaymentProfileType new_payment_profile = new customerPaymentProfileType();
paymentType new_payment = new paymentType();

bankAccountType new_bank = new bankAccountType();
new_bank.nameOnAccount = "xyz";
new_bank.accountNumber = "4111111";
new_bank.routingNumber = "325070760";
new_payment.Item = new_bank;

new_payment_profile.payment = new_payment;

createCustomerPaymentProfileRequest request = new createCustomerPaymentProfileRequest();
XmlAPIUtilities.PopulateMerchantAuthentication((ANetApiRequest)request);

request.customerProfileId = profile_id.ToString();
request.paymentProfile = new_payment_profile;
request.validationMode = validationModeEnum.testMode;
...

En utilisant le SDK, je ne vois qu'un .AddCreditCard() méthode, mais pas moyen d'ajouter un compte en banque. Quand je boucle à travers tous mes PaymentProfiles Il déclenche une exception quand il s'agit à travers un compte en banque trop:

CustomerGateway cg = new CustomerGateway("xxx", "yyy");

foreach (string cid in cg.GetCustomerIDs())
{
    Customer c = cg.GetCustomer(cid);
    foreach (PaymentProfile pp in c.PaymentProfiles)
    {
        Console.WriteLine(pp.ToString());
    }
}

Exception:

Unable to cast object of type 'AuthorizeNet.APICore.bankAccountMaskedType' to type 'AuthorizeNet.APICore.creditCardMaskedType'.

enter image description here

Comment puis-je ajouter un compte de banque pour un CIM profil à l'aide de la Authorize.Net C# SDK?

Mise à jour:

La preuve que l'ICM peut stocker des informations de compte bancaire:

enter image description here

9voto

Peter Points 5535

Ce qui suit est testé, mais seulement dans la mesure de ce que la question de départ élevés (Test de plus pour moi?), Je l'ai écrit en utilisant l'exemple de XML et en copiant le code de la AddCreditCard code.

Lorsque vous êtes tous fait la mise à jour, le code suivant fonctionne:

        var cg = new CustomerGateway("login", "transkey", ServiceMode.Test);
        var c = cg.CreateCustomer("peter@example.com", "test customer");
        //just to show that we didn't break CC
        cg.AddCreditCard(c.ProfileID, "cc#", 07, 2011);
        cg.AddBankAccount(c.ProfileID, "Peter", "bankaccoung#", "routing#");
        //tostring doesn't actually do much... but if you break on it you can see the details for both the CC and the bank info.
        foreach (PaymentProfile pp in cg.GetCustomer(c.ProfileID).PaymentProfiles)
        {
            Console.WriteLine(pp.ToString());
        }

Tout d'abord, téléchargez le code source C# pour l'API à partir d' http://developer.authorize.net/downloads/.

En examinant le code, je peux voir les 4 fichiers qui utilisent des "creditCardType", ce sont SubscriptionRequest.cs, CustomerGateway.cs, PaymentProfile.cs et AnetApiSchema.cs (cette dernière nous n'avons pas à toucher). Nous avons également besoin de regarder dehors pour 'creditCardMaskedType", qui est utilisé dans PaymentProfile.cs, d'une Transaction.cs et AnetApiSchema.cs. Tout placer ces fichiers présentent, nous devons nous assurer de l'appui de la comptebancaire equivelants ainsi.

Ouvrez le AuthorizeNET solution. Nous allons faire des sauts un peu dans les fichiers répertoriés ci-dessus.

Dans CustomerGateway.cs ajouter le bloc de code suivant:

    /// <summary>
    /// Adds a bank account profile to the user and returns the profile ID
    /// </summary>
    /// <returns></returns>
    public string AddBankAccount(string profileID, string nameOnAccount, string accountNumber, string routingNumber)
    {
        var req = new createCustomerPaymentProfileRequest();
        req.customerProfileId = profileID;
        req.paymentProfile = new customerPaymentProfileType();
        req.paymentProfile.payment = new paymentType();

        bankAccountType new_bank = new bankAccountType();
        new_bank.nameOnAccount = nameOnAccount;
        new_bank.accountNumber = accountNumber;
        new_bank.routingNumber = routingNumber;

        req.paymentProfile.payment.Item = new_bank;

        var response = (createCustomerPaymentProfileResponse)_gateway.Send(req);

        return response.customerPaymentProfileId;
    }

Dans PaymentProfile.cs ajouter quelques propriétés publiques

    public string BankNameOnAccount {get; set; }
    public string BankAccountNumber { get; set; }
    public string BankRoutingNumber { get; set; }

Modifier le bloc suivant de l' PaymentProfile(customerPaymentProfileMaskedType apiType) constructeur de:

        if (apiType.payment != null) {
            if(apiType.payment.Item is bankAccountMaskedType) {
                var bankAccount = (bankAccountMaskedType)apiType.payment.Item;
                this.BankNameOnAccount = bankAccount.nameOnAccount;
                this.BankAccountNumber = bankAccount.accountNumber;
                this.BankRoutingNumber = bankAccount.routingNumber;
            }
            else if (apiType.payment.Item is creditCardMaskedType)
            {
                var card = (creditCardMaskedType)apiType.payment.Item;
                this.CardType = card.cardType;
                this.CardNumber = card.cardNumber;
                this.CardExpiration = card.expirationDate;
            }
        }

Ajouter ce bloc à l' PaymentProfile.ToAPI() méthode:

        if (!string.IsNullOrEmpty(this.BankAccountNumber))
        {
            bankAccountType new_bank = new bankAccountType();
            new_bank.nameOnAccount = BankNameOnAccount;
            new_bank.accountNumber = BankAccountNumber;
            new_bank.routingNumber = BankRoutingNumber;

            result.payment.Item = new_bank;
        }

Ajouter le suivant propriétés publiques à SubscriptionRequest.cs > SubscriptionRequest classe (autour de la ligne 187)

    public string BankNameOnAccount {get; set; }
    public string BankAccountNumber { get; set; }
    public string BankRoutingNumber { get; set; }

Ajouter les éléments suivants à l'autre, s'bloc deux fois à SubscriptionRequest. La première fois, c'est dans le ToAPI méthode, la deuxième est dans le ToUpdateableAPI méthode, dans les deux cas, il va après le numéro de CC null vérifier.

        else if (!String.IsNullOrEmpty(this.BankAccountNumber))
        {
            bankAccountType new_bank = new bankAccountType();
            new_bank.nameOnAccount = BankNameOnAccount;
            new_bank.accountNumber = BankAccountNumber;
            new_bank.routingNumber = BankRoutingNumber;

            sub.payment = new paymentType();
            sub.payment.Item = new_bank;
        }

Ajouter le suivant propriétés publiques de l'Opération.cs

    public string BankNameOnAccount { get; set; }
    public string BankAccountNumber { get; set; }
    public string BankRoutingNumber { get; set; }

Dans La Transaction.cs dans le statique NewFromResponse(transactionDetailsType trans) de la méthode, de trouver le bloc qui vérifie trans.payment != null et de modifier comme ci-dessous:

        if (trans.payment != null) {
            if (trans.payment.Item.GetType() == typeof(creditCardMaskedType))
            {
                var cc = (creditCardMaskedType)trans.payment.Item;
                result.CardNumber = cc.cardNumber;
                result.CardExpiration = cc.expirationDate;
                result.CardType = cc.cardType;
            } 
            else if (trans.payment.Item.GetType() == typeof(bankAccountMaskedType))
            {
                var bankAccount = (bankAccountMaskedType)trans.payment.Item;
                result.BankNameOnAccount = bankAccount.nameOnAccount;
                result.BankAccountNumber = bankAccount.accountNumber;
                result.BankRoutingNumber = bankAccount.routingNumber;
            }
        }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X