mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-30 20:12:58 -04: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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user