<?php

require('vendor/autoload.php');

/**
 * Liqpay utils class for simplify work with Liqpay.
 */
class CRM_Liqpayintegration_Utils_LiqPay {

  /**
   * URL for checkout.
   *
   * @var string
   */
  public static $checkoutURL = 'https://www.liqpay.ua/api/3/checkout';

  /**
   * LiqPay object.
   *
   * @var object
   */
  public $liqPay;

  /**
   * CRM_Liqpayintegration_Utils_LiqPay constructor.
   *
   * @param null $publicKey
   * @param null $privateKey
   */
  public function __construct($publicKey, $privateKey) {
    $this->liqPay = new LiqPay($publicKey, $privateKey);
  }

  /**
   * @param $liqPayParams
   *
   * @return string
   */
  public function getCheckoutUrl($liqPayParams) {
    $liqPayData = self::encodeParams($liqPayParams);
    $liqPaySignature = $this->liqPay->cnb_signature($liqPayParams);
    $liqPayRedirectLink = self::$checkoutURL . '?data=' . $liqPayData . '&signature=' . $liqPaySignature;

    return $liqPayRedirectLink;
  }

  /**
   * @param $orderId
   */
  public function unsubscribe($orderId) {
    $this->liqPay->api('request', [
      'action' => 'unsubscribe',
      'version' => '3',
      'order_id' => $orderId,
    ]);
  }

  /**
   * encode_params
   *
   * @param array $params
   *
   * @return string
   */
  public static function encodeParams($params) {
    return base64_encode(json_encode($params));
  }

  /**
   * decode_params
   *
   * @param string $params
   *
   * @return array
   */
  public static function decodeParams($params) {
    return json_decode(base64_decode($params), TRUE);
  }

  /**
   * str_to_sign
   *
   * @param string $str
   *
   * @return string
   */
  public static function strToSign($str) {
    $signature = base64_encode(sha1($str, 1));

    return $signature;
  }

}
