From 8db20c1fcade0168d22cf5a9af58e98003e79589 Mon Sep 17 00:00:00 2001 From: David Bomba Date: Tue, 27 Jul 2021 12:49:13 +1000 Subject: [PATCH] Fixes for eWay --- app/PaymentDrivers/Eway/CreditCard.php | 28 ++-- app/PaymentDrivers/Eway/ErrorCode.php | 159 ++++++++++++----------- app/PaymentDrivers/EwayPaymentDriver.php | 43 ++++++ 3 files changed, 144 insertions(+), 86 deletions(-) diff --git a/app/PaymentDrivers/Eway/CreditCard.php b/app/PaymentDrivers/Eway/CreditCard.php index c340a7db9734..a04aea1a4cfd 100644 --- a/app/PaymentDrivers/Eway/CreditCard.php +++ b/app/PaymentDrivers/Eway/CreditCard.php @@ -22,6 +22,7 @@ use App\Models\PaymentHash; use App\Models\PaymentType; use App\Models\SystemLog; use App\PaymentDrivers\EwayPaymentDriver; +use App\PaymentDrivers\Eway\ErrorCode; use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Illuminate\Support\Str; @@ -120,8 +121,8 @@ class CreditCard $transaction = [ 'Reference' => $this->eway_driver->client->number, 'Title' => '', - 'FirstName' => $this->eway_driver->client->primary_contact()->present()->last_name(), - 'LastName' => $this->eway_driver->client->primary_contact()->present()->first_name(), + 'FirstName' => $this->eway_driver->client->contacts()->first()->present()->last_name(), + 'LastName' => $this->eway_driver->client->contacts()->first()->present()->first_name(), 'CompanyName' => $this->eway_driver->client->name, 'Street1' => $this->eway_driver->client->address1, 'Street2' => $this->eway_driver->client->address2, @@ -130,30 +131,33 @@ class CreditCard 'PostalCode' => $this->eway_driver->client->postal_code, 'Country' => $this->eway_driver->client->country->iso_3166_2, 'Phone' => $this->eway_driver->client->phone, - 'Email' => $this->eway_driver->client->primary_contact()->email, + 'Email' => $this->eway_driver->client->contacts()->first()->email, "Url" => $this->eway_driver->client->website, - 'Payment' => [ - 'TotalAmount' => 0, - ], - 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, + // 'Payment' => [ + // 'TotalAmount' => 0, + // ], + // 'TransactionType' => \Eway\Rapid\Enum\TransactionType::PURCHASE, 'Method' => \Eway\Rapid\Enum\PaymentMethod::CREATE_TOKEN_CUSTOMER, 'SecuredCardData' => $request->input('SecuredCardData'), ]; $response = $this->eway_driver->init()->eway->createCustomer(\Eway\Rapid\Enum\ApiMethod::DIRECT, $transaction); - nlog($response); + $response_status = ErrorCode::getStatus($response->ResponseMessage); + + if(!$response_status['success']) + throw new PaymentFailed($response_status['message'], 400); //success $cgt = []; - $cgt['token'] = $data['token']; + $cgt['token'] = $response->Customer->TokenCustomerID; $cgt['payment_method_id'] = GatewayType::CREDIT_CARD; $payment_meta = new \stdClass; - $payment_meta->exp_month = 'xx'; - $payment_meta->exp_year = 'xx'; + $payment_meta->exp_month = $response->Customer->CardDetails->ExpiryMonth; + $payment_meta->exp_year = $response->Customer->CardDetails->ExpiryYear; $payment_meta->brand = 'CC'; - $payment_meta->last4 = 'xxxx'; + $payment_meta->last4 = $response->Customer->CardDetails->Number; $payment_meta->type = GatewayType::CREDIT_CARD; $cgt['payment_meta'] = $payment_meta; diff --git a/app/PaymentDrivers/Eway/ErrorCode.php b/app/PaymentDrivers/Eway/ErrorCode.php index 71a44fad27bc..94a0bc138a93 100644 --- a/app/PaymentDrivers/Eway/ErrorCode.php +++ b/app/PaymentDrivers/Eway/ErrorCode.php @@ -15,80 +15,91 @@ namespace App\PaymentDrivers\Eway; class ErrorCode { - public $success = [ - ["A2000" => "Transaction Approved"], - ["A2008" => "Honour With Identification"], - ["A2010" => "Approved For Partial Amount"], - ["A2011" => "Approved, VIP"], - ["A2016" => "Approved, Update Track 3"], - ], - - public $failure = [ - ["D4401" => "Refer to Issuer"], - ["D4402" => "Refer to Issuer, special"], - ["D4403" => "No Merchant"], - ["D4404" => "Pick Up Card"], - ["D4405" => "Do Not Honour"], - ["D4406" => "Error"], - ["D4407" => "Pick Up Card, Special"], - ["D4409" => "Request In Progress"], - ["D4412" => "Invalid Transaction"], - ["D4413" => "Invalid Amount"], - ["D4414" => "Invalid Card Number"], - ["D4415" => "No Issuer"], - ["D4417" => "3D Secure Error"], - ["D4419" => "Re-enter Last Transaction"], - ["D4421" => "No Action Taken"], - ["D4422" => "Suspected Malfunction"], - ["D4423" => "Unacceptable Transaction Fee"], - ["D4425" => "Unable to Locate Record On File"], - ["D4430" => "Format Error"], - ["D4431" => "Bank Not Supported By Switch"], - ["D4433" => "Expired Card, Capture"], - ["D4434" => "Suspected Fraud, Retain Card"], - ["D4435" => "Card Acceptor, Contact Acquirer, Retain Card"], - ["D4436" => "Restricted Card, Retain Card"], - ["D4437" => "Contact Acquirer Security Department, Retain Card"], - ["D4438" => "PIN Tries Exceeded, Capture"], - ["D4439" => "No Credit Account"], - ["D4440" => "Function Not Supported"], - ["D4441" => "Lost Card"], - ["D4442" => "No Universal Account"], - ["D4443" => "Stolen Card"], - ["D4444" => "No Investment Account"], - ["D4450" => "Click-to-Pay (Visa Checkout) Transaction"], - ["D4451" => "Insufficient Funds"], - ["D4452" => "No Cheque Account"], - ["D4453" => "No Savings Account"], - ["D4454" => "Expired Card"], - ["D4455" => "Incorrect PIN"], - ["D4456" => "No Card Record"], - ["D4457" => "Function Not Permitted to Cardholder"], - ["D4458" => "Function Not Permitted to Terminal"], - ["D4459" => "Suspected Fraud"], - ["D4460" => "Acceptor Contact Acquirer"], - ["D4461" => "Exceeds Withdrawal Limit"], - ["D4462" => "Restricted Card"], - ["D4463" => "Security Violation"], - ["D4464" => "Original Amount Incorrect"], - ["D4466" => "Acceptor Contact Acquirer, Security"], - ["D4467" => "Capture Card"], - ["D4475" => "PIN Tries Exceeded"], - ["D4476" => "Invalidate Txn Reference"], - ["D4481" => "Accumulated Transaction Counter (Amount) Exceeded"], - ["D4482" => "CVV Validation Error"], - ["D4483" => "Acquirer Is Not Accepting Transactions From You At This Time"], - ["D4484" => "Acquirer Is Not Accepting This Transaction"], - ["D4490" => "Cut off In Progress"], - ["D4491" => "Card Issuer Unavailable"], - ["D4492" => "Unable To Route Transaction"], - ["D4493" => "Cannot Complete, Violation Of The Law"], - ["D4494" => "Duplicate Transaction"], - ["D4495" => "Amex Declined"], - ["D4496" => "System Error"], - ["D4497" => "MasterPass Error"], - ["D4498" => "PayPal Create Transaction Error"], - ["D4499" => "Invalid Transaction for Auth/Void"], + private static $success = [ + "A2000" => "Transaction Approved", + "A2008" => "Honour With Identification", + "A2010" => "Approved For Partial Amount", + "A2011" => "Approved, VIP", + "A2016" => "Approved, Update Track 3", ]; + private static $failure = [ + "D4401" => "Refer to Issuer", + "D4402" => "Refer to Issuer, special", + "D4403" => "No Merchant", + "D4404" => "Pick Up Card", + "D4405" => "Do Not Honour", + "D4406" => "Error", + "D4407" => "Pick Up Card, Special", + "D4409" => "Request In Progress", + "D4412" => "Invalid Transaction", + "D4413" => "Invalid Amount", + "D4414" => "Invalid Card Number", + "D4415" => "No Issuer", + "D4417" => "3D Secure Error", + "D4419" => "Re-enter Last Transaction", + "D4421" => "No Action Taken", + "D4422" => "Suspected Malfunction", + "D4423" => "Unacceptable Transaction Fee", + "D4425" => "Unable to Locate Record On File", + "D4430" => "Format Error", + "D4431" => "Bank Not Supported By Switch", + "D4433" => "Expired Card, Capture", + "D4434" => "Suspected Fraud, Retain Card", + "D4435" => "Card Acceptor, Contact Acquirer, Retain Card", + "D4436" => "Restricted Card, Retain Card", + "D4437" => "Contact Acquirer Security Department, Retain Card", + "D4438" => "PIN Tries Exceeded, Capture", + "D4439" => "No Credit Account", + "D4440" => "Function Not Supported", + "D4441" => "Lost Card", + "D4442" => "No Universal Account", + "D4443" => "Stolen Card", + "D4444" => "No Investment Account", + "D4450" => "Click-to-Pay (Visa Checkout) Transaction", + "D4451" => "Insufficient Funds", + "D4452" => "No Cheque Account", + "D4453" => "No Savings Account", + "D4454" => "Expired Card", + "D4455" => "Incorrect PIN", + "D4456" => "No Card Record", + "D4457" => "Function Not Permitted to Cardholder", + "D4458" => "Function Not Permitted to Terminal", + "D4459" => "Suspected Fraud", + "D4460" => "Acceptor Contact Acquirer", + "D4461" => "Exceeds Withdrawal Limit", + "D4462" => "Restricted Card", + "D4463" => "Security Violation", + "D4464" => "Original Amount Incorrect", + "D4466" => "Acceptor Contact Acquirer, Security", + "D4467" => "Capture Card", + "D4475" => "PIN Tries Exceeded", + "D4476" => "Invalidate Txn Reference", + "D4481" => "Accumulated Transaction Counter (Amount) Exceeded", + "D4482" => "CVV Validation Error", + "D4483" => "Acquirer Is Not Accepting Transactions From You At This Time", + "D4484" => "Acquirer Is Not Accepting This Transaction", + "D4490" => "Cut off In Progress", + "D4491" => "Card Issuer Unavailable", + "D4492" => "Unable To Route Transaction", + "D4493" => "Cannot Complete, Violation Of The Law", + "D4494" => "Duplicate Transaction", + "D4495" => "Amex Declined", + "D4496" => "System Error", + "D4497" => "MasterPass Error", + "D4498" => "PayPal Create Transaction Error", + "D4499" => "Invalid Transaction for Auth/Void", + ]; + + + public static function getStatus($code) + { + if(array_key_exists($code, self::$success)) + return ['success' => true, 'message' => self::$success[$code]]; + + if(array_key_exists($code, self::$failure)) + return ['success' => false, 'message' => self::$failure[$code]]; + + return ['success' => false, 'message' => "Unknown error message code - {$code}"]; + } } \ No newline at end of file diff --git a/app/PaymentDrivers/EwayPaymentDriver.php b/app/PaymentDrivers/EwayPaymentDriver.php index 7ed47e69e525..260723172bff 100644 --- a/app/PaymentDrivers/EwayPaymentDriver.php +++ b/app/PaymentDrivers/EwayPaymentDriver.php @@ -101,4 +101,47 @@ class EwayPaymentDriver extends BaseDriver public function processWebhookRequest(PaymentWebhookRequest $request, Payment $payment = null) { } + + public function getClientRequiredFields(): array + { + $fields = []; + $fields[] = ['name' => 'contact_first_name', 'label' => ctrans('texts.first_name'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'contact_last_name', 'label' => ctrans('texts.last_name'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'contact_email', 'label' => ctrans('texts.email'), 'type' => 'text', 'validation' => 'required,email:rfc']; + $fields[] = ['name' => 'client_country_id', 'label' => ctrans('texts.country'), 'type' => 'text', 'validation' => 'required']; + + if ($this->company_gateway->require_client_name) { + $fields[] = ['name' => 'client_name', 'label' => ctrans('texts.client_name'), 'type' => 'text', 'validation' => 'required']; + } + + // if ($this->company_gateway->require_contact_name) { + // } + + // if ($this->company_gateway->require_contact_email) { + // } + + if ($this->company_gateway->require_client_phone) { + $fields[] = ['name' => 'client_phone', 'label' => ctrans('texts.client_phone'), 'type' => 'tel', 'validation' => 'required']; + } + + if ($this->company_gateway->require_billing_address) { + $fields[] = ['name' => 'client_address_line_1', 'label' => ctrans('texts.address1'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_city', 'label' => ctrans('texts.city'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_state', 'label' => ctrans('texts.state'), 'type' => 'text', 'validation' => 'required']; + } + + if($this->company_gateway->require_postal_code) + $fields[] = ['name' => 'client_postal_code', 'label' => ctrans('texts.postal_code'), 'type' => 'text', 'validation' => 'required']; + + if ($this->company_gateway->require_shipping_address) { + $fields[] = ['name' => 'client_shipping_address_line_1', 'label' => ctrans('texts.shipping_address1'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_shipping_city', 'label' => ctrans('texts.shipping_city'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_shipping_state', 'label' => ctrans('texts.shipping_state'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_shipping_postal_code', 'label' => ctrans('texts.shipping_postal_code'), 'type' => 'text', 'validation' => 'required']; + $fields[] = ['name' => 'client_shipping_country_id', 'label' => ctrans('texts.shipping_country'), 'type' => 'text', 'validation' => 'required']; + } + + + return $fields; + } }