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;
}
}