我已经研究了几天Braintree支付。我很喜欢它的架构,概念等。但是在阅读文档和.Net Walk-throughs之后,我发现所有针对.Net的示例都是在MVC3中展示的。我正在尝试使用普通网页表单将Braintree集成到我的当前.Net Web应用程序中。
我的目标是将普通网页表单发送回带有客户数据和卡片数据的付款页面。卡片数据应该使用他们的Braintree.js进行加密。这样我就可以将包括加密的卡片数据在内的一切内容发送给Braintree进行处理。表单看起来会像这样:
希望当用户提交表单时,它会触发 "CreateTransaction()" 成员方法,并将加密的卡片数据作为 "collection" 参数一起传递,如下所示:
<p>
<label>Card Number</label>
<asp:TextBox ID="number" AutoCompleteType="Disabled" MaxLength="20" Width="150" data-encrypted-name="number" runat="server" />
</p>
<p>
<label>CVV</label>
<asp:TextBox ID="cvv" AutoCompleteType="Disabled" MaxLength="4" Width="50" data-encrypted-name="cvv" runat="server" />
</p>
<p>
<label>Expiration (MM/YYYY)</label>
<asp:TextBox ID="month" AutoCompleteType="Disabled" MaxLength="2" data-encrypted-name="month" runat="server" />
/
<asp:TextBox ID="year" AutoCompleteType="Disabled" MaxLength="4" data-encrypted-name="year" runat="server" />
</p>
<asp:Button ID="btnSubmit" Text="SUBMIT" runat="server" />
<script type="text/javascript" src="https://js.braintreegateway.com/v1/braintree.js"></script>
<script type="text/javascript">
var braintree = Braintree.create("MyClientSideKey");
braintree.onSubmitEncryptForm('braintree-payment-form');
</script>
然后在代码后台,我将设置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<Transaction> result = Constants.Gateway.Transaction.Sale(request);
return null;
}
当我采用这种方法时,表单永远不会回传到“CreateTransaction()”成员。我漏掉了什么?这可以使用常规的Web表单完成吗?