PayController.php
3.45 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
<?php
namespace App\Http\Controllers\V1;
use App\Http\Controllers\Controller;
use App\Models\Order;
use App\Payment\PaymentFactory;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Log;
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');
        $others = $request->post('others',[]);
        $transactionId = $others['apple']['transactionIdentifier'];
        $originalTransactionId = $others['apple']['originalTransactionIdentifier'];
        $order = Order::query()->where('order_sn', $order_sn)->first();
        if ($order->status != Order::UNPAID) return Response::fail('订单错误!');
        $payment = $factory->init($pay_type)->verify($order, $token, $transactionId, $originalTransactionId);
        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)
    {
        //
    }
    public function iapCallback(Request $request, PaymentFactory $factory, $service)
    {
        $all = $request->all();
        if ($service == 'apple') {
            $factory->init($service)->notify($all['signedPayload']);
        }elseif ($service == 'apple-sandbox'){
            $factory->init($service)->notifySandbox($all['signedPayload']);
        } else {
            $factory->init($service)->notify($all['message']['data']);
        }
        return Response::ok();
    }
}