Code Coverage |
||||||||||
Classes and Traits |
Functions and Methods |
Lines |
||||||||
| Total | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
CRAP | |
100.00% |
51 / 51 |
| Payment | |
100.00% |
1 / 1 |
|
100.00% |
4 / 4 |
8 | |
100.00% |
51 / 51 |
| __construct | |
100.00% |
1 / 1 |
1 | |
100.00% |
6 / 6 |
|||
| getApiContext | |
100.00% |
1 / 1 |
3 | |
100.00% |
9 / 9 |
|||
| setOrder | |
100.00% |
1 / 1 |
3 | |
100.00% |
24 / 24 |
|||
| getLink | |
100.00% |
1 / 1 |
1 | |
100.00% |
12 / 12 |
|||
| <?php namespace Framework\PayPal; | |
| use Framework\Shop\PaymentInterface; | |
| use Framework\Shop\Product; | |
| use PayPal\Api\Item; | |
| use PayPal\Api\ItemList; | |
| use PayPal\Api\Payer; | |
| use PayPal\Api\Payment as PayPalPayment; | |
| use PayPal\Api\RedirectUrls; | |
| use PayPal\Api\Transaction; | |
| use PayPal\Auth\OAuthTokenCredential; | |
| use PayPal\Rest\ApiContext; | |
| class Payment implements PaymentInterface | |
| { | |
| protected Config $config; | |
| protected ApiContext $apiContext; | |
| protected Transaction $transaction; | |
| public function __construct(Config $config) | |
| { | |
| $this->config = $config; | |
| $this->apiContext = $this->getApiContext( | |
| $config->clientId, | |
| $config->clientSecret, | |
| $config->environment === 'sandbox' | |
| ); | |
| } | |
| protected function getApiContext( | |
| string $clientId, | |
| string $clientSecret, | |
| bool $sandbox = false | |
| ) : ApiContext { | |
| $apiContext = new ApiContext( | |
| new OAuthTokenCredential( | |
| $clientId, | |
| $clientSecret | |
| ) | |
| ); | |
| $apiContext->setConfig( | |
| [ | |
| 'mode' => $sandbox ? 'sandbox' : 'live', | |
| 'log.LogEnabled' => $this->config->logActive, | |
| 'log.FileName' => $this->config->logPath, | |
| 'log.LogLevel' => $this->config->environment === 'sandbox' ? 'DEBUG' : 'INFO', | |
| // PLEASE USE `INFO` LEVEL FOR LOGGING IN LIVE ENVIRONMENTS | |
| 'cache.enabled' => true, | |
| //'cache.FileName' => '/PaypalCache' // for determining paypal cache directory | |
| // 'http.CURLOPT_CONNECTTIMEOUT' => 30 | |
| // 'http.headers.PayPal-Partner-Attribution-Id' => '123123123' | |
| //'log.AdapterFactory' => '\PayPal\Log\DefaultLogFactory' // Factory class implementing \PayPal\Log\PayPalLogFactory | |
| ] | |
| ); | |
| return $apiContext; | |
| } | |
| /** | |
| * @param array|Product[] $products | |
| * @param string|null $invoice_number | |
| * @param float $shipping | |
| */ | |
| public function setOrder(array $products, string $invoice_number = null, float $shipping = 0) | |
| { | |
| $items = []; | |
| foreach ($products as $key => $product) { | |
| $items[$key] = new Item(); | |
| $items[$key]->setName($product->title) | |
| ->setPrice($product->price) | |
| ->setQuantity($product->quantity) | |
| ->setCurrency($this->config->currency); | |
| } | |
| $itemList = new ItemList(); | |
| $itemList->setItems($items); | |
| $subtotal = 0; | |
| foreach ($items as $item) { | |
| $subtotal += $item->getQuantity() * $item->getPrice(); | |
| } | |
| $details = new \PayPal\Api\Details(); | |
| $details->setShipping($shipping) | |
| // ->setTax($tax) | |
| ->setSubtotal($subtotal); | |
| $amount = new \PayPal\Api\Amount(); | |
| $amount->setCurrency($this->config->currency) | |
| ->setTotal($subtotal + $shipping /*+ $tax*/) | |
| ->setDetails($details); | |
| $this->transaction = new Transaction(); | |
| $this->transaction->setAmount($amount) | |
| ->setItemList($itemList) | |
| //->setDescription("Payment description") | |
| ->setInvoiceNumber($invoice_number); | |
| } | |
| public function getLink() : string | |
| { | |
| $payer = new Payer(); | |
| $payer->setPaymentMethod('paypal'); | |
| $redirectUrls = new RedirectUrls(); | |
| $redirectUrls->setReturnUrl($this->config->returnURL) | |
| ->setCancelUrl($this->config->cancelURL); | |
| $payment = new PayPalPayment(); | |
| $payment->setIntent('order') | |
| ->setPayer($payer) | |
| ->setRedirectUrls($redirectUrls) | |
| ->setTransactions([$this->transaction]); | |
| $payment->create($this->apiContext); | |
| return $payment->getApprovalLink(); | |
| } | |
| } |