BrainTree是一个国外集成信用卡支付的卡包。

沙盒登陆地址:

https://sandbox.braintreegateway.com/login

登陆沙盒得到商户ID、公钥、私钥。

1.配置web.config

<BraintreeSection>

                <BraintreeAuthentication

                    Environment="SANDBOX" //生产环境为PRODUCT

                    MerchantId="bnnvkfgf3crhvbcs"

                    PublicKey="rp28gffvwtj7gygz"

                    PrivateKey="906d2077d76e81f90b51c3b409682815">

                </BraintreeAuthentication>

</BraintreeSection>

2.引入Braintree.dll

3.引入Braintree.js

4.配置Braintree证书

var gateway = new BraintreeGateway

            {

                Environment = Braintree.Environment.SANDBOX;  //沙盒

                MerchantId = config.MerchantId,

                PublicKey = config.PublicKey,

                PrivateKey = config.PrivateKey

            };

5.  作为客户将客户Id及信息保存在Braintree中。

private string getCustomerId()

        {

            string customerId = "customer_" + CurrentUserId;

            try

            {

                var customer = getGateway().Customer.Find(customerId); //查找该客户的所有信息

                if (customer != null)

                {

                    return customer.Id;

                }

            }

            catch

            {

                //没找到则添加

                var model = UserDataService.GetUserInfo(CurrentUserId);

                var request = new CustomerRequest

                {

                    Id = "customer_" + CurrentUserId,

                    FirstName = model.FirstName,

                    LastName = model.LastName,

                    Email = model.Email,

                    Phone = model.CellPhone,

                    Company = model.BusinessName

                };

                Result<Customer> result = getGateway().Customer.Create(request); //创建客户

                if (result.IsSuccess())

                {

                    return result.Target.Id;

                }

            }

            return null;

        }

6.  获得该客户的所有信用卡信息。

var customer = getGateway().Customer.Find(customerId);

                if (customer.CreditCards != null)//信用卡部分

                {

                    return Json(new { result = true, data = customer.CreditCards.Select(c => new { Token = c.Token, MaskedNumber = c.MaskedNumber, CardType = c.CardType.ToString(), IsDefault = c.IsDefault, ImageUrl = c.ImageUrl }) }); //token支付用的凭证,MaskedNumber卡号,CardType 卡类型,IsDefault 默认卡,ImageUrl 图片路径

        }

1.2信用卡验证

1.Braintree介入方式(1。Dropin 2。custom) 前者使用现成的框架,后者自定义框架(意味着卡的验证也要自己)

2.Dropin显示方法:

<form id="CreditCards-form" method="post" action="/Braintree/AddPaymentMenthod">

            <div id="payment-form"></div>

            <div id="show" style="display:none">

                <input type="checkbox" id="default" name="default" checked="checked" value="true" /> Set As Default

                <div style="text-align:center">

                    <input type='submit' id="btnAddCreditCard" value='Add Credit Cards'/>

                </div>

            </div>

        </form>

默认只有卡号,年月日输入框,自动根据卡号验证卡的类型,CVV AVS 需要在控制面板开启,设为默认是自己后加的。

PayPal按钮需要线上关闭,沙盒无法关闭。

设置方法:

一些其他支付方式的支持,卡类型的支持均在此处设置。

调用braintree封装好的方法显示该UI。首先需要取得客户端Token:

var clientToken = getGateway().ClientToken.generate();

得到客户端令牌后就可以调用js方法展示该UI了

                    braintree.setup(data, "dropin", {

                        container: "payment-form",

                        form: "CreditCards-form",

                        onReady: function () {

                            $("#ts").hide();

                            $("#show").show();

                        }

                    });

1.3:添加一张信用卡:

创建的ui自动会生成一个付款方式随机数,该随机数包含信用卡的卡号、卡类型、有效期以及我们设置的CVV。

payment_method_nonce

为客户添加信用卡

var request = new PaymentMethodRequest

                {

                    CustomerId = customerId,

                    PaymentMethodNonce = payment_method_nonce,

                    Options = new PaymentMethodOptionsRequest

                    {

                        VerifyCard = true, //卡验证

                        FailOnDuplicatePaymentMethod = true //拒绝重复添加

                    }

                };

                Result<PaymentMethod> result = getGateway().PaymentMethod.Create(request);

                if (result.IsSuccess())

                {

    }

IsSuccess为成功状态。添加信用卡时可以设置对卡片进行有效性验证,以及不可以重复添加等。

1.4:删除一张信用卡:

var result = getGateway().PaymentMethod.Delete(token); //token为信用卡支付以及删除的唯一标识。

删除信用卡后,自动将下一张设为默认卡。

1.5:设为默认:

var updateRequest = new PaymentMethodRequest

                {

                    Options = new PaymentMethodOptionsRequest

                    {

                        MakeDefault = true, //默认

                    }

                };

                Result<PaymentMethod> result = getGateway().PaymentMethod.Update(token, updateRequest);

                if (result.IsSuccess())

                {

                    return Json(new { result = true });

                }

只需要设置MakeDefault为true即可。

2.1:支付方式新增信用卡支付:

调用Braintree的消费方法

var request = new TransactionRequest

                {

                    Amount = amount,

                    PaymentMethodToken = token,

                    Options = new TransactionOptionsRequest

                    {

                        SubmitForSettlement = true

                    }

                };

                Result<Transaction> result = getGateway().Transaction.Sale(request); //支付

                var payResult = PayStatus.WaitingForPayment;

                var message = "";

                if (result.Target != null)

                {

                    message = result.Target.ProcessorResponseText;//错误 Message

                }

                else if (result.Message != null)

                {

                    message = result.Message;

                }

                if (result.IsSuccess())

                {

                    UpdatePaymentMenthod(token);

                    payResult = PayStatus.PaymentSuccess;

                }

                else

                {

                    payResult = PayStatus.PaymentFailed;

}

如果支付成功,则修改当前方式为默认付款方式。

如果PayEnd异常则立即取消这笔信用卡消费,调用transaction的void方法。 稍后说明void方法与refund方法区别

Void方法调用时也需要Begin  中间void  结束 End 证明一笔交易。

Result<Transaction> result = getGateway().Transaction.Void(transactionId);

关于退款:

部分退款时调用refund方法,但是需要检测信用卡状态,如果信用卡状态为:SUBMITTED_FOR_SETTLEMENT或AUTHORIZED只可以使用void方法取消整笔订单,如果是SETTLED或SETTLING 则使用refund方法进行部分退款。

getGateway().Transaction.Refund(transactionId, amount); 如果不传钱 则全部退款

一、BrainTree后台操作说明

3.1:控制面板管理Dashboard:

介绍了两种集成方式,以及近期收入的统计。

3.2:交易信息管理Transactions:

按检索条件检索数据

Sale为消费,Submitted For Settlement 为刚提交的交易,Voided为已取消的交易。Credit为已退款的交易,Settled 为已完结的交易。

点击交易号ID 可以对交易进行操作:Submitted For Settlement的则可以Void 取消交易操作,Settled则可以refund部分退款操作。

3.3:信用卡验证管理Verifications:

添加信用卡的时候对信用卡的有效进行验证,花1美金,看支付状态。点击可以查看该验证的详细信息。

3.4:保险库管理Vault:

所有保存在Braintree中的客户信息,以及该客户的所有信用卡,所有的交易等。

3.5:订阅服务管理Subscription:

订阅服务

3.6:创建交易New Transaction:

创建一笔新的交易,可以指定某个客户或 输入卡进行付款。

3.7:交易统计  Transaction Summary:

对卡的类型进行消费退款等统计。

3.7: 支出汇总 Disbursement summary:

按月份对每种卡进行支出汇总

3.8: 争议 Disputes:

已完结汇总

3.9: 创建新的客户 New Customer:

创建新的客户

3.10: 即将到期的卡 Expiring Cards:

即将过期的信用卡。

3.11: 导出客户信息 Export Customers:

导出客户资料,以及信用卡信息等。

3.12: 计划 Plans:

定期每月使用某卡付款的功能,我们没开发这个功能。

3.13: 附加/折扣 add-ons / discounts:

附加费或打折设置,每次交易时的附加费,或者享受的折扣。

3.14: 邮件通知 Email Notifications:

定期邮件通知

四: 设置 Settings:

4.1: 处理选项 Processing:

这些设置可能无法立即生效,可能需要几分钟。

Duplicate Transaction Checking 重复交易检查

Accept Paypal 使用PayPal

Accept Venmo 使用Venmo

Accept Apple Pay 使用Apple Pay

Accept Android Pay 使用Android Pay

Venmo Touch 让你的账户支持其他商家中的信用卡

AVS 开启AVS验证

cvv 开启CVV验证

Risk ThreSholds 风险控制

Advanced Credit Fraud Tools  信用卡诈骗工具

Card Verification 信用卡验证 开启后会对信用卡进行有效性验证,支付0~1之间的美金,如果通过则会存储在保险库中,否则不会保存。

Card Verification – Retry All Failed $0  重试所有验证失败的

