laravel8でpaypay決済できるデジタルコンテンツECサイトを作ってみた!

laravel8でpaypay決済できるデジタルコンテンツECサイトを作ってみた!

githubにあげておいた。
https://github.com/fddcddhdd/paypay-laravel8

1, composer install
2, create .env file
3, php artisan migrate:fresh –seed
4, composer require paypayopa/php-sdk
5, paypay for developersでapiキー・シークレット・加盟店ID(テスト環境)を取得して、.envに記述

すれば、動作すると思う。

ガワがないと見た目がヒドいので、startbootstrap.comでcss/jsを導入

1, htmlとfreeとEcommerceで検索したらShop HomePageが一個しかなかったのでDLする
https://startbootstrap.com/template/shop-homepage

2, zip展開して、laravelフォルダにコピー
2-a, assets, css, jsフォルダをpublic以下へ
2-b, index.htmlをindex.blade.phpにリネームして

3, routes/web.phpを書き換え
Route::get(‘/’, function () {
// return view(‘welcome’);
return view(‘index’);
});

とりあえず、これでECサイトっぽい画面にはなった。

4, ログイン機能をつける

laravel8 + breezeで一般ユーザ・管理者のログインを分けてみる(usersテーブルに管理者フラグを追加するだけ)

loginとregisterは、tailwindcssだけど、まあいいや。
routes/web.phpが上書きされているので、再度修正した

5, 既存のShop HomePageのヘッダにログイン・ログアウト・レジスタへのリンクを追加する
ログアウトはpostなのでformを非表示で追加する。ログイン状態で表示も変える

6, モデルを考える。デジタルコンテンツ商品という事にして、アップロードしたファイルのみ販売する!
Admin = controllerのみ生成。userテーブルのadmin=trueなだけ
User = model/migrationはあるのでcontrollerのみ生成。

Upload = 商品(デジタルコンテンツ)のアップロード・ダウンロードを管理
Purchase = UserとUplaodを結びつけて購入履歴となる
Payment = Purchaseに紐づく決済情報。クレカやpaypayなど

7, テーブル設計。paymentは要らなかったか?

8, モデル設計(リレーション設計)

paypayの決済完了のポーリングチェック

9, アップロードする管理画面を作る。admin.blade.phpは、index.blade.phpを適当にコピペして作る
adminController.php

10, ファイルのアップロード・ダウンロード処理をUploadController.phpに記述

11, フロントに商品を表示する

paypayのロゴ
https://paypay.ne.jp/merchant-share/logo/

12, トップ画面の表示

routes/web.php

13, 新規登録・ログインしたユーザのリダイレクト先を/dashboardからルート直下に変更する。
App \ Providers \ RouteServiceProviders.php

class RouteServiceProvider extends ServiceProvider
{
/**
* The path to the “home” route for your application.
*
* This is used by Laravel authentication to redirect users after login.
*
* @var string
*/
// public const HOME = ‘/dashboard’;
public const HOME = ‘/’;

14, paypay決済処理を記述

15, paypay決済完了したかどうかは、自分で発行した決済番号を使ってpaypay apiでポーリングしに行かないと駄目!
決済完了後、3秒だったら指定したURLにリダイレクトされるので、そこのサンクスページで決済完了かどうかポーリングチェックする
一応、トップ画面やマイページでもポーリング処理を入れておいた方が良さげ
今どき、ポーリングって時代錯誤じゃないかい?

トップ画面でもポーリング

決済番号でのポーリング・チェックするメソッドが変更された…?

https://qiita.com/rururu3/items/841e3b5a73da3447dc69
https://paypay.ne.jp/developers-faq/open_payment_api/sdkget-payment-detailsop_out_of_scope/

自分の場合、paymentだとOP_OUT_OF_SCOPEになった。
○ $client->code->getPaymentDetails(‘‘);
× $client->payment->getPaymentDetails(‘‘);