рд╣рдо рд▓рд╛рд░рд╡реЗрд▓ рдФрд░ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд╛рдЗрдЯ рдмрдирд╛рддреЗ рд╣реИрдВред рднрд╛рдЧ реи

рд╢реБрдн рджреЛрдкрд╣рд░, рд╣рдмреНрд░! рдкрд╣рд▓реЗ рднрд╛рдЧ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рджреВрд╕рд░реЗ рдХреА рддрд▓рд╛рд╢ рд╢реБрд░реВ рдХреА, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╣рд╛рдВ рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЦреБрдж рд╣реА рдЕрдиреБрд╡рд╛рдж рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред

рдкрд░рд┐рдЪрдп

рдЗрд╕ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд▓рд╛рд░рд╡реЗрд▓ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╕рджрд╕реНрдпрддрд╛ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯ рдХреА рдирдВрдЧреЗ рд░реАрдврд╝ рдмрдирд╛рдИред рд╣рдордиреЗ рднреВрдорд┐рдХрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рдЗрдЯ рднреА рдмрдирд╛рдИ рдФрд░ рдкрдВрдЬреАрдХреГрдд рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛рдУрдВ рдХрд╛ рд╡рд┐рддрд░рдг рдмрдирд╛рдпрд╛ред рдЕрдм рд╣рдо рдЙрд╕ рдмрд┐рдВрджреБ рдкрд░ рдЖ рдЧрдП рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдкрдВрдЬреАрдХрд░рдг, рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдФрд░ рдирд┐рдХрд╛рд╕ рдХреЛ рдмрдирд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рднреБрдЧрддрд╛рди рдХрд┐рдП рдЧрдП рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Recurly рдХреЛ рдПрдХреАрдХреГрдд рдХрд░реЗрдВрдЧреЗред

рдХрд╛рдо рдкрд░ рд▓рдЧрдирд╛


рджреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИрдВ - PHP рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕рдВрдЧреАрддрдХрд╛рд░ (рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ) рдФрд░ рдкреБрди: рдЖрд░рдПрд╕ рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдерд╛ред Recurly JS рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдПрдХреАрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рдХреНрд▓рд╛рдЗрдВрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬреЛ рдорд╛рдирдЪрд┐рддреНрд░реЛрдВ рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдорд╛рдирдЪрд┐рддреНрд░ рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╣рдорд╛рд░реЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд░реНрд╡рд░ рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рд╣рдорд╛рд░реЗ рд╕рд┐рд░рджрд░реНрдж рдХреЛ рдХрдо рдХрд░рддрд╛ рд╣реИред

Recurly JS рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ рдФрд░ рдмрд┐рд▓реНрдб рдлрд╝реЛрд▓реНрдбрд░ рд╕реЗ рдкрдмреНрд▓рд┐рдХ / js / libs рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ recurly.min.js рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рд╕рдорд╛рдкрди рдЯреИрдЧ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рд▓реЗрдЖрдЙрдЯ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
<script src="/js/libs/recurly.min.js"></script> </body> 

рд╣рдореЗрдВ рд╕реАрдПрд╕рдПрд╕ рд╢реИрд▓рд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рднреА рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рднреБрдЧрддрд╛рди рдлрд╝реЙрд░реНрдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред Css / recurly рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдмрдирд╛рдПрдВ рдФрд░ рдереАрдо рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдХреЛ рдЙрд╕рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ, рдФрд░ рдлрд┐рд░ рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓реЗрдЖрдЙрдЯ рдХреЗ рд╕рдВрдмрдВрдзрд┐рдд рд╕реЗрдХреНрд╢рди рдореЗрдВ рд░реЗрдлрд░ рдХрд░реЗрдВрдЧреЗред
 <link href="/css/recurly/themes/default/recurly.css" rel="stylesheet"> 

рдЬрдм рдЖрдк Recurly рдХреЗ рд╕рд╛рде рдЦрд╛рддрд╛ рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж рдкрд╣рд▓реА рдмрд╛рд░ рд▓реЙрдЧ рдЗрди рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЕрдкрдиреА рд╕рджрд╕реНрдпрддрд╛ рдпреЛрдЬрдирд╛рдПрдВ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рдкрд╣рд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдордиреЗ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рддреАрди рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реНрддрд░ рдмрдирд╛рдП - рдХрд╛рдВрд╕реНрдп, рд░рдЬрдд рдФрд░ рд╕реНрд╡рд░реНрдгред рдЖрдк рд╣рдореЗрд╢рд╛ рдЙрдиреНрд╣реЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдирдП рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрдереНрдп рдореЗрдВ рдХреЛрдИ рдмреБрд░рд╛рдИ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдЕрднреА рдХрд░реЗрдВрдЧреЗред

рдХрд╛рдВрд╕реНрдп рдирд╛рдордХ рдПрдХ рдпреЛрдЬрдирд╛ рдмрдирд╛рдПрдВ; рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ рдХрд┐ рдХреЛрдб рдпреЛрдЬрдирд╛ "рдХрд╛рдВрд╕реНрдп" (рд▓реЛрдЕрд░рдХреЗрд╕) рдкрд░ рд╕реЗрдЯ рд╣реИред рдореВрд▓реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ - рдореИрдВрдиреЗ рдкреНрд░рддрд┐ рдорд╛рд╣ ┬г 4.99 рд▓рд┐рдЦрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЖрдк рдЕрдкрдиреА рдкрд╕рдВрдж рдХреА рдХреЛрдИ рднреА рд░рд╛рд╢рд┐ рдФрд░ / рдпрд╛ рд╕рдордп рд╕реАрдорд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЖрдк рдПрдХ рдмрд╛рд░ рд╢реБрд▓реНрдХ рдпрд╛ рдирд┐: рд╢реБрд▓реНрдХ рдкрд░реАрдХреНрд╖рдг рдЕрд╡рдзрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╕рд┐рд▓реНрд╡рд░ (рдХреЛрдб: "рд╕рд┐рд▓реНрд╡рд░") рдФрд░ рдЧреЛрд▓реНрдб (рдХреЛрдб: "рдЧреЛрд▓реНрдб") рдкреНрд▓рд╛рди рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рджреЛ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдПрдВред рдореИрдВрдиреЗ рдкреНрд░рддрд┐ рдорд╛рд╣ рдиреНрдпреВрдирддрдо ┬г 9.99 рдФрд░ ┬г 14.99 рдкреНрд░рддрд┐ рдорд╛рд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред

рдЕрдм Recurly рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдкреИрдирд▓ рдкрд░ рдЬрд╛рдПрдВ, рдЬрд╣рд╛рдВ рдХрдИ рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд╕рд╛рде рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рднреА рдвреВрдВрдвреЗрдВред рдмрд╛рдИрдВ рдУрд░ рдПрдкреАрдЖрдИ рдПрдХреНрд╕реЗрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред API рдПрдХреНрд╕реЗрд╕ рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдкрдиреА API рдХреБрдВрдЬреА, рдФрд░ рдЕрдкрдирд╛ рдЙрдк рдбреЛрдореЗрди рд▓рд┐рдЦреЗрдВред

рдЕрдм рдмрд╛рдИрдВ рдУрд░ Recurly.js рдкрд░ рдЬрд╛рдПрдВ (рдбреЗрд╡рд▓рдкрд░ рдХреЗ рддрд╣рдд)ред Recurly.js рдФрд░ рдкрд╛рд░рджрд░реНрд╢реА рдкреЛрд╕реНрдЯ API рд╕рдХреНрд╖рдо рдХрд░реЗрдВ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЕрдкрдиреА рдЧреБрдкреНрдд рдХреБрдВрдЬреА рд▓рд┐рдЦреЗрдВред

