PaymentsController::createTransaction()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 19
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 15
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 19
rs 9.7666
1
<?php
2
3
namespace App\Controller\Braintree;
4
5
use Braintree\Exception\NotFound;
6
use Braintree\Transaction;
7
use Symfony\Component\HttpFoundation\Request;
8
use Symfony\Component\Routing\Annotation\Route;
9
use Symfony\Component\HttpFoundation\Response;
10
11
/**
12
 * Class PaymentsController
13
 *
14
 * @package App\Controller\Braintree
15
 *
16
 * @Route("/braintree/payments", name="braintree-payments-")
17
 */
18
class PaymentsController extends AbstractController
19
{
20
    /**
21
     * @param string $action
22
     * @param string $description
23
     * @return Response
24
     *
25
     * @Route("/dropui", name="dropui", methods={"GET"},
26
     *     defaults={"description" = "DropUI", "action" = "dropui"})
27
     * @Route("/hosted-fields", name="hosted-fields", methods={"GET"},
28
     *     defaults={"description" = "Hosted Fields", "action" = "hosted-fields"})
29
     * @Route("/apm", name="apm", methods={"GET"},
30
     *     defaults={"description" = "Alternative Payments", "action" = "apm"})
31
     * @Route("/3ds", name="three-ds", methods={"GET"},
32
     *     defaults={"description" = "3D Secure", "action" = "3ds"})
33
     * @Route("/vault", name="vault", methods={"GET"},
34
     *     defaults={"description" = "Vault API", "action" = "vault"})
35
     * @Route("/request", name="request", methods={"GET"},
36
     *     defaults={"description" = "PaymentRequestAPI", "action" = "request"})
37
     * @Route("/paylater", name="paylater", methods={"GET"},
38
     *     defaults={"description" = "PayPal Paylater", "action" = "paylater"})
39
     * @Route("/forward", name="forward", methods={"GET"},
40
     *     defaults={"description" = "Forward API", "action" = "forward"})
41
     */
42
    public function payments(string $action, string $description)
43
    {
44
        $clientToken = $this->braintreeService->getPaymentService()->getClientToken();
45
        return $this->render('braintree/payments/' . $action . '.html.twig', [
46
            'clientToken' => $clientToken,
47
            'name' => $description
48
        ]);
49
    }
50
51
    /**
52
     * @Route("/payload", name="payload", methods={"POST"})
53
     *
54
     * @return Response
55
     */
56
    public function paymentsPayload()
57
    {
58
        $request = Request::createFromGlobals();
59
        $payload = $request->request->all();
60
        return $this->render('default/dump.html.twig', [
61
            'result' => (object) $payload,
62
            'raw_result' => false,
63
        ]);
64
    }
65
66
    /**
67
     * @Route("/transaction", name="create", methods={"POST"})
68
     *
69
     * @return Response
70
     */
71
    public function createTransaction()
72
    {
73
        $request = Request::createFromGlobals();
74
        $paymentNonce = $request->request->get('payment_nonce');
75
        $amount = $request->request->get('amount');
76
        $deviceData = $request->request->get('device_data');
77
        $serverOptions = $request->request->get('server_options');
78
        $sale = $this->braintreeService->getPaymentService()->createSale(
79
            $amount,
80
            $paymentNonce,
81
            $deviceData,
82
            $serverOptions
83
        );
84
        /** @var Transaction $transaction */
85
        $transaction = $sale->transaction;
86
        return $this->render('default/dump-input-id.html.twig', [
87
            'result' => $sale,
88
            'raw_result' => false,
89
            'result_id' => $transaction->id ?? null
90
        ]);
91
    }
92
93
    /**
94
     * @Route("/transaction/{transactionId}/capture", name="capture", methods={"POST"})
95
     *
96
     * @param string $transactionId
97
     *
98
     * @return Response
99
     */
100
    public function captureTransaction(string $transactionId)
101
    {
102
        $request = Request::createFromGlobals();
103
        $amount = $request->request->get('amount');
104
        $capture = $this->braintreeService->getPaymentService()->captureSale($transactionId, $amount);
105
        return $this->render('default/dump.html.twig', [
106
            'result' => (object) $capture,
107
            'raw_result' => false,
108
        ]);
109
    }
110
111
    /**
112
     * @Route("/{transactionId}", name="get", methods={"GET"})
113
     *
114
     * @param string $transactionId
115
     * @return Response
116
     * @throws NotFound
117
     */
118
    public function getTransaction(string $transactionId)
119
    {
120
        $transaction = $this->braintreeService->getPaymentService()->getTransaction($transactionId);
121
        return $this->render('default/dump.html.twig', [
122
            'result' => (object) $transaction,
123
            'raw_result' => false,
124
        ]);
125
    }
126
}
127