そこで、ここ数日、Braintree Payments について調べてきました。私はアーキテクチャ、コンセプトなどが気に入っています。ドキュメントと .NET ウォークスルーに目を通した後、.NET の例はすべて MVC3 にあることに気付きました。通常の Web フォームを使用して、Braintree を現在の .NET Web アプリケーションに統合しようとしています。
私の目標は、顧客データとカード データの両方を使用して、通常の 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";
}
したがって、うまくいけば、ユーザーがフォームを送信すると、次のように「collection」パラメーター内の暗号化されたカード データとともに「CreateTransaction()」メンバーにヒットします。
[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 フォームを使用して実行できますか?