You are here

SquareApi.php in Commerce Square Connect 7

Square Connect SDK wrapper.

File

includes/SquareApi.php
View source
<?php

/**
 * @file
 * Square Connect SDK wrapper.
 */
use SquareConnect\Api\LocationsApi;
use SquareConnect\Api\TransactionsApi;
use SquareConnect\ApiClient;
use SquareConnect\Configuration;
use SquareConnect\Model\CreateRefundRequest;
use SquareConnect\Model\Money;

/**
 * A wrapper around the Square Connect SDK.
 */
class SquareApi {
  protected $client;

  /**
   * Creates a new SquareApi object.
   *
   * @param string $access_token
   *   The access token.
   * @param string $mode
   *   The mode: test or live.
   */
  public function __construct($access_token, $mode) {
    libraries_load('square');
    $configuration = new Configuration();
    $configuration
      ->setAccessToken($access_token);
    if ($mode === 'test') {
      $configuration
        ->setHost('https://connect.squareupsandbox.com');
    }
    $this->client = new ApiClient($configuration);
  }

  /**
   * Create a class instance from a payment method instance.
   *
   * @param string $instance_id
   *   The payment method instance ID.
   *
   * @return self
   *   The Square API wrapper.
   */
  public static function createFromInstanceId($instance_id) {
    $square_settings = variable_get('commerce_square_settings', commerce_square_default_settings()) + commerce_square_default_settings();
    $payment_method = commerce_payment_method_instance_load($instance_id);
    $mode = $payment_method['settings']['mode'];
    return new self($square_settings[$mode . '_access_token'], $mode);
  }

  /**
   * Gets the client.
   *
   * @return \SquareConnect\ApiClient
   *   The API client.
   */
  public function getClient() {
    return $this->client;
  }

  /**
   * Get locations.
   *
   * @return \SquareConnect\Model\Location[]
   *   The locations.
   */
  public function getLocations() {
    $location_api = new LocationsApi($this
      ->getClient());
    $location_api
      ->listLocations();
    return $location_api
      ->listLocations()
      ->getLocations();
  }

  /**
   * Voids a transaction.
   *
   * @param object $transaction
   *   The payment transaction.
   *
   * @return \SquareConnect\Model\VoidTransactionResponse
   *   The transaction response.
   */
  public function void($transaction) {
    $payment_method = commerce_payment_method_instance_load($transaction->instance_id);
    $mode = $payment_method['settings']['mode'];
    $location_id = $mode = $payment_method['settings'][$mode . '_location_id'];
    list($transaction_id, $tender_id) = explode('|', $transaction->remote_id);
    $transaction_api = new TransactionsApi($this
      ->getClient());
    return $transaction_api
      ->voidTransaction($location_id, $transaction_id);
  }

  /**
   * Refunds a transaction.
   *
   * @param object $transaction
   *   The payment transaction.
   * @param int $amount
   *   The amount.
   *
   * @return \SquareConnect\Model\CreateRefundResponse
   *   The transaction response.
   */
  public function refund($transaction, $amount) {
    $payment_method = commerce_payment_method_instance_load($transaction->instance_id);
    $mode = $payment_method['settings']['mode'];
    $location_id = $mode = $payment_method['settings'][$mode . '_location_id'];
    list($transaction_id, $tender_id) = explode('|', $transaction->remote_id);
    $transaction_api = new TransactionsApi($this
      ->getClient());
    $refund_request = new CreateRefundRequest(array(
      'idempotency_key' => uniqid(),
      'tender_id' => $tender_id,
      'amount_money' => new Money(array(
        'amount' => (int) $amount,
        'currency' => $transaction->currency_code,
      )),
      'reason' => 'Refunded through store backend',
    ));
    return $transaction_api
      ->createRefund($location_id, $transaction_id, $refund_request);
  }

  /**
   * Captures a transaction.
   *
   * @param object $transaction
   *   The payment transaction.
   *
   * @return \SquareConnect\Model\CaptureTransactionResponse
   *   The transaction response.
   */
  public function capture($transaction) {
    $payment_method = commerce_payment_method_instance_load($transaction->instance_id);
    $mode = $payment_method['settings']['mode'];
    $location_id = $mode = $payment_method['settings'][$mode . '_location_id'];
    list($transaction_id, $tender_id) = explode('|', $transaction->remote_id);
    $transaction_api = new TransactionsApi($this
      ->getClient());
    return $transaction_api
      ->captureTransaction($location_id, $transaction_id);
  }

}

Classes

Namesort descending Description
SquareApi A wrapper around the Square Connect SDK.