mirror of
https://github.com/invoiceninja/invoiceninja.git
synced 2024-11-11 05:32:39 +01:00
commit
0007bb4538
@ -50,6 +50,7 @@ class CreditCard
|
||||
|
||||
public function authorizeResponse($request)
|
||||
{
|
||||
/* Step one - process a $1 payment - but don't complete it*/
|
||||
$payment = false;
|
||||
|
||||
$amount_money = new \Square\Models\Money();
|
||||
@ -69,121 +70,19 @@ class CreditCard
|
||||
$api_response = $this->square_driver->square->getPaymentsApi()->createPayment($body);
|
||||
|
||||
if ($api_response->isSuccess()) {
|
||||
// $result = $api_response->getResult();
|
||||
|
||||
$result = $api_response->getBody();
|
||||
$payment = json_decode($result);
|
||||
|
||||
} else {
|
||||
$errors = $api_response->getErrors();
|
||||
nlog($errors);
|
||||
return $this->processUnsuccessfulPayment($errors);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
Success response looks like this:
|
||||
|
||||
|
||||
{
|
||||
"payment": {
|
||||
"id": "Dv9xlBgSgVB8i6eT0imRYFjcrOaZY",
|
||||
"created_at": "2021-03-31T20:56:13.220Z",
|
||||
"updated_at": "2021-03-31T20:56:13.411Z",
|
||||
"amount_money": {
|
||||
"amount": 100,
|
||||
"currency": "USD"
|
||||
},
|
||||
"status": "COMPLETED",
|
||||
"delay_duration": "PT168H",
|
||||
"source_type": "CARD",
|
||||
"card_details": {
|
||||
"status": "CAPTURED",
|
||||
"card": {
|
||||
"card_brand": "AMERICAN_EXPRESS",
|
||||
"last_4": "6550",
|
||||
"exp_month": 3,
|
||||
"exp_year": 2023,
|
||||
"fingerprint": "sq-1-hPdOWUYtEMft3yQ",
|
||||
"card_type": "CREDIT",
|
||||
"prepaid_type": "NOT_PREPAID",
|
||||
"bin": "371263"
|
||||
},
|
||||
"entry_method": "KEYED",
|
||||
"cvv_status": "CVV_ACCEPTED",
|
||||
"avs_status": "AVS_ACCEPTED",
|
||||
"statement_description": "SQ *DEFAULT TEST ACCOUNT",
|
||||
"card_payment_timeline": {
|
||||
"authorized_at": "2021-03-31T20:56:13.334Z",
|
||||
"captured_at": "2021-03-31T20:56:13.411Z"
|
||||
}
|
||||
},
|
||||
"location_id": "VJN4XSBFTVPK9",
|
||||
"total_money": {
|
||||
"amount": 100,
|
||||
"currency": "USD"
|
||||
},
|
||||
"approved_money": {
|
||||
"amount": 100,
|
||||
"currency": "USD"
|
||||
}
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
$billing_address = new \Square\Models\Address();
|
||||
$billing_address->setAddressLine1($this->square_driver->client->address1);
|
||||
$billing_address->setAddressLine2($this->square_driver->client->address2);
|
||||
$billing_address->setLocality($this->square_driver->client->city);
|
||||
$billing_address->setAdministrativeDistrictLevel1($this->square_driver->client->state);
|
||||
$billing_address->setPostalCode($this->square_driver->client->postal_code);
|
||||
$billing_address->setCountry($this->square_driver->client->country->iso_3166_2);
|
||||
|
||||
$body = new \Square\Models\CreateCustomerRequest();
|
||||
$body->setGivenName($this->square_driver->client->present()->name());
|
||||
$body->setFamilyName('');
|
||||
$body->setEmailAddress($this->square_driver->client->present()->email());
|
||||
$body->setAddress($billing_address);
|
||||
$body->setPhoneNumber($this->square_driver->client->phone);
|
||||
$body->setReferenceId($this->square_driver->client->number);
|
||||
$body->setNote('Created by Invoice Ninja.');
|
||||
|
||||
$api_response = $this->square_driver
|
||||
->square
|
||||
->getCustomersApi()
|
||||
->createCustomer($body);
|
||||
|
||||
if ($api_response->isSuccess()) {
|
||||
$result = $api_response->getResult();
|
||||
nlog($result);
|
||||
} else {
|
||||
$errors = $api_response->getErrors();
|
||||
nlog($errors);
|
||||
}
|
||||
|
||||
/*Customer now created response
|
||||
|
||||
{
|
||||
"customer": {
|
||||
"id": "Q6VKKKGW8GWQNEYMDRMV01QMK8",
|
||||
"created_at": "2021-03-31T18:27:07.803Z",
|
||||
"updated_at": "2021-03-31T18:27:07Z",
|
||||
"given_name": "Amelia",
|
||||
"family_name": "Earhart",
|
||||
"email_address": "Amelia.Earhart@example.com",
|
||||
"preferences": {
|
||||
"email_unsubscribed": false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
|
||||
/* Step 3 create the card */
|
||||
$card = new \Square\Models\Card();
|
||||
$card->setCardholderName($this->square_driver->client->present()->name());
|
||||
$card->setBillingAddress($billing_address);
|
||||
$card->setCustomerId($result->getCustomer()->getId());
|
||||
// $card->setBillingAddress($billing_address);
|
||||
$card->setCustomerId($this->findOrCreateClient());
|
||||
$card->setReferenceId(Str::random(8));
|
||||
|
||||
$body = new \Square\Models\CreateCardRequest(
|
||||
@ -197,64 +96,34 @@ Success response looks like this:
|
||||
->getCardsApi()
|
||||
->createCard($body);
|
||||
|
||||
$card = false;
|
||||
|
||||
if ($api_response->isSuccess()) {
|
||||
$result = $api_response->getResult();
|
||||
nlog($result->getBody());
|
||||
nlog("ressy");
|
||||
nlog($result);
|
||||
$card = $api_response->getBody();
|
||||
$card = json_decode($card);
|
||||
} else {
|
||||
$errors = $api_response->getErrors();
|
||||
nlog("i got errors");
|
||||
nlog($errors);
|
||||
|
||||
return $this->processUnsuccessfulPayment($errors);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
{
|
||||
"card": {
|
||||
"id": "ccof:uIbfJXhXETSP197M3GB", //this is the token
|
||||
"billing_address": {
|
||||
"address_line_1": "500 Electric Ave",
|
||||
"address_line_2": "Suite 600",
|
||||
"locality": "New York",
|
||||
"administrative_district_level_1": "NY",
|
||||
"postal_code": "10003",
|
||||
"country": "US"
|
||||
},
|
||||
"bin": "411111",
|
||||
"card_brand": "VISA",
|
||||
"card_type": "CREDIT",
|
||||
"cardholder_name": "Amelia Earhart",
|
||||
"customer_id": "Q6VKKKGW8GWQNEYMDRMV01QMK8",
|
||||
"enabled": true,
|
||||
"exp_month": 11,
|
||||
"exp_year": 2018,
|
||||
"last_4": "1111",
|
||||
"prepaid_type": "NOT_PREPAID",
|
||||
"reference_id": "user-id-1",
|
||||
"version": 1
|
||||
}
|
||||
}
|
||||
|
||||
*/
|
||||
|
||||
/* Create the token in Invoice Ninja*/
|
||||
$cgt = [];
|
||||
$cgt['token'] = $result->getId();
|
||||
$cgt['token'] = $card->card->id;
|
||||
$cgt['payment_method_id'] = GatewayType::CREDIT_CARD;
|
||||
|
||||
$payment_meta = new \stdClass;
|
||||
$payment_meta->exp_month = $result->getExpMonth();
|
||||
$payment_meta->exp_year = $result->getExpYear();
|
||||
$payment_meta->brand = $result->getCardBrand();
|
||||
$payment_meta->last4 = $result->getLast4();
|
||||
$payment_meta->exp_month = $card->card->exp_month;
|
||||
$payment_meta->exp_year = $card->card->exp_year;
|
||||
$payment_meta->brand = $card->card->card_brand;
|
||||
$payment_meta->last4 = $card->card->last_4;
|
||||
$payment_meta->type = GatewayType::CREDIT_CARD;
|
||||
|
||||
$cgt['payment_meta'] = $payment_meta;
|
||||
|
||||
$token = $this->square_driver->storeGatewayToken($cgt, []);
|
||||
|
||||
|
||||
return back();
|
||||
return redirect()->route('client.payment_methods.index');
|
||||
}
|
||||
|
||||
public function paymentView($data)
|
||||
@ -291,18 +160,20 @@ Success response looks like this:
|
||||
|
||||
private function processUnsuccessfulPayment($response)
|
||||
{
|
||||
/*Harvest your own errors here*/
|
||||
// $error = $response->status_message;
|
||||
|
||||
// if(property_exists($response, 'approval_message') && $response->approval_message)
|
||||
// $error .= " - {$response->approval_message}";
|
||||
|
||||
// $error_code = property_exists($response, 'approval_message') ? $response->approval_message : 'Undefined code';
|
||||
// array (
|
||||
// 0 =>
|
||||
// Square\Models\Error::__set_state(array(
|
||||
// 'category' => 'INVALID_REQUEST_ERROR',
|
||||
// 'code' => 'INVALID_CARD_DATA',
|
||||
// 'detail' => 'Invalid card data.',
|
||||
// 'field' => 'source_id',
|
||||
// )),
|
||||
// )
|
||||
|
||||
$data = [
|
||||
'response' => $response,
|
||||
'error' => $error,
|
||||
'error_code' => $error_code,
|
||||
'error' => $response[0]['detail'],
|
||||
'error_code' => '',
|
||||
];
|
||||
|
||||
return $this->square_driver->processUnsuccessfulTransaction($data);
|
||||
@ -310,19 +181,80 @@ Success response looks like this:
|
||||
}
|
||||
|
||||
|
||||
/* Helpers */
|
||||
|
||||
/*
|
||||
You will need some helpers to handle successful and unsuccessful responses
|
||||
|
||||
Some considerations after a succesful transaction include:
|
||||
|
||||
Logging of events: success +/- failure
|
||||
Recording a payment
|
||||
Notifications
|
||||
*/
|
||||
|
||||
|
||||
|
||||
private function findOrCreateClient()
|
||||
{
|
||||
|
||||
$email_address = new \Square\Models\CustomerTextFilter();
|
||||
$email_address->setExact($this->square_driver->client->present()->email());
|
||||
|
||||
$filter = new \Square\Models\CustomerFilter();
|
||||
$filter->setEmailAddress($email_address);
|
||||
|
||||
$query = new \Square\Models\CustomerQuery();
|
||||
$query->setFilter($filter);
|
||||
|
||||
$body = new \Square\Models\SearchCustomersRequest();
|
||||
$body->setQuery($query);
|
||||
|
||||
$api_response = $this->square_driver
|
||||
->init()
|
||||
->square
|
||||
->getCustomersApi()
|
||||
->searchCustomers($body);
|
||||
|
||||
$customers = false;
|
||||
|
||||
if ($api_response->isSuccess()) {
|
||||
$customers = $api_response->getBody();
|
||||
$customers = json_decode($customers);
|
||||
} else {
|
||||
$errors = $api_response->getErrors();
|
||||
}
|
||||
|
||||
if($customers)
|
||||
return $customers->customers[0]->id;
|
||||
|
||||
return $this->createClient();
|
||||
}
|
||||
|
||||
private function createClient()
|
||||
{
|
||||
|
||||
/* Step two - create the customer */
|
||||
$billing_address = new \Square\Models\Address();
|
||||
$billing_address->setAddressLine1($this->square_driver->client->address1);
|
||||
$billing_address->setAddressLine2($this->square_driver->client->address2);
|
||||
$billing_address->setLocality($this->square_driver->client->city);
|
||||
$billing_address->setAdministrativeDistrictLevel1($this->square_driver->client->state);
|
||||
$billing_address->setPostalCode($this->square_driver->client->postal_code);
|
||||
$billing_address->setCountry($this->square_driver->client->country->iso_3166_2);
|
||||
|
||||
$body = new \Square\Models\CreateCustomerRequest();
|
||||
$body->setGivenName($this->square_driver->client->present()->name());
|
||||
$body->setFamilyName('');
|
||||
$body->setEmailAddress($this->square_driver->client->present()->email());
|
||||
$body->setAddress($billing_address);
|
||||
$body->setPhoneNumber($this->square_driver->client->phone);
|
||||
$body->setReferenceId($this->square_driver->client->number);
|
||||
$body->setNote('Created by Invoice Ninja.');
|
||||
|
||||
$api_response = $this->square_driver
|
||||
->init()
|
||||
->square
|
||||
->getCustomersApi()
|
||||
->createCustomer($body);
|
||||
|
||||
if ($api_response->isSuccess()) {
|
||||
$result = $api_response->getResult();
|
||||
return $result->getCustomer()->getId();
|
||||
|
||||
} else {
|
||||
$errors = $api_response->getErrors();
|
||||
return $this->processUnsuccessfulPayment($errors);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user