рдЕрдм рдРрдк / рдХреЙрдиреНрдлрд┐рдЧрд░ / recurly.php рдлреЛрд▓реНрдбрд░ рдореЗрдВ Recurly рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ , рдЬреЛ рдЖрдкрдиреЗ рдЕрднреА-рдЕрднреА рд▓рд┐рдЦреЗ рддреАрди рдЕрдВрдХреЛрдВ рдХреЗ рдХреЛрдб рдХреЗ рд╕рд╛рде рдЙрди рдорд╛рдиреЛрдВ рдХреА рдЬрдЧрд╣ рд▓реЗ рдЬреЛ рдЖрдкрдХреА рдкрд╕рдВрдж рдХреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдореБрджреНрд░рд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, USD, GBP, AUD):
 <?php return array( 'api_key' => 'YOUR-API-KEY', 'private_key' => 'YOUR-PRIVATE-KEY', 'subdomain' => 'YOUR-SUBDOMAIN', 'default_currency' => 'XYZ' ); 

рдЕрдм рдмрд╛рдИрдВ рдУрд░ рдкреЙрдк-рдЕрдк рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, www.example.com/recurly рд╕рд╣рд┐рдд рдЕрдкрдиреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ URL рджрд░реНрдЬ рдХрд░реЗрдВ / рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХрд░реЗрдВ ред HTTP рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ HTTP рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рд╛рдзрд┐рдХрд░рдг рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЛ рдЕрднреА рдХреЗ рд▓рд┐рдП рдЦрд╛рд▓реА рдЫреЛрдбрд╝ рджреЗрдВред

рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда


рдЕрдм, рдПрдХ рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ рд╕рдВрднрд╛рд╡рд┐рдд рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдпреЛрдЬрдирд╛ рдЪреБрдирдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛ред рдЗрд╕ рдкрде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╕рд╛рде рд╕рд╛рдЗрдирдЕрдк.рдмреНрд▓реЗрдб . php рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдВ / рдирд┐рдореНрди рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдШрд░ / рджреГрд╢реНрдп :
 @extends('layouts.default') @section('content') <h1>Signup</h1> <p>Please select your plan...</p> <div class="row-fluid pricing-table pricing-three-column"> <div class="span4 plan"> <div class="plan-name-bronze"> <h2>Bronze</h2> <span>┬г4.99 / Month</span> </div> <ul> <li class="plan-feature">Feature #1</li> <li class="plan-feature">Feature #2</li> <li class="plan-feature"><a href="/user/register/bronze" class="btn btn-primary btn-plan-select"><i class="icon-white icon-ok"></i> Select</a></li> </ul> </div> <div class="span4 plan"> <div class="plan-name-silver"> <h2>Silver <span class="badge badge-warning">Popular</span></h2> <span>┬г9.99 / Month</span> </div> <ul> <li class="plan-feature">Feature #1</li> <li class="plan-feature">Feature #2</li> <li class="plan-feature"><a href="/user/register/silver" class="btn btn-primary btn-plan-select"><i class="icon-white icon-ok"></i> Select</a></li> </ul> </div> <div class="span4 plan"> <div class="plan-name-gold"> <h2>Gold</h2> <span>┬г4.99 / Month</span> </div> <ul> <li class="plan-feature">Feature #1</li> <li class="plan-feature">Feature #2</li> <li class="plan-feature"><a href="/user/register/gold" class="btn btn-primary btn-plan-select"><i class="icon-white icon-ok"></i> Select</a></li> </ul> </div> </div> @stop 

