PayController.php 2.71 KB
<?php

namespace App\Http\Controllers\V1;

use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Payment\PaymentFactory;
use Illuminate\Http\Request;
use Jiannei\Response\Laravel\Support\Facades\Response;

class PayController extends Controller
{

    public function index(Request $request,PaymentFactory $factory)
    {
        $order_sn = $request->get('order_sn');

        $pay_type = $request->get('pay_type');


        $order = Order::query()->where('order_sn', $order_sn)->first();

        if ($order->status != Order::UNPAID) return Response::fail('订单错误!');

//        if ($order->pay_amount <= 0) return $this->paid($order_sn); 0元购应该单独写一套

        $payment = $factory->init($pay_type)->prepare($order);

        return Response::success($payment);
    }

    /**
     * Store a newly created resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Payment\PaymentFactory  $factory
     * @return \Illuminate\Http\JsonResponse
     */
    public function store(Request $request, PaymentFactory $factory)
    {
        // 回调
        $order_sn = $request->post('order_sn');
        $pay_type = $request->post('pay_type');
        $token = $request->post('token');

//        $order = Order::query()->where('order_sn', $order_sn)->first();
//
//        if ($order->status != Order::UNPAID) return Response::fail('订单错误!');

        $payment = $factory->init($pay_type)->notify($order_sn, $token);

        if ($payment) return Response::success(['order_sn' => $order_sn], '支付成功');
        else return Response::fail('订单错误!');
    }

    /**
     * Display the specified resource.
     *
     * @param  int  $id
     * @param Request $request
     * @param PaymentFactory $factory
     * @return \Illuminate\Http\JsonResponse
     * @throws \Exception
     */
    public function show($id, Request $request, PaymentFactory $factory)
    {
        $pay_type = $request->get('pay_type');

        $capture = $factory->init($pay_type)->capture($id);

        return Response::success($capture);
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}