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:
可以添加邮箱 权限