Completed
Push — master ( 0eb878...91fabd )
by Joachim
12:49
created

PaymentController::newAction()   B

Complexity

Conditions 3
Paths 3

Size

Total Lines 37
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 37
rs 8.8571
c 0
b 0
f 0
cc 3
eloc 23
nc 3
nop 2
1
<?php
2
namespace Loevgaard\DandomainAltapayBundle\Controller;
3
4
use Loevgaard\AltaPay\Payload\OrderLine as OrderLinePayload;
5
use Loevgaard\AltaPay\Payload\PaymentRequest as PaymentRequestPayload;
6
use Loevgaard\Dandomain\Pay\Handler;
7
use Loevgaard\DandomainAltapayBundle\Entity\TerminalInterface;
8
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
9
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
10
use Sensio\Bundle\FrameworkExtraBundle\Configuration\ParamConverter;
11
use Symfony\Component\HttpFoundation\Request;
12
13
class PaymentController extends Controller {
14
    /**
15
     * @Route("/{terminal}")
16
     * @ParamConverter("terminal", options={"mapping": {"terminal": "canonicalTitle"}})
17
     *
18
     * @param TerminalInterface $terminal
19
     * @param Request $request
20
     */
21
    public function newAction(TerminalInterface $terminal, Request $request) {
22
        $handler = new Handler(
23
            $request,
24
            $this->container->getParameter('loevgaard_dandomain_altapay.shared_key_1'),
25
            $this->container->getParameter('loevgaard_dandomain_altapay.shared_key_2')
26
        );
27
28
        if(!$handler->checksumMatches()) {
29
            // @todo what should happen here?
30
            throw new \RuntimeException('Checksum mismatch. Try again');
31
        }
32
33
        $paymentRequest = $handler->getPaymentRequest();
34
35
        $paymentRequestPayload = new PaymentRequestPayload(
36
            $terminal->getTitle(),
37
            $paymentRequest->getOrderId(),
38
            $paymentRequest->getTotalAmount(),
39
            $paymentRequest->getCurrencySymbol()
40
        );
41
42
        foreach ($paymentRequest->getOrderLines() as $orderLine) {
43
            $orderLinePayload = new OrderLinePayload(
44
                $orderLine->getName(),
45
                $orderLine->getProductNumber(),
46
                $orderLine->getQuantity(),
47
                $orderLine->getPrice(),
48
                $orderLine->getVat()
49
            );
50
51
            $paymentRequestPayload->addOrderLine($orderLinePayload);
52
        }
53
54
55
        $altapay = $this->container->get('loevgaard_dandomain_altapay.altapay_client');
56
        $altapay->createPaymentRequest($paymentRequestPayload);
57
    }
58
}