Display Additional Processor Response 当处理器拒绝时显示拒绝原因, 无论是否设置总是显示拒绝原因。

Dispute Notifications 争议通知 产生争议时会发送邮件到一个邮箱,一批通知每天一次

Transaction lssue Notifications 交易问题的通知邮箱

Custom Fields 自定义字段

Email Receipts  Email收据

Recurring Billing 周期性结算

4.2: 安全选项 Security Options:

限制ip访问

4.3: 用户权限 User and Roles:

可以添加邮箱 权限

BrainTree信用卡包的更多相关文章

  1. Paypal、Stripe、Braintree,跨境电商金流第三方支付该用哪家?

    在台湾做跨境电子商务生意,电商网站的金流肯定是一个最大的麻烦,Paypal或是Stripe和Braintree则是国际上大家最常用的金流整合第三方支付服务商.这些金流服务大幅简化网站付费过程,都让消费 ...

  2. iOS 资源大全

    这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...

  3. Webhooks PHP

    Webhooks/Parse When webhooks are triggered in the gateway, a notification is sent as a POST request ...

  4. IOS中文版资源库

    Swift 语言写成的项目会被标记为  ★ ,AppleWatch 的项目则会被标记为 ▲. [转自]https://github.com/jobbole/awesome-ios-cn#librari ...

  5. 采访ServiceStack的项目领导Demis Bellot——第2部分(转)

    ServiceStack是一个开源的.支持.NET与Mono平台的REST Web Services框架.InfoQ有幸与Demis Bellot深入地讨论了这个项目.在这篇两部分报道的第2部分中,我 ...

  6. 人们对Python在企业级开发中的10大误解

    From : 人们对Python在企业级开发中的10大误解 在PayPal的编程文化中存在着大量的语言多元化.除了长期流行的C++和Java,越来越多的团队选择JavaScript和Scala,Bra ...

  7. webapp构建工具库

    Meteor:JavaScript App Platform braintree:在线支付 jquery datetimepicker:日期控件 Hotjar Tracking Code:网站追踪 Z ...

  8. 墙裂推荐 iOS 资源大全

    这是个精心编排的列表,它包含了优秀的 iOS 框架.库.教程.XCode 插件.组件等等. 这个列表分为以下几个部分:框架( Frameworks ).组件( Components ).测试( Tes ...

  9. Magento 编译 php5.6.21 命令

    ./configure  '--prefix=/alidata/server/php' '--enable-opcache' '--with-config-file-path=/alidata/ser ...

随机推荐

  1. [LeetCode] 306. Additive Number [Medium]

    306. Additive Number class Solution { private: string stringAddition(string &a, string &b) { ...

  2. ASP.NET MVC4 UEditor 的上传图片配置路径

    ASP.NET MV4下,使用UEditor1.4.3最新版本,网址就不说了,去百度官网下载即可,关于在Controler下如何配置,直接上图: 然后再Views下面来个页面引用如下:     < ...

  3. Cookies和Session理论总结

    今天主要学习了Cookies和Session,网络上关于这方面的知识可谓很多,让人眼花缭乱,在此作一个小结.本文不讲多,不讲什么高大上的,只是抛出一块砖,讲三个问题:①什么是Cookies和Sessi ...

  4. UNion ALL 和 UNION 的区别

    UNION: 指定合并多个结果集并将其作为单个结果集返回.ALL: 将全部行并入结果中.其中包括重复行.如果未指定该参数,则删除重复行.

  5. An exception occurred during configuration of persistence layer.

    配置文件放在bin文件夹下(注意:hibernate.cfg.xml文件名不要随便改动)

  6. apache的FileUtils方法大全

    FileUtils 获取系统的临时目录路径:getTempDirectoryPath() [java] view plaincopyprint? public static String getTem ...

  7. PHP中zlib扩展实现GZIP压缩输出各种方法总结

    一般情况下我们出现大量数据传输理希望减少服务器的带宽压力,会采取一种方式来压缩文件传输,php中用zlib也可以实现gzip压缩输出,下面我们来看GZIP压缩输出各种方法总结. GZIP(GNU-ZI ...

  8. zoj 3819 Average Score

    Average Score Time Limit: 2 Seconds      Memory Limit: 65536 KB Bob is a freshman in Marjar Universi ...

  9. java的主函数中各个词的作用

    主函数 public static void main(String[] args){} public: main主方法是由jvm(虚拟机)来调用,jvm实际也是一程序,为了保证jvm能在任何情况下调 ...

  10. web前端开源小案例:立方体旋转

    HTML部分: <body class="body"> <div class="rect-wrap">   <!-- //舞台元素 ...