рдмреЗрд╢рдХ, рдпрджрд┐ рдЖрдк рд╕рдордп рдкрд░ рдореВрд▓реНрдп рдЕрдкрдбреЗрдЯ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ Recurly API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдФрд░ рдЗрд╕ рдбреЗрдЯрд╛ рдХреЛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдЕрдм рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ css / style.css рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
 .pricing-table .plan { background-color: #f3f3f3; text-align: center; } .plan:hover { background-color: #fff; } .plan { color: #fff; background-color: #5e5f59; padding: 20px; } .plan-name-bronze { background-color: #665D1E; color: #fff; padding: 20px; } .plan-name-silver { background-color: #C0C0C0; color: #fff; padding: 20px; } .plan-name-gold { background-color: #FFD700; color: #fff; padding: 20px; } .pricing-table-bronze { background-color: #f89406; color: #fff; padding: 20px; } .pricing-table .plan .plan-name span { font-size: 20px; } .pricing-table .plan ul { list-style: none; margin: 0; } .pricing-table .plan ul li.plan-feature { border-top: 1px solid #c5c8c0; padding: 15px 10px; } .pricing-three-column { margin: 0 auto; width: 80%; } .pricing-variable-height .plan { display: inline-block; float: none; margin-left: 2%; vertical-align: bottom; zoom:1; *display:inline; } .plan-mouseover .plan-name { background-color: #4e9a06 !important; } .btn-plan-select { font-size: 18px; padding: 8px 25px; } 

рдЕрдВрдд рдореЗрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди / рдорд╛рд░реНрдЧреЛрдВ рдореЗрдВ рдПрдХ рдорд╛рд░реНрдЧ рдмрдирд╛рдПрдВ
 Route::get('/signup', function() { return View::make('home/signup'); }); 


рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ



рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХреГрддрд┐ рдмрд┐рдВрджреБ, рдЕрд░реНрдерд╛рддреН рдкрдВрдЬреАрдХрд░рдг рдкреГрд╖реНрда - рднреБрдЧрддрд╛рди рдорд┐рд▓рд╛ред
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдмрджрд▓ рджреЗрдВ рдпрд╛ рдХреЙрд▓рдмреИрдХ рдХреЗ POST рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ ред рд╣реЛрдо рдкреЗрдЬ рдкрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рднреБрдЧрддрд╛рди рдкреГрд╖реНрда рдкрд░ рд▓реЗ рдЬрд╛рдПрдВрдЧреЗред рдЗрди рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓реЗрдВ:
 return Redirect::to('/')->with( 'success', 'Welcome to the site, . Auth::user()->name . '!' ); 

рдЗрдиреНрд╣реЗрдВ:
 Session::put('register_user', $user); return Redirect::to('/user/register/payment'); 

рд╣рдореЗрдВ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓реЗрдЖрдЙрдЯ рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╣рдо рдкрд╛рдж (рдиреАрдЪреЗ) рдореЗрдВ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рдПрдореНрдмреЗрдб рдХрд░ рд╕рдХреЗрдВред рдЕрдВрддрд┐рдо рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЯреИрдЧ рдХреЗ рдмрд╛рдж рдирд┐рдореНрди рдкрдВрдХреНрддрд┐ рдЬреЛрдбрд╝реЗрдВ:
 @yield('scripts') 

рдЕрдм рдПрдХ рдирдпрд╛ рдорд╛рд░реНрдЧ рдмрдирд╛рдПрдБ:
 Route::get('/user/register/payment', function() { Recurly_js::$privateKey = Config::get('recurly.private_key'); $plan = 'bronze'; // todo: get this from vars $user = Session::get('register_user'); $signature = Recurly_js::sign(array( 'account' => array( 'account_code' => 'user_' . $user->id ), 'subscription' => array( 'plan_code' => $plan, 'currency' => Config::get('recurly.default_currency') ) )); return View::make('user/register')->with(array( 'plan' => $plan, 'subdomain' => Config::get('recurly.subdomain'), 'currency' => Config::get('recurly.default_currency'), 'signature' => $signature )); }); 

рдЗрд╕ рдХреЛрдб рдкрд░ рдХреБрдЫ рдиреЛрдЯ:

рднреБрдЧрддрд╛рди рдкреГрд╖реНрда рдореЗрдВ рджреЛ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рдкрд╣рд▓рд╛ рднрд╛рдЧ рд╕рд╛рдзрд╛рд░рдг HTML рд╣реИ:
 @extends('layouts.default') @section('content') <div id="recurly-subscribe"> </div> @stop 

Recurly.js рдЕрдкрдиреЗ рдЧреНрд░рд╛рд╣рдХ-рдЬрдирд┐рдд рднреБрдЧрддрд╛рди рдлрд╝реЙрд░реНрдо рдХреЛрдб рдХреЛ рдЗрд╕ div рдореЗрдВ рдЗрдВрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред

рдЕрдЧрд▓рд╛, рд╣рдо рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВрдЧреЗ рдЬреЛ рд▓реЗрдЖрдЙрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЗ рдиреАрдЪреЗ рдЖрдЙрдЯрдкреБрдЯ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ:
 @section('scripts') <script> Recurly.config({ subdomain: '{{ $subdomain }}', currency: '{{ $currency }}' }); Recurly.buildSubscriptionForm({ target: '#recurly-subscribe', // Signature must be generated server-side with a utility // method provided in client libraries. signature: '{{ $signature }}', successURL: '/user/register/confirm', planCode: '{{ $plan }}', distinguishContactFromBillingInfo: true, collectCompany: false, termsOfServiceURL: 'http://www.example.com/terms', acceptPaypal: true, acceptedCards: ['mastercard', 'discover', 'american_express', 'visa'], account: { firstName: 'Joe', lastName: 'User', email: 'test@example.net', phone: '555-555-5555' }, billingInfo: { firstName: 'Joe', lastName: 'User', address1: '123 somestreet', address2: '45', city: 'San Francisco', zip: '94107', state: 'CA', country: 'US', cardNumber: '4111-1111-1111-1111', CVV: '123' } }); </script> @stop 

рдпрд╣рд╛рдВ рдЬрд╛рджреВ рд╣реЛрддрд╛ рд╣реИ - рдкреБрдирд░реНрднреБрдЧрддрд╛рди рдПрдХ рднреБрдЧрддрд╛рди рдлрд╝реЙрд░реНрдо рдмрдирд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдИрдбреА # рд░рд┐рдХрд░реНрд╡рд▓реА-рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдбрд┐рд╡ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рд╣рдо рдЙрд╕ рдлреЙрд░реНрдо рдореЗрдВ рдЖрдП рдЬрд┐рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдлрд┐рд░, рдХреЙрд▓рдмреИрдХ рдЬреЛ рдХрд┐ рдлреЙрд░реНрдо рдХреЛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдмрдорд┐рдЯ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж Recurly рд░рд┐рдЯрд░реНрди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░ рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
 Route::post('/user/register/confirm', function() { $recurly_token = Input::get('recurly_token'); Recurly_js::$privateKey = Config::get('recurly.private_key'); $result = Recurly_js::fetch($recurly_token); var_dump($result); }); 

рдФрд░ рдлрд┐рд░, рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдЧреБрдкреНрдд рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде Recurly.js рдХреЛ рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЯреЛрдХрди рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдИ рдЧрдИ рд╡рд╕реНрддреБ рдХреЛ рдкреБрдирдГ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ Recurly POST рд╡реИрд░рд┐рдПрдмрд▓ (recurly_token) рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред рдпрд╣ Recurly_Subscription рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓реА рдЬрд╛ рд╕рдХрддреА рд╣реИред рдбреЗрдЯрд╛ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ var_dump () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рддрд╛ рд╣реВрдВред

рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдХреНрдпрд╛ рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИ:
 $plan_code = $result->plan->plan_code; 

рдЕрдм, рдЖрдкрдХреЛ рдЙрдкрдпреБрдХреНрдд рднреВрдорд┐рдХрд╛ рдЦреЛрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЖрдк рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ - рд╣рдордиреЗ рдЙрдиреНрд╣реЗрдВ "рдХрд╛рдВрд╕реНрдп", "рд░рдЬрдд" рдФрд░ "рд╕реНрд╡рд░реНрдг" рдирд╛рдо рджрд┐рдПред
 $role = Role::where('name', '=', $plan_code)->first(); 

рддрдм рд╣рдореЗрдВ рд╕рддреНрд░ рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ (рдФрд░ рдлрд┐рд░ рдЙрд╕реЗ рд╕рддреНрд░ рд╕реЗ рд╣рдЯрд╛ рджреЗрдВ):
 $user = Session::get('register_user'); Session::forget('register_user'); 

рдЕрдЧрд▓рд╛, рд╣рдо рд╕рдВрдмрдВрдзрд┐рдд рдирдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рднреВрдорд┐рдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ:
 $user->roles()->attach($role); 

рдлрд┐рд░, рд╣рдореЗрдВ рд╕реНрдердЧрд┐рдд рднреВрдорд┐рдХрд╛ рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП:
 $role_pending = $role_pending = Role::where('name', '=', 'pending')->first(); DB::table('role_user')->where('user_id', '=', $user->id)->where('role_id', '=', $role_pending->id)->delete(); 

рдЕрдм, рд╣рдордиреЗ рднреБрдЧрддрд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ, рд╕рджрд╕реНрдпрддрд╛ рдмрдирд╛рдиреЗ рдФрд░ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреА рдЧрдИ рдпреЛрдЬрдирд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП рдЦрд╛рддреЛрдВ рдХреЗ рд▓рд┐рдП рднреВрдорд┐рдХрд╛рдПрдВ рд▓рд╛рдЧреВ рдХрд░рдХреЗ рдкрдВрдЬреАрдХрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреВрд░рдХ рдмрдирд╛рдпрд╛ рд╣реИред

рдЦрд╛рддрд╛ рдкреНрд░рдмрдВрдзрди рдкреГрд╖реНрда


рдЖрдЗрдП рдПрдХ рд╕рд░рд▓ рдкреГрд╖реНрда рдмрдирд╛рдПрдВ рдЬрд┐рд╕рд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреЗ рдЦрд╛рддреЗ рдХрд╛ рдкреНрд░рдмрдВрдзрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧ рдЗрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдПрдХ рдкреНрд░рдорд╛рдгреАрдХрд░рдг рдлрд╝рд┐рд▓реНрдЯрд░ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрд░рдХреНрд╖рд┐рдд рдкреГрд╖реНрда рдХреЗ рд▓рд┐рдП рдЗрд╕ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рд╣рдо рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рдорд╛рд░реНрдЧреЛрдВ рдХреЛ рдПрдХ рд╕рдореВрд╣ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ:
 Route::group(array('before' => 'auth'), function() { Route::get('/user/account', function() { // User must be logged in }); Route::get('user/account/billing', function() { // User must be logged in }); }); 

рдЦрд╛рддрд╛ рдкреГрд╖реНрда рдХреЙрд▓ рдХрд░рдирд╛ рд╕рд░рд▓ рд╣реИ:
 Route::get('/user/account', function() { return View::make('user/account/index'); }); 

рдЕрдм рдкрддрд╛ рдлреЙрд░реНрдо рдРрдк / рд╡рд┐рдЪрд╛рд░реЛрдВ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдЦрд╛рддрд╛ / index.blade.php рдХрд╛ рд╣реИ :
 @extends('layouts.default') @section('content') <h1>Your Account</h1> <ul> <li><a href="/user/account/edit">Edit your account information</a></li> <li><a href="/user/account/plan">Update your subscription plan</a></li> <li><a href="/user/account/billing">Update your Billing information</a></li> </ul> @stop 

рдЪрд▓реЛ рдмрд┐рд▓рд┐рдВрдЧ рдкреГрд╖реНрда рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдХреЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдмреЗрд╢рдХ, рд╣рдо рд▓реЛрдЧреЛрдВ рдХреА рднреБрдЧрддрд╛рди рдЬрд╛рдирдХрд╛рд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рднреБрдЧрддрд╛рди рдкреГрд╖реНрда рдкрд░, рдЖрдкрдХреЗ рд╡реЗрдм рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдкрд╛рд╕ рдХреБрдЫ рд╕рдордп рдХреЗ рдмрд╛рдж рдкреБрди: рдирд┐рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирдИ рдЬрд╛рдирдХрд╛рд░реА рдХреА рдШреЛрд╖рдгрд╛ (POSTing) рдХрд░рдХреЗ, рдЖрдкрдХреЗ рд▓рд┐рдП рдПрдХ рдлреЙрд░реНрдо рдХреЛ рдмрдирд╛рдПрдЧрд╛ рдФрд░ рднрд░ рджреЗрдЧрд╛ред
 Route::get('user/account/billing', function() { Recurly_js::$privateKey = Config::get('recurly.private_key'); $account_code = 'user_' . Auth::user()->id; $signature = Recurly_js::sign( array('account' => array('account_code' => $account_code)) ); return View::make('user/account/billing')->with(array( 'subdomain' => Config::get('recurly.subdomain'), 'currency' => Config::get('recurly.default_currency'), 'account_code' => $account_code, 'signature' => $signature )); }); 

рдпрд╣ рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рднреБрдЧрддрд╛рди рдкреГрд╖реНрда рдХреЗ рд╕рдорд╛рди рд╣реИ рдХрд┐ рд╣рдо рд╣рд╕реНрддрд╛рдХреНрд╖рд░ (рд╡рд┐рднрд┐рдиреНрди рд╕реВрдЪрдирд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП) рдФрд░ рджреГрд╢реНрдп рдореЗрдВ рдХрдИ рдорд╛рдкрджрдВрдбреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реБрдП Recurly.js рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЛ рдЖрд░рдВрдн рдХрд░рддреЗ рд╣реИрдВред
рдкрде рдРрдк / рд╡рд┐рдЪрд╛рд░ / рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ / рдЦрд╛рддрд╛ / рдмрд┐рд▓рд┐рдВрдЧ.рдмреНрд▓реЗрдб.php
рднреБрдЧрддрд╛рди рдкреГрд╖реНрда рдкрд░ рдмрд╣реБрдд рд╕рдорд╛рди рдкреИрдЯрд░реНрди рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ:
 @extends('layouts.default') @section('content') <div id="recurly-billing"> </div> @stop @section('scripts') <script> Recurly.config({ subdomain: '{{ $subdomain }}', currency: '{{ $currency }}' }); Recurly.buildBillingInfoUpdateForm({ target: '#recurly-billing', successURL: '/user/account/billing/confirm', accountCode: '{{ $account_code }}', signature: '{{ $signature }}' }); </script> @stop 

рдЕрдВрдд рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рднреБрдЧрддрд╛рди рдХреА рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕рд░рд▓ рдХреЙрд▓рдмреИрдХ:
 Route::post('user/account/billing/confirm', function() { return Redirect::to('/user/account')->with('success', 'Your billing information has been updated.'); }); 

рдФрд░ рдпрд╣рд╛рдБ рдпрд╣ рд╣реИ! рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдкрдиреА рдмрд┐рд▓рд┐рдВрдЧ рдЬрд╛рдирдХрд╛рд░реА рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
рдореИрдВрдиреЗ рдЦрд╛рддрд╛ рд╕рдВрдкрд╛рджрди рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдпрд╣ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ, рдФрд░ рдЗрд╕реЗ рдЕрдкрдиреЗ рд▓рд┐рдП рдПрдХ рдЕрднреНрдпрд╛рд╕ рдмрдирд╛ рд░рд╣рдиреЗ рджреЗрдВред

рд╕реВрдЪрдирд╛рдПрдВ рдкреБрд╢ рдХрд░реЗрдВ



Recurly API рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкрд┐рдВрдЧ рд╕реЗрд╡рд╛ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдШрдЯрдирд╛ рд╣реЛрддреА рд╣реИред
рдЗрди рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд╣рд╛рд▓рд╛рдВрдХрд┐ - рд╡реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВред
рдЕрдирд┐рд╡рд╛рд░реНрдп рд░реВрдк рд╕реЗ, рд╕реЗрд╡рд╛ URI рдХреЛ рдПрдХ POST рдЕрдиреБрд░реЛрдз рднреЗрдЬрддреА рд╣реИ, рдФрд░ рдЕрдиреБрд░реЛрдз рдирд┐рдХрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рднреЗрдЬрддрд╛ рд╣реИред рдЖрдк рдЖрд╡рд╢реНрдпрдХ рдЬрд╛рдирдХрд╛рд░реА рдирд┐рдХрд╛рд▓рдиреЗ рдФрд░ рддрджрдиреБрд╕рд╛рд░ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Recurly рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрди рд╕реВрдЪрдирд╛рдУрдВ рдХреЛ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рд╕реВрдЪрдирд╛ рдорд┐рд▓рдиреЗ рдкрд░ рд╣рдорд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ:
 Route::post('recurly', function(){ $xml = file_get_contents ("php://input"); $notification = new Recurly_PushNotification($xml); switch ($notification->type) { // ... process notification } }); 

рдЖрдк рд╢рд╛рдпрдж рд╕рдордЭ рдЧрдП рдХрд┐ рдЬреИрд╕реЗ рд╣реА рдХрд┐рд╕реА рдиреЗ рд╕рд╛рдЗрди рдЕрдк рдХрд┐рдпрд╛ рдФрд░ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд┐рдпрд╛, рд╡рд╣ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдЧреНрд░рд╛рд╣рдХ рдмрдирд╛ рд╣реБрдЖ рд╣реИ, рдФрд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХреА рд╕рджрд╕реНрдпрддрд╛ рдЬрд╛рд░реА рд╣реИ рдпрд╛ рдирд╣реАрдВред рддреЛ, рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмреНрдпрд╛рдЬ рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░рдиреЗ рдХреА рд╕реВрдЪрдирд╛ рд╣реИред рд╣рдо рдирд┐рд╖реНрдХреНрд░рд┐рдп рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рднреВрдорд┐рдХрд╛рдУрдВ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Recurly рд╕реЗ рдПрдХ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
 switch ($notification->type) { case 'canceled_subscription_notification': // get the account code $account_code = $notification->account->account_code; // extract the user ID (account_code format is user_ID) $user_id = intval(substr($account_code, (strpos($account_code, '_')+1))); // find the user in question $user = User::find($user_id); // get the plan code $plan_code = $notification->subscription->plan->plan_code; // find the corresponding role... $role = Role::where('name', '=', $plan_code)->first(); // ...and revoke it DB::table('role_user')->where('user_id', '=', $user->id)->where('role_id', '=', $role)->delete(); break; // ... process notification } 


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

рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдореВрд▓ рд▓реЗрдЦ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рдореЗрд░реЗ рд▓реЗрдЦ рдХреЛ рдкрдврд╝рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рдХреЛ рдзрдиреНрдпрд╡рд╛рджред рдХреБрдЫ рдЬрдЧрд╣реЛрдВ рдкрд░, рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрдпрд╛ рдХрд┐ рд▓реЗрдЦрдХ рдХреНрдпрд╛ рдХрд╣рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рдЖрдк рдЗрд╕реЗ рдкрдврд╝рддреЗ рд╕рдордп рд╕рдордЭреЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЬреАрдердм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реВрдБрдЧрд╛ рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рд╛ (рдЕрдм, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдореИрдВ рдЗрд╕реЗ рдкреЛрд╕реНрдЯ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ - рджреВрд╕рд░реЗ рднрд╛рдЧ рдореЗрдВ рдЕрднреНрдпрд╛рд╕ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рдирд╣реАрдВ рд╣реИ)ред рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!

Source: https://habr.com/ru/post/In221815/


All Articles