【Laravel】【ホテル予約管理】クレジット情報を登録する(訂正)

前回までの状況はこちら

最新ソースはこちら(gitHub)

https://github.com/takishita2nd/hotel-mng

さて、まずはユーザー登録時にクレジット情報を登録するようにしましょうか。

本来ならば、SSL通信によって、暗号化した状態でデータを送信しなくちゃいけないのですが、今はローカル環境でテスト用に動かしているので、そこら辺は考慮しないことにします。

考慮する場合は、NginxなどのWebサーバの設定が必要になります。

こちら、自前のクラウドサーバをHTTPSに対応した記事が参考になると思います。

それではコーディングしていきます。

やっていることは、以前にも書いた、usersテーブルにカラムを追加していく、ということです。

まずはマイグレーションの記述。

class AddCreditInfoUsers extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->string('credit_number')->after('phone');
            $table->string('mm')->after('credit_number');
            $table->string('yy')->after('mm');
            $table->string('credit_name')->after('yy');
            $table->string('code')->after('credit_name');
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('users', function (Blueprint $table) {
            $table->dropColumn('credit_number');
            $table->dropColumn('mm');
            $table->dropColumn('yy');
            $table->dropColumn('credit_name');
            $table->dropColumn('code');
        });
    }
}

ビューの記述。

                        <div class="form-group{{ $errors->has('credit') ? ' has-error' : '' }}">
                            <label for="credit" class="col-md-4 control-label">credit number</label>

                            <div class="col-md-6">
                                <input id="credit" type="credit" class="form-control" name="credit" required>

                                @if ($errors->has('credit'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('credit') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group">
                            <label for="mmyy" class="col-md-4 control-label">MM / YY</label>

                            <div class="col-md-6">
                            <select name="mm">
                                <option value="1">01</option>
                                <option value="2">02</option>
                                <option value="3">03</option>
                                <option value="4">04</option>
                                <option value="5">05</option>
                                <option value="6">06</option>
                                <option value="7">07</option>
                                <option value="8">08</option>
                                <option value="9">09</option>
                                <option value="10">10</option>
                                <option value="11">11</option>
                                <option value="12">12</option>
                            </select>
                            /
                            {{Form::selectYear('yy', 2020, 2030)}}
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('credit_name') ? ' has-error' : '' }}">
                            <label for="credit_name" class="col-md-4 control-label">credit name</label>

                            <div class="col-md-6">
                                <input id="credit_name" type="credit_name" class="form-control" name="credit_name" required>

                                @if ($errors->has('credit_name'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('credit_name') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

                        <div class="form-group{{ $errors->has('code') ? ' has-error' : '' }}">
                            <label for="code" class="col-md-4 control-label">security code</label>

                            <div class="col-md-6">
                                <input id="code" type="code" class="form-control" name="code" required>

                                @if ($errors->has('code'))
                                    <span class="help-block">
                                        <strong>{{ $errors->first('code') }}</strong>
                                    </span>
                                @endif
                            </div>
                        </div>

入力項目に、クレジット番号、有効期限(MM/YY)、名義、セキュリティコードを追加しました。

バリデーション処理です。

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|string|max:255',
            'fullname' => 'required|string|max:255',
            'address' => 'required|string|max:255',
            'phone' => 'required|digits:11',
            'email' => 'required|string|email|max:255|unique:users',
            'password' => 'required|string|min:6|confirmed',
            'credit' => 'required|digits:16',
            'mm' => 'required|numeric',
            'yy' => 'required|numeric',
            'credit_name' => 'required|string|max:255',
            'code' => 'required|digits:3',
        ]);
    }

登録処理です。

    protected $fillable = [
        'name', 'fullname', 'address', 'phone', 'email', 'password', 'credit_number', 'mm', 'yy', 'credit_name', 'code'
    ];
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'fullname' => $data['fullname'],
            'address' => $data['address'],
            'phone' => $data['phone'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'credit_number' => encrypt($data['credit']),
            'mm' => $data['mm'],
            'yy' => $data['yy'],
            'credit_name' => encrypt($data['credit_name']),
            'code' => encrypt($data['code'])
        ]);
    }

クレジット番号、名義、セキュリティコードは機密性が高いため、encrypt()(※2020/2/5訂正)で暗号化してわからない形でデータベースに保存します。

※bcrypt()では、復号化できないようです。後ほどこの情報を使って自動決済する必要がありますので、復号化できないと困ります。

うまくできました。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください