当前位置: 首页 > 知识库问答 >
问题:

通过授权使用银行账户。Net C#SDK

慕容光启
2023-03-14

在玩过游戏之后。Net CIM XML API C#示例代码,我开始使用授权。Net C#SDK。我能够使用CIM XML API示例代码将信用卡和银行账户添加到客户配置文件中。不过,我不知道如何使用SDK添加银行账户。

使用CIM XML API添加银行账户:

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

使用SDK,我只看到一个。AddCreditCard()方法,但无法添加银行帐户。当我循环查看我所有的PaymentProfiles时,遇到银行账户时也会抛出一个异常:

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

例外情况:

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

如何使用Authorize. Net C#SDK将银行账户添加到CIM配置文件中?

更新:

CIM可以存储银行账户信息的证明:

共有1个答案

乌和畅
2023-03-14

以下是经过测试的,但仅限于原始问题提出的内容(为我测试更多?),我使用提供的XML示例编写了它,并复制了AddCreditCard代码的代码。

完成所有更新后,以下代码将起作用:

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

首先,从下载API的C#源代码http://developer.authorize.net/downloads/.

在回顾代码时,我可以看到4个使用“信用卡类型”的文件,它们是订阅equest.cs、客户ateway.cs、支付rofile.cs和AnetApiSchema.cs(最后一个我们不必碰)。我们还需要注意“信用卡伪装类型”,它用于支付rofile.cs、Transaction.cs和AnetApiSchema.cs.这些文件出现的任何地方,我们都需要确保我们也支持银行账户等价物。

打开AuthorizeNET解决方案。我们将跳过上面列出的文件。

在CustomerGateway。cs添加以下代码块:

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

在PaymentP中rofile.cs添加一些公共属性

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

修改PaymentProfile(CusterPaymentProfileMaskedType apiType)构造函数的以下块:

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

将此块添加到PaymentProfile. ToAPI()方法:

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

将以下公共属性添加到SubscriptionRequest。反恐精英

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

如果将块TWICE添加到SubcriptionRequest,则添加以下其他内容。第一次是在ToAPI方法中,第二次是在ToUpdateableAPI方法中,在这两种情况下,它都在CC号空值检查之后。

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

将以下公共属性添加到Transaction.cs

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

交易中。cs在静态NewFromResponse(transactionDetailsType trans)方法中,找到检查trans的块。付款!=空并调整,如图所示:

        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;
            }
        }
 类似资料:
  • 我正在研究使用GMail API为我们的一个系统以编程方式发送电子邮件。我认为我需要创建一个服务帐户,然后将其设置为具有域范围的访问权限,以便授权发送电子邮件(因此电子邮件似乎来自实际用户,而不是我的程序)。我的问题是,如果我走这条路,有没有办法阻止某些用户,这样服务帐户就不能为他们“委派”?例如,我希望能够为我们的销售团队生成和发送电子邮件,但我不希望api能够为我们的高级管理人员生成任何电子邮

  • 我在项目中有以下课程: 账户 客户 名称:fName和lName(都是字符串字段) 日期:年、月、日(均为整数字段) 银行:包含账户收款 InputReader:从键盘读取输入 账户对象需要客户对象和期初余额。客户对象需要名称对象和日期对象。Name对象需要名字和姓氏的字符串我需要向用户询问创建Name和Date对象的详细信息,以及期初余额。 我必须通过从用户那里获取相关信息来创建一个新帐户,即它

  • 使用指南 - 账户管理 - 多账户关联 - 账户间授权有哪些限制 报告授权 百度统计客户版与站长版都有网站报告授权功能,可将本账户中的全部或部分报告授权给其他账户。 但是,由于站长账户中不存在消费维度,因此,无法接受推广账户的报告授权 即: 站长账户只能接受来自站长账户的网站报告授权,若推广账户授权网站报告给站长账户,站长版的用户将无法接受授权。 推广账户可以接受只能接受推广账户,或接受过本推广账

  • 我目前正在开发一个应用程序,用户A可以从用户B那里购买东西。 我想做的是让用户A用PayPal付款。然后在后端,我增加用户B在我的数据库中的帐户余额,然后允许用户B将这笔钱提取到他的银行帐户。这是我的问题,是否可以将钱从PayPal转移到各种银行账户?例如,用户B通过表单发送他的银行帐号,并在后端进行适当的API调用以转移资金。 如果没有使用PayPal,那么我如何执行这种类型的转移,可能是使用其

  • 介绍 除了内置的 用户认证 服务之外, Lumen 还提供了用户授权和资源访问控制的方案。有很多种方法与辅助函数能帮你处理授权逻辑。 总的来说,Lumen 中的使用和 Laravel 大同小异,我们会在这个文档中指出不同的地方,完整的用户授权文档还需要查阅 Laravel 授权文档 。 与 Laravel 的不同 定义权限 与 Laravel 相比,Lumen 的用户授权的不同之处在于如何定义权限

  • 技术栈在前端是reactJS,后端由APIGateway和Lambda供电。我正在使用Auth0作为我的react应用程序中的身份服务。通过Auth0提供的一个社交登录进行身份验证时,我会返回、和。此外,我可以使用获取用户信息,例如。现在,我需要保护/阻止对我的后端即APIGateway和lambda的访问。 有很多选项来保护对AWS APIGateway的访问,如IAM授权器、自定义授权器。有一