akaunting/app/Traits/Omnipay.php
2019-11-16 10:21:14 +03:00

149 lines
4.7 KiB
PHP

<?php
namespace App\Traits;
trait Omnipay
{
public function authorize($invoice, $request, $gateway, $extra_options = [])
{
$default_options = [
'amount' => $invoice->amount,
'currency' => $invoice->currency_code,
'transactionId' => $invoice->id,
'returnUrl' => $this->getReturnUrl($invoice),
'cancelUrl' => $this->getCancelUrl($invoice),
];
$options = array_merge($default_options, $extra_options);
try {
$response = $gateway->authorize($options)->send();
} catch (\Exception $e) {
$this->logger->info($this->module->getName() . ':: Invoice: ' . $invoice->id . ' - Error: '. $e->getMessage());
$message = $e->getMessage();
return response()->json([
'error' => $message,
'redirect' => false,
'success' => false,
'data' => false,
]);
}
if ($response->isSuccessful()) {
$this->setReference($invoice, $response->getTransactionReference());
$response = $gateway->capture([
'amount' => $invoice->amount,
'currency' => $invoice->currency_code,
'transactionId' => $this->getReference($invoice),
])->send();
return $this->finish($invoice, $request);
}
return $this->failure($invoice, $response);
}
public function purchase($invoice, $request, $gateway, $extra_options = [])
{
$default_options = [
'amount' => $invoice->amount,
'currency' => $invoice->currency_code,
'transactionId' => $invoice->id,
'returnUrl' => $this->getReturnUrl($invoice),
'cancelUrl' => $this->getCancelUrl($invoice),
];
$options = array_merge($default_options, $extra_options);
try {
$response = $gateway->purchase($options)->send();
} catch (\Exception $e) {
$this->logger->info($this->module->getName() . ':: Invoice: ' . $invoice->id . ' - Error: '. $e->getMessage());
$message = $e->getMessage();
return response()->json([
'error' => $message,
'redirect' => false,
'success' => false,
'data' => false,
]);
}
if ($response->isSuccessful()) {
$this->setReference($invoice, $response->getTransactionReference());
return $this->finish($invoice, $request);
}
if ($response->isRedirect()) {
$this->setReference($invoice, $response->getTransactionReference());
return response()->json([
'error' => false,
'redirect' => $response->getRedirectUrl(),
'success' => false,
'data' => $response->getRedirectData(),
]);
}
return $this->failure($invoice, $response);
}
public function completePurchase($invoice, $request, $gateway, $extra_options = [])
{
$default_options = [
'amount' => $invoice->amount,
'currency' => $invoice->currency_code,
'transactionId' => $invoice->id,
'transactionReference' => $this->getReference($invoice),
//'returnUrl' => $this->getReturnUrl($invoice),
//'cancelUrl' => $this->getCancelUrl($invoice),
];
$options = array_merge($default_options, $extra_options);
$response = $gateway->completePurchase($options)->send();
if ($response->isSuccessful()) {
return $this->finish($invoice, $request);
}
if ($response->isCancelled()) {
return $this->cancel($invoice);
}
return $this->failure($invoice, $response, true);
}
public function failure($invoice, $response, $force_redirect = false)
{
$data = $response->getData();
$message = $response->getMessage();
if (isset($data['error'])) {
$this->logger->info($this->module->getName() . ':: Invoice: ' . $invoice->id . ' - Error Type: ' . $data['error']['type'] . ' - Error Message: ' . $message);
} else {
$this->logger->info($this->module->getName() . ':: Invoice: ' . $invoice->id . ' - Error Message: ' . $message);
}
$invoice_url = $this->getInvoiceUrl($invoice);
flash($message)->error();
if ($force_redirect) {
return redirect($invoice_url);
}
return response()->json([
'error' => $message,
'redirect' => $invoice_url,
'success' => false,
'data' => false,
]);
}
}