所以我这几天一直在研究 Braintree Payments。我喜欢架构、概念等。在查看文档和 .NET 演练之后,我注意到 .NET 的所有示例都在 MVC3 中。我正在尝试使用常规 Web 表单将 Braintree 集成到我当前的 .NET Web 应用程序中。
我的目标是让一个正常的网络表单返回到付款页面,其中包含客户数据和卡数据。卡片数据应该使用他们的 Braintree.js 加密。这样我就可以将所有内容发送到 Braintree 进行处理,包括加密的卡数据。
表单看起来像这样:
<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 表单来完成吗?