Share
Embed
Transcript
23 slides
-
$(whoami) w ࢯ໊Ճ౻फҰ ࡀ w ϋϯυϧωʔϜ4"8 w 9 چ5XJUUFS
!B[VLJ@FBUFS w ؔͷ*5ΤϯδχΞίϛϡχςΟͷ͔͠ ࣗশ w େࡕࡏॅɾѪग़ w ಘҙ8FCΞϓϦέʔγϣϯ։ൃ w -BSBWFM 7VF w ॴଐ༗ݶձࣾΞϦʔϓ ʮ։͚ɺΰϚʯʹରͯ͠ ʮด͡ΖʯԿͩΖ͏ ຊͷ໎ݴ -
ಈػ w ݸਓ։ൃ͍ͯ͠Δ8FCΞϓϦʹαϒεΫϦϓγϣϯͷػೳΛಋೖ͍ͨ͠ w ແྉϓϥϯͱ༗ྉϓϥϯͰ͑ΔػೳͷൣғΛ੍ޚ w ܾࡁγεςϜͰ4USJQF͕͋Δ͜ͱೝࡁΈ w όοΫΤϯυ-BSBWFMͰߏங w
ެࣜͰ-BSBWFM$BTIJFSͱ͍͏ύοέʔδ͕ଘࡏ -
4USJQFͱ w ΦϯϥΠϯܾࡁγεςϜΛಋೖ͢ΔͨΊͷαʔϏε w ੈքதͷ༷ʑͳܾࡁํ๏ʹରԠ w ΞΧϯτͷ࡞͕༰қ w ຊ൪ӡ༻ͷࡍ৹͕ࠪඞཁ w
։ൃܾ࣌ࡁ"1*Λ࣮ߦͯ͠खྉ͕ෆཁ w ຊ൪ӡ༻ͷࡍʹखྉ͕͔͔Δ -
͓͓·͔ͳαϒεΫϦϓγϣϯొॲཧͷྲྀΕ QSPEVDUT ͱྉۚ QSJDFT Λઃఆ ސ٬ใ DVTUPNFST
ΛՃ ސ٬ͷܾࡁํ๏Λొ αϒεΫϦϓγϣϯΛొ -
1SPEVDUT w Λ4USJQFͰදݱ͢ΔΦϒδΣΫτ w &$αΠτͳͲͷ4BB4ͷαʔϏεͳͲ w ໊͚ͩͰͳ͘ͷઆ໌ը૾ͳͲઃఆՄೳ w 1SPEVDUTͷ৽ن࡞࣌ʹ*%ΛಠࣗͰࢦఆՄೳ w
طଘͷγεςϜͰཧ͍ͯ͠Δͷ*%ͱϚοϐϯά w *%Λࢦఆ͢Δ߹Ұҙʹͳ͍ͬͯΔඞཁ͕͋Δ w 4USJQFͷμογϡϘʔυ͔Βૢ࡞Մೳ // 商品の一覧取得 $products = $stripe->products->all(); // 商品の新規作成 $product = $stripe->products ->create([ 'name' => 'スタンダードプラン', ]); // 商品の削除 $stripe->products->delete($productId); 1SPEVDUTͷ"1*ͷ༻ྫ -
1SJDFT w ྉۚΛ4USJQFͰදݱ͢ΔΦϒδΣΫτ w 1SPEVDUTʹରͯ͠ෳͷ1SJDFT͕ઃఆՄೳ w ྫ4BB4ͷϓϥϯͷֹ݄༻ͷֹۚͱֹ༻ͷֹۚ w ࢧ͍ํ๏Λઃఆ w
0OFUJNFճݶΓͷܾࡁ w ྫ&$αΠτͷߪೖ w 3FDVSSJOHఆظతʹൃੜ͢Δܾࡁ w ྫֹ݄ͷԻָ৴αʔϏεͷܖ w 4USJQFͷμογϡϘʔυ͔Βૢ࡞Մೳ // 特定の products の料金一覧の取得 $prices = $stripe->prices ->all(['products' => 'prod_xxxx']); // products に料金を追加 $price = $stripe->prices ->create([ // 紐付ける products の ID 'product' => 'prod_xxxx', 'currency' => 'jpy', // 金額の通貨 'unit_amount' => 1500, // 単価 ]); 1SJDFTͷ"1*ͷ༻ྫ -
αϒεΫϦϓγϣϯͰͷ1SPEVDUTͱ1SJDFTͷ͍͚ w ϓϥϯͷ༰͕ҟͳΔ߹1SPEVDUTΛར༻ w ྫແྉϓϥϯͱελϯμʔυϓϥϯΛͦΕͧΕ࡞ w ಉ͡ϓϥϯͰෳͷֹۚઃఆΛ͍ͨ͠߹1SJDFTΛར༻ w ελϯμʔυϓϥϯͷ͍ͱ݄͍ͷֹۚΛͦΕͧΕઃఆ w
ϓϥϯͷ༰Λ1SPEVDUTʹઃఆ͢Δཧ༝ w ϓϥϯ͝ͱʹҟͳΔػೳΛઃఆ͢Δ߹ʹ͍উख͕ྑ͍ w 1SJDFTͩͱಉ͡ϓϥϯͰෳֹۚ͋Δ߹ʹରԠ͕ࡶ w 4USJQFͷ&OUJUMFNFOUTΛར༻͢Δ߹ඥ͚ઌ1SPEVDUT -
$VTUPNFST w ܾࡁ͢Δސ٬Λ4USJQFͰදݱ͢ΔΦϒδΣΫτ w ࿈བྷઌܾࡁํ๏ͳͲͷใΛอ࣋ w 4USJQFͷμογϡϘʔυ͔Βૢ࡞Մೳ // 顧客の一覧取得
$customers = $stripe->customers->all(); // 顧客の登録 $customer = $stripe->customers ->create([ 'name' => 'サンプル 太郎', 'email' => '[email protected]', ]); // 顧客の削除 $stripe->customers->delete('cus_xxxx'); $VTUPNFSTͷ"1*ͷ༻ྫ -
4VCTDSJQUJPOT w αϒεΫϦϓγϣϯΛ4USJQFͰදݱ͢ΔΦϒδΣΫτ w $VTUPNFS͕ొͨ͠αϒεΫϦϓγϣϯΛཧ w ඥͮ͘QSJDFTͷֹۚͱܾࡁִؒ SFDVSSJOH Λө w
ແྉͷ͓ࢼ͠ظؒΛઃఆ͢Δ͜ͱՄೳ // サブスクリプションの新規作成 $subscription = $stripe ->subscriptions->create([ 'customer' => 'cus_xxxx', 'items' => [['price' => 'price_xxxx']], ]); // サブスクリプションのキャンセル $stripe->subscriptions->cancel('sub_xxxx'); 4VCTDSJQUJPOͷ"1*ͷ༻ྫ -
1BZNFOU.FUIPET w ܾࡁํ๏Λ4USJQFͰදݱ͢ΔΦϒδΣΫτ w ܾࡁใͷೖྗͰ$VTUPNFSTͱඥ͚ w ੈքதͷ༷ʑͳܾࡁํ๏ʹରԠ w ରԠ͍ͯ͠Δܾࡁํ๏ͷҰྫ w
ΫϨδοτΧʔυ w ۜߦৼࠐ w "QQMF1BZ w (PPHMF1BZ w 1BZ1BM // 顧客の決済方法の取得 $paymentMethods = $stripe->customers ->allPaymentMethods('cus_xxx'); // 決済方法の新規作成 $paymentMethod = $stripe->paymentMethods ->create([ 'type' => 'card', 'card' => [ 'exp_month' => 12, 'exp_year' => 2030, // テスト用のカード番号 'number' => '4242424242424242', ], ]); // 決済方法を customer に紐付け $stripe->paymentMethods->attach( 'pm_xxxx', ['customer' => 'cus_xxxx'], ); 1BZNFOU.FIUPETͷ"1*ͷ༻ྫ -
-BSBWFM$BTIJFSʹઓ w 4USJQFͷಈ͖ΛͳΜͱͳ͘ཧղͨ͠ͷͰ-BSBWFM$BTIJFSʹઓ w -BSBWFM$BTIJFS͕ੜ͢Δςʔϒϧͷ༰Ѳ #Laravel Cashier をインストール composer
require laravel/cashier # Laravel Cashier で利用するテーブルを追加 php artisan vendor:publish --tag="cashier-migrations" php artisan migrate -BSBWFM$BTIJFSͷΠϯετʔϧͱηοτΞοϓ -
-BSBWFM$BTIJFSͷNJHSBUJPO fi MFTͷ༰ w subscriptionsςʔϒϧͷՃ w 4USJQFͷ4VCTDSJQUJPOͷใΛอଘ͢ΔͨΊͷςʔϒϧ w usersΛ֎෦Ωʔͱͯ͠อ࣋ͯ͠TVCTDSJQUJPOTΛϢʔβʔͱؔ࿈͚ w
subscription_itemsςʔϒϧͷՃ w 4USJQFͷ4VCTDSUJPO*UFNTͷใΛอଘ͢ΔͨΊͷςʔϒϧ w usersςʔϒϧʹΧϥϜΛՃ w stripe_id4USJQFͷDVTUPNFSTͷ*% w pm_typeܾࡁํ๏ͷछผ w pm_last_fourΫϨδοτΧʔυͷԼܻ w trial_ends_atαϒεΫϦϓγϣϯͷτϥΠΞϧͷऴྃ -
-BSBWFM$BTIJFSΛར༻ͨ͠αϒεΫϦϓγϣϯͷొ UserͰBilliableUSBJUΛར༻ User::newSubscription()->create()ͰαϒεΫϦϓγϣϯΛొ w newSubscription()αϒεΫϦϓγϣϯΛొ͢ΔͨΊͷલ४උ w ୈҾΞϓϦέʔγϣϯ෦Ͱ͏αϒεΫϦϓγϣϯͷλΠϓ w
ୈҾద༻͢Δ4USJQFͷQSJDFTͷ*% w create()αϒεΫϦϓγϣϯΛొ w ୈҾద༻͢Δ4USJQFͷQBZNFOUNFUIPETͷ*% class User { use Billiable; // 以下省略 } $subscription = $user->newSubscription('default', $priceId) ->create($paymentMethodId); -
4USJQF&MFNFOUTΛར༻ܾͨ͠ࡁϑΥʔϜͷ࡞ // Laravel Cashier の createSetupIntent() で SetupIntent からシークレットを作成
$setupIntent = $user->createSetupIntent(['payment_method_types'] => ['card']); $clientSecret = $setupIntent->client_secret; ϑϩϯτΤϯυ༻ͷ4USJQFͷγʔΫϨοτΛੜ <div id="payment-element"></div> ܾࡁϑΥʔϜΛϚϯτ͢ΔͨΊͷ%0.ཁૉΛ࡞ const stripe = Stripe('pk_xxxx'); // 1 で生成したシークレットを取得 const { clientSecret } = await fetch('/setup'); const elements = stripe.elements({ clientSecret }); const paymentElement = elements.create('payment'); paymentElement.mount('#payment-element'); // 決済フォーム送信時の処理 await stripe.confirmPayment({ elements, confirmParams: { return_url: '/url/to/redirect' }, }); ϑϩϯτΤϯυ༻ͷ4USJQFͷγʔΫϨοτΛੜ -
ࠓޙͷ՝ w αϒεΫϦϓγϣϯͷొҎ֎ͷػೳͷ࣮ w ϓϥϯͷมߋղ w ϓϥϯ͝ͱʹར༻Մೳͳػೳͷ੍ޚ w ఆظతͳܾࡁঢ়گͷ֬ೝʹඞཁͳॲཧͷ࣮ w
ٻॻͷൃߦͷ࣮ w ܾࡁࣦഊ࣌ͷॲཧ w ຊ൪ӡ༻·ͰͷྲྀΕͷѲ w ৹ࠪͷྲྀΕඞཁͳରԠ w ܾࡁͷجૅͷཧղ w ܾࡁͷϑϩʔ w ΫϨδοτΧʔυͷػೳ %4ͳͲ -
·ͱΊ w 4USJQFͰαϒεΫϦϓγϣϯͷొͷ࣮ʹ͍ͭͯઆ໌ w 4USJQFͷΦϒδΣΫτͷׂ w 4USJQF4%,Λར༻ͨ͠αϒεΫϦϓγϣϯͷొͷྲྀΕ w -BSBWFM$BTIJFSΛར༻ͨ͠αϒεΫϦϓγϣϯͷొ w
4USJQF&MFNFOUTΛར༻ܾͨ͠ࡁϑΥʔϜͷ࡞ʹ͍ͭͯઆ໌