我可以在.NET Web应用程序中使用Braintree.js吗?

所以我一直在调查Braintree Payments几天。 我喜欢这个架构,概念等。在浏览了文档和.NET演练之后,我注意到.NET的所有示例都在MVC3中。 我正在尝试使用常规Web表单将Braintree集成到我当前的.NET Web应用程序中。

我的目标是将正常的Web表单发回支付页面,同时包含客户数据和卡数据。 卡数据应使用他们的Braintree.js加密。 这样我就可以将所有内容发送到Braintree进行处理,包括加密的卡数据。

表单看起来像这样:

/

var braintree = Braintree.create("MyClientSideKey"); braintree.onSubmitEncryptForm('braintree-payment-form');

然后在代码隐藏中,我将设置Form.Action,Form.Method和Form.ID,如下所示:

 protected void Page_Load(object sender, EventArgs e) { Form.Action = "CreateTransaction()"; Form.Method = "POST"; Form.ID = "braintree-payment-form"; } 

因此,希望当用户提交表单时,它会点击“CreateTransaction()”成员以及“collection”参数中的加密卡数据,如下所示:

 [HttpPost] public ActionResult CreateTransaction(FormCollection collection) { TransactionRequest request = new TransactionRequest { Amount = 1000.0M, CreditCard = new TransactionCreditCardRequest { Number = collection["number"], CVV = collection["cvv"], ExpirationMonth = collection["month"], ExpirationYear = collection["year"] }, Options = new TransactionOptionsRequest { SubmitForSettlement = true } }; Result result = Constants.Gateway.Transaction.Sale(request); return null; } 

当我采用这种方法时,表单永远不会回发到“CreateTransaction()”成员。 我错过了什么? 可以使用常规的旧网页表单来完成吗?

好的,所以经过大量的实验和在黑暗中拍摄后,我能够得到这个Braintree.js来加密数据,然后再将它传递给我的服务器。 从那里我可以使用后面的代码来处理付款处理。

这是我正在使用的ASP.NET Web表单:

卡号

  

/

请注意以下几个关键细节:

  • 我正在使用服务器控件 。 不是简单的HTML标签。

  • braintree.js将加密具有“ data-encrypted-name ”属性的任何字段。

  • “data-encrypted-name”属性不需要与控件的ID属性相同。

  • braintree.js脚本发布到“ braintree-payment-form ”表单。

因此,当我单击“ 提交”按钮时,此表单将自然发回。 我正在使用的特定表单有一个母版页,所以我需要更改Page_Load中的Form.ID:

 protected void Page_Load(object sender, EventArgs e) { //Adjust the properties of the form itself as this //form has a master page. Form.ID = "braintree-payment-form"; //Wire up the click event btnSubmit.Click += btnSubmit_Click; } 

在click事件处理程序中,我可以从Request.Form对象中提取加密值,然后将事务请求提交给Braintree Gateway:

 void btnSubmit_Click(object sender, EventArgs e) { //-------------------------------------------------------------------------------------------------- //Extract encrypted values from the Request.Form object //braintree.js has encrypted these values before placing them in //the Request object. //-------------------------------------------------------------------------------------------------- string number = Request.Form["number"].ToString(); string cvv = Request.Form["cvv"].ToString(); string month = Request.Form["month"].ToString(); string year = Request.Form["year"].ToString(); //-------------------------------------------------------------------------------------------------- //Gateway //This is the Braintree Gateway that we will use to post the transaction //to. This is included here in the example but should be extracted out //into some static class somewhere. Possibly in another layer. //-------------------------------------------------------------------------------------------------- BraintreeGateway Gateway = new BraintreeGateway { Environment = Braintree.Environment.SANDBOX, PublicKey = "YOURPUBLICKEYHERE", PrivateKey = "YOURPRIVATEKEYHERE", MerchantId = "YOURMERCHANTIDHERE" }; //-------------------------------------------------------------------------------------------------- //Transaction Request //This is the actual transaction request that we are posting to the //Braintree gateway. The values for number, cvv, month and year have //been encrypted above using the braintree.js. If you were to put a //watch on the actual server controls their ".Text" property is blank //at this point in the process. //-------------------------------------------------------------------------------------------------- TransactionRequest transactionRequest = new TransactionRequest { Amount = 100.00M, CreditCard = new TransactionCreditCardRequest { Number = number, CVV = cvv, ExpirationMonth = month, ExpirationYear = year, } }; //-------------------------------------------------------------------------------------------------- //Transaction Result //Here we are going to post our information, including the encrypted //values to Braintree. //-------------------------------------------------------------------------------------------------- Result result = Gateway.Transaction.Sale(transactionRequest); } 

好的,这是如何将事务发布到Braintree的一个非常基本的例子。 然而,它解决了我获得卡数据到达我的服务器之前加密的第一大障碍。 希望这可以帮助…