mirror of
				https://github.com/invoiceninja/invoiceninja.git
				synced 2025-10-31 12:57:30 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			133 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
		
			4.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| 
 | |
| /**
 | |
|  * Invoice Ninja (https://invoiceninja.com).
 | |
|  *
 | |
|  * @link https://github.com/invoiceninja/invoiceninja source repository
 | |
|  *
 | |
|  * @copyright Copyright (c) 2021. Invoice Ninja LLC (https://invoiceninja.com)
 | |
|  *
 | |
|  * @license https://www.elastic.co/licensing/elastic-license
 | |
|  */
 | |
| 
 | |
| namespace App\PaymentDrivers\Factory;
 | |
| 
 | |
| use App\Models\Company;
 | |
| use App\Models\GatewayType;
 | |
| 
 | |
| class SquareCustomerFactory
 | |
| {
 | |
| 
 | |
|     /*
 | |
| {
 | |
|       "id": "A537H7KAQWSAF8M8EM1Y23E16M",
 | |
|       "created_at": "2021-10-28T20:19:07.692Z",
 | |
|       "updated_at": "2024-01-09T20:14:21Z",
 | |
|       "cards": [
 | |
|         {
 | |
|           "id": "ccof:oG9wEmGAvoAnrBGt3GB",
 | |
|           "card_brand": "VISA",
 | |
|           "last_4": "5858",
 | |
|           "exp_month": 10,
 | |
|           "exp_year": 2023,
 | |
|           "cardholder_name": "Amelia Earhart",
 | |
|           "billing_address": {
 | |
|             "address_line_1": "500 Electric Ave",
 | |
|             "locality": "New York",
 | |
|             "administrative_district_level_1": "NY",
 | |
|             "postal_code": "94103",
 | |
|             "country": "US"
 | |
|           }
 | |
|         },
 | |
|         {
 | |
|           "id": "gftc:06c30c2b9772458a9e87b2880ee2ce1a",
 | |
|           "card_brand": "SQUARE_GIFT_CARD",
 | |
|           "last_4": "0895",
 | |
|           "exp_month": 12,
 | |
|           "exp_year": 2050,
 | |
|           "billing_address": {
 | |
|             "postal_code": "94103"
 | |
|           }
 | |
|         }
 | |
|       ],
 | |
|       "given_name": "Amelia",
 | |
|       "family_name": "Earhart",
 | |
|       "email_address": "Amelia.Earhart@example.com",
 | |
|       "address": {
 | |
|         "address_line_1": "123 Main St",
 | |
|         "locality": "Seattle",
 | |
|         "administrative_district_level_1": "WA",
 | |
|         "postal_code": "98121",
 | |
|         "country": "US"
 | |
|       },
 | |
|       "phone_number": "1-212-555-4240",
 | |
|       "note": "a customer on seller account",
 | |
|       "reference_id": "YOUR_REFERENCE_ID",
 | |
|       "company_name": "ACME",
 | |
|       "preferences": {
 | |
|         "email_unsubscribed": false
 | |
|       },
 | |
|       "creation_source": "THIRD_PARTY",
 | |
|       "segment_ids": [
 | |
|         "8QJTJCE6AZSN6.REACHABLE",
 | |
|         "8QJTJCE6AZSN6.CARDS_ON_FILE",
 | |
|         "gv2:8H24YRM74H2030XWJWP9F0MAEW",
 | |
|         "gv2:4TR2NFVP8N63D9K1FZ5E62VD78"
 | |
|       ],
 | |
|       "version": 4
 | |
|     },
 | |
|     */
 | |
| 
 | |
|     public function convertToNinja($customer, Company $company): array
 | |
|     {
 | |
|         $cards = [];
 | |
| 
 | |
| 
 | |
|         foreach($customer->getCards() ?? [] as $card){
 | |
|             
 | |
|             $meta = new \stdClass;
 | |
|             $meta->exp_month = $card->getExpMonth();
 | |
|             $meta->exp_year = $card->getExpYear();
 | |
|             $meta->last4 = $card->getLast4();
 | |
|             $meta->brand = $card->getCardBrand();
 | |
|             $meta->type = GatewayType::CREDIT_CARD;
 | |
| 
 | |
|             $cards[] = [
 | |
|                 'token' => $card->getId(),
 | |
|                 'payment_meta' => $meta,
 | |
|                 'payment_method_id' => GatewayType::CREDIT_CARD,
 | |
|                 'gateway_customer_reference' => $customer->getId(),
 | |
|             ];
 | |
|         }
 | |
| 
 | |
|         $address = $customer->getAddress();
 | |
|         
 | |
|         return
 | |
|             collect([
 | |
|                 'name' => $customer->getCompanyName() ?? ($customer->getGivenName() ?? '' ." " . $customer->getFamilyName() ?? ''),
 | |
|                 'contacts' => [
 | |
|                     [
 | |
|                         'first_name' => $customer->getGivenName(),
 | |
|                         'last_name' => $customer->getFamilyName(),
 | |
|                         'email' => $customer->getEmailAddress(),
 | |
|                         'phone' => $customer->getPhoneNumber(),
 | |
|                     ]
 | |
|                 ],
 | |
|                 'currency_id' => $company->settings->currency_id,
 | |
|                 'address1' => $address->getAddressLine1(),
 | |
|                 'address2' => $address->getAddressLine2(),
 | |
|                 'city' => $address->getLocality(),
 | |
|                 'state' => $address->getAdministrativeDistrictLevel1(),
 | |
|                 'postal_code' => $address->getPostalCode(),
 | |
|                 'country_id' => '840',
 | |
|                 'settings' => [
 | |
|                     'currency_id' => $company->settings->currency_id,
 | |
|                 ],
 | |
|                 'cards' => $cards,
 | |
|             ])
 | |
|             ->toArray();
 | |
| 
 | |
|     }
 | |
| 
 | |
| }
 |