-
-
Notifications
You must be signed in to change notification settings - Fork 338
/
DoCaptureAction.php
79 lines (67 loc) · 2.21 KB
/
DoCaptureAction.php
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
<?php
namespace Payum\Paypal\ExpressCheckout\Nvp\Action\Api;
use ArrayAccess;
use Payum\Core\Action\ActionInterface;
use Payum\Core\ApiAwareInterface;
use Payum\Core\ApiAwareTrait;
use Payum\Core\Bridge\Spl\ArrayObject;
use Payum\Core\Exception\RequestNotSupportedException;
use Payum\Core\GatewayAwareInterface;
use Payum\Core\GatewayAwareTrait;
use Payum\Paypal\ExpressCheckout\Nvp\Api;
use Payum\Paypal\ExpressCheckout\Nvp\Request\Api\DoCapture;
use Payum\Paypal\ExpressCheckout\Nvp\Request\Api\GetTransactionDetails;
class DoCaptureAction implements ActionInterface, ApiAwareInterface, GatewayAwareInterface
{
use ApiAwareTrait;
use GatewayAwareTrait;
public function __construct()
{
$this->apiClass = Api::class;
}
public function execute($request): void
{
/** @var DoCapture $request */
RequestNotSupportedException::assertSupports($this, $request);
$model = ArrayObject::ensureArrayObject($request->getModel());
$paymentRequestN = $request->getPaymentRequestN();
$fields = new ArrayObject([]);
foreach ($this->getPaymentRequestNFields() as $field) {
$fields[$field] = $model['PAYMENTREQUEST_' . $paymentRequestN . '_' . $field];
}
$fields['AUTHORIZATIONID'] = $fields['TRANSACTIONID'];
$fields->validateNotEmpty(['AMT', 'COMPLETETYPE', 'AUTHORIZATIONID']);
$this->api->doCapture((array) $fields);
$this->gateway->execute(new GetTransactionDetails($model, $paymentRequestN));
}
public function supports($request)
{
return $request instanceof DoCapture &&
$request->getModel() instanceof ArrayAccess
;
}
/**
* @return array
*/
protected function getPaymentRequestNFields()
{
return [
'TRANSACTIONID',
'PARENTTRANSACTIONID',
'RECEIPTID',
'TRANSACTIONTYPE',
'PAYMENTTYPE',
'ORDERTIME',
'AMT',
'CURRENCYCODE',
'FEEAMT',
'SETTLEAMT',
'TAXAMT',
'EXCHANGERATE',
'PAYMENTSTATUS',
'PENDINGREASON',
'REASONCODE',
'COMPLETETYPE',
];
}
}