
рддреЛ, рдпрд╣ рд╕рдм рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рд╣реБрдЖ рдХрд┐ рдХрд╛рдо рдкрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП
рдмреНрд░реЗрдирдЯреНрд░реА рднреБрдЧрддрд╛рди рдкреНрд░рдгрд╛рд▓реА рдХреЛ
рддреЗрдЬ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛ред рд░реВрд╕реА-рднрд╛рд╖рд╛ рд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдореБрдЭреЗ рдЗрд╕реЗ рд╕реНрд╡рдпрдВ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реЛрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдмреНрд░реЗрдирдЯреНрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВред рд╕рд┐рд╕реНрдЯрдо рдХреНрд░реЗрдбрд┐рдЯ рдХрд╛рд░реНрдб рджреНрд╡рд╛рд░рд╛ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рднреБрдЧрддрд╛рди рдХреЗ рд▓рд┐рдП рдЕрднрд┐рдкреНрд░реЗрдд рд╣реИред
рдПрдХрд▓ рднреБрдЧрддрд╛рди рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ, рд╕рд╛рде рд╣реА рдЖрд╡рд░реНрддреА рднреБрдЧрддрд╛рди (рд╕рджрд╕реНрдпрддрд╛)ред
рдмреНрд░реЗрдирдЯреНрд░реА рд╡реЗрдмрд╕рд╛рдЗрдЯ рдкрд░ рдПрдХ рдбреЗрд╡рд▓рдкрд░реНрд╕ рд╕реЗрдХреНрд╢рди рд╣реИред рд╡рд╣рд╛рдВ, рд╡рд┐рднрд┐рдиреНрди рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреА рд╕рд╛рдЗрдЯ рдкрд░ рднреБрдЧрддрд╛рди рд╢реБрд░реВ рдХрд░рдиреЗ рдФрд░ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд╛рдлреА рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ:
- рдЧрд╣рд░реЗ рд▓рд╛рд▓ рд░рдВрдЧ рдХрд╛
- рдкрд░реНрд▓
- рдЕрдЬрдЧрд░
- рдЬрд╛рд╡рд╛
- рдкреАрдПрдЪрдкреА
- Microsoft .NET
- рдиреЛрдб рдЬреЗрдПрд╕
рд╕рд╛рде рд╣реА, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕реИрдВрдбрдмреЙрдХреНрд╕ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред
рд╕реБрд░рдХреНрд╖рд╛
рдХреНрд▓рд╛рдЗрдВрдЯ рдкрдХреНрд╖ рдкрд░ рдХрд╛рд░реНрдб рдирдВрдмрд░ рдФрд░ рд╕реАрд╡реАрд╡реА рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ ред рдЕрдЧрд▓рд╛, рдкреНрд░рдкрддреНрд░ рд╕реЗ рдбреЗрдЯрд╛ рдЖрдкрдХреЗ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмреНрд░реЗрдирдЯреНрд░реА рд╕рд░реНрд╡рд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рдмреНрд░реЗрдирдЯреНрд░реА рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рднреЗрдЬрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ: рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХрдирд╛, рд╕рджрд╕реНрдпрддрд╛, рдФрд░ рдмрд╣реБрдд рдХреБрдЫред

рдореИрдВ рдПрдорд╡реАрд╕реА 4 рд╕рд╛рдЗрдЯ рдкрд░ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдирдИ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВред (рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдкрдВрдЬреАрдХреГрдд рд╣реИ, рдпрд╣ рдЗрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ)ред
рдПрдХ рдмрд╛рд░ рдХрд╛ рднреБрдЧрддрд╛рди
рдмреНрд░реЗрдирдЯреНрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЗрд╕рдХреЗ рдмрд╛рдж, рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдХреЗ рд╕рд╛рде рдмреНрд░реЗрдирдЯреНрд░реА рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рдЕрдкрдиреА рднрд╛рд╖рд╛ (рд╣рдорд╛рд░реЗ рдкрд╛рд╕ .Net) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рдХреЙрдкреА рдХрд░реЗрдВред

рдирд┐рдпрдВрддреНрд░рдХ рдХреЗ рдЕрдВрджрд░, рдПрдХ рд╕реНрдерд┐рд░ рдЪрд░ рдмрдирд╛рдПрдБред
public static BraintreeGateway Gateway = new BraintreeGateway { Environment = Braintree.Environment.SANDBOX, PublicKey = "your_public_key", PrivateKey = "your_private_key", MerchantId = "your_merchant_id" };
рдЙрд╕реА рд╕рдордп, рдмреНрд░реЗрдирдЯреНрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордд рднреВрд▓рдирд╛ред
using Braintree;
рдЕрдм рдЖрдкрдХреЛ рдПрдХ рдкреЗрдЬ рдмрдирд╛рдиреЗ рдФрд░ рдлреЙрд░реНрдо рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
<h1>Braintree Credit Card Transaction Form</h1> <div> <form action="@Url.Action("CreateTransaction")" method="POST" id="braintree-payment-form"> <p> <label>Card Number</label> <input type="text" size="20" autocomplete="off" data-encrypted-name="number" /> </p> <p> <label>CVV</label> <input type="text" size="4" autocomplete="off" data-encrypted-name="cvv" /> </p> <p> <label>Expiration (MM/YYYY)</label> <input type="text" size="2" name="month" /> / <input type="text" size="4" name="year" /> </p> <input type="submit" id="submit" /> </form> </div>
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрд╛рд░реНрдб рдирдВрдмрд░ рдФрд░ cvv рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ Braintree.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдХреБрдВрдЬреА рдмреНрд░реЗрдирдЯреНрд░реА рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛ рд╕рдХрддреА рд╣реИред
<script type="text/javascript" src="https://js.braintreegateway.com/v1/braintree.js"></script> <script type="text/javascript"> var braintree = Braintree.create("YourClientSideEncryptionKey"); braintree.onSubmitEncryptForm('braintree-payment-form'); </script>
рдЕрдм рд╕рд░реНрд╡рд░ рдкрд░ рдЖрдкрдХреЛ рдЗрд╕ рдлреЙрд░реНрдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
[HttpPost] public ActionResult CreateTransaction(FormCollection collection) { TransactionRequest request = new TransactionRequest { Amount = 1000.0M,
рдФрд░ рд▓реЗрдирджреЗрди рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреЗрдЬ рднреА рдмрдирд╛рдПрдВред
@if (ViewData.ContainsKey("TransactionId")) { <h2>Success! Transaction ID: @ViewData["TransactionId"]</h2> } else { <h2>Error: @ViewData["Message"]</h2> }
рдЙрд╕рдХреЗ рдмрд╛рдж, рдЖрдк рд╣рдорд╛рд░реЗ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдкрд░реАрдХреНрд╖рдг рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП, рд╣рдо рдХрд╛рд░реНрдб рд╕рдВрдЦреНрдпрд╛ "4111111111111111" рдФрд░ cvv "111" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓реА рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рдЖрдк рдХрд╛рд░реНрдб рддрд┐рдерд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рд╕реА рднреА рдорд╛рдиреНрдп рддрд┐рдерд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрд╡рд░реНрддреА рднреБрдЧрддрд╛рди
рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдмреНрд░реЗрдирдЯреНрд░реА рдХрдВрдЯреНрд░реЛрд▓ рдкреИрдирд▓ рдореЗрдВ рдПрдХ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдкреНрд▓рд╛рди (рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рд╡рд┐рдХрд▓реНрдк рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реЛ рддреЛ) рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╛рдПрдБ рдлрд▓рдХ рдореЗрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдмрд┐рд▓рд┐рдВрдЧ> рдпреЛрдЬрдирд╛рдУрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред рдЕрдЧрд▓рд╛, рдПрдХ рдирдИ рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдБ:

рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрд╕рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рдг рдЕрд╡рдзрд┐ рдЬреЛрдбрд╝реЗрдВ:

рдФрд░ рднреБрдЧрддрд╛рди рдЪрдХреНрд░ рдХреА рдЕрд╡рдзрд┐ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдХреА рдЕрд╡рдзрд┐ рднреА рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ:

рдЕрдм рдХрд╛рд░реНрдб рдФрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдмрд░ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдЬ рдмрдирд╛рдПрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдо рдПрдХ рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛рддреЗ рд╣реИрдВред рдлреЙрд░реНрдо рдореЗрдВрдбрд▓ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рд░реНрдб рдирдВрдмрд░ рдФрд░ cvv рдХреЗ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреЛ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВред
<h1>Braintreegateway recurring billing</h1> <div id="braintreegateway-div-net"> <h3>Braintree Credit Card Transaction Form</h3> <div> <form action="@Url.Action("CreateCustomer")" method="POST" id="braintree-payment-form1"> <p> <label>First name</label> <input type="text" data-encrypted-name="first_name" /> </p> <p> <label>Last name</label> <input type="text" data-encrypted-name="last_name" /> </p> <p> <label>Postal code</label> <input type="text" data-encrypted-name="postal_code" /> </p> <p> <label>Card Number</label> <input type="text" size="20" autocomplete="off" data-encrypted-name="number" /> </p> <p> <label>CVV</label> <input type="text" size="4" autocomplete="off" data-encrypted-name="cvv" /> </p> <p> <label>Expiration (MM/YYYY)</label> <input type="text" size="2" name="month" /> / <input type="text" size="4" name="year" /> </p> <table> </table> <input type="submit" id="submit" value="Create account"/> </form> </div> <script type="text/javascript" src="https://js.braintreegateway.com/v1/braintree.js"></script> <script type="text/javascript"> var braintree = Braintree.create("YourClientSideEncryptionKey"); braintree.onSubmitEncryptForm('braintree-payment-form1'); </script> </div>
рд╕рд░реНрд╡рд░ рдкрд░ рдлрд╝реЙрд░реНрдо рд╕реНрдерд╛рдирд╛рдВрддрд░рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реЗрдВ:
[HttpPost] public ActionResult CreateCustomer(FormCollection collection) { CustomerRequest request = new CustomerRequest { FirstName = collection["first_name"], LastName = collection["last_name"], CreditCard = new CreditCardRequest { BillingAddress = new CreditCardAddressRequest { PostalCode = collection["postal_code"] }, Number = collection["number"], ExpirationMonth = collection["month"], ExpirationYear = collection["year"], CVV = collection["cvv"] } }; Result<Customer> result = Constants.Gateway.Customer.Create(request); if (result.IsSuccess()) { Customer customer = result.Target; ViewData["CustomerName"] = customer.FirstName + " " + customer.LastName; ViewData["CustomerId"] = customer.Id; } else { ViewData["Message"] = result.Message; } return View(); }
рд╣рдо рддреНрд░реБрдЯрд┐ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдпрд╛ "рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ" рдмрдЯрди рдХреЗ рд╕рд╛рде рдкреГрд╖реНрда рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
@if (ViewData.ContainsKey("CustomerId")) { <h2>Customer created with name: @ViewData["CustomerName"]</h2> @Html.ActionLink("Click here to sign this Customer up for a recurring payment", "CreateSubscription", "Home", new { id = ViewData["CustomerId"] }, null) } else { <h2>Error: @ViewData["Message"]</h2> }
рдФрд░ рд╣рдо рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдмрдЯрди рдмрдирд╛рддреЗ рд╣реИрдВ
public ActionResult CreateSubscription(string id) { try { Customer customer = Constants.Gateway.Customer.Find(id); string paymentMethodToken = customer.CreditCards[0].Token; SubscriptionRequest request = new SubscriptionRequest { PaymentMethodToken = paymentMethodToken, PlanId = "test_plan_1" }; Result<Subscription> result = Constants.Gateway.Subscription.Create(request); return Content("Subscription Status " + result.Target.Status); } catch (Braintree.Exceptions.NotFoundException e) { return Content("No customer found for id: " + id); } }
рдЗрди рдЪрд░рдгреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЧреНрд░рд╛рд╣рдХ рдЖрдкрдХреЗ рдЙрддреНрдкрд╛рдж рдХреА рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░ рд╕рдХреЗрдВрдЧреЗред
рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдЬреЛ рдПрдХ рд▓рдбрд╝рд╛рдХреВ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рдм рдХреБрдЫ рдХреИрд╕реЗ рд╣реЛрддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЫреВрдЯ, рдорд╛рд░реНрдЬрд┐рди, рд▓реЗрдирджреЗрди рджреЗрдЦрдиреЗ рдФрд░ рдЗрд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЕрдиреНрдп рдкреНрд░рд╕рдиреНрдирддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдмрддрд╛рддреЗ рд╣реИрдВред