Skip to content
Snippets Groups Projects
Api.php 3.69 KiB
Newer Older
<?php

class CRM_Stripe_Api {
  public static function getObjectParam($name, $stripeObject) {
    $className = get_class($stripeObject);
    switch ($className) {
      case 'Stripe\Charge':
        switch ($name) {
          case 'charge_id':
            return (string) $stripeObject->id;

          case 'failure_code':
            return (string) $stripeObject->failure_code;

          case 'failure_message':
            return (string) $stripeObject->failure_message;

          case 'refunded':
            return (bool) $stripeObject->refunded;

          case 'amount_refunded':
            return (int) $stripeObject->amount_refunded / 100;
        }
        break;

      case 'Stripe\Invoice':
        switch ($name) {
          case 'charge_id':
            return (string) $stripeObject->charge;

          case 'invoice_id':
            return (string) $stripeObject->id;

          case 'receive_date':
            return $stripeObject->date ? date("Y-m-d H:i:s", $stripeObject->date) : NULL;

          case 'subscription_id':
            return (string) $stripeObject->subscription;

          case 'amount':
            return (string) $stripeObject->amount_due / 100;

          case 'amount_paid':
            return (string) $stripeObject->amount_paid / 100;

          case 'amount_remaining':
            return (string) $stripeObject->amount_remaining / 100;

          case 'currency':
            return (string) mb_strtoupper($stripeObject->currency);

          case 'status_id':
            if ((bool) $stripeObject->paid) {
              return 'Completed';
            }
            else {
              return 'Pending';
            }

          case 'description':
            return (string) $stripeObject->description;

        }
        break;

      case 'Stripe\Subscription':
        switch ($name) {
          case 'frequency_interval':
            return (string) $stripeObject->plan->interval_count;

          case 'frequency_unit':
            return (string) $stripeObject->plan->interval;

          case 'plan_amount':
            return (string) $stripeObject->plan->amount / 100;

          case 'currency':
            return (string) mb_strtoupper($stripeObject->plan->currency);

          case 'plan_id':
            return (string) $stripeObject->plan->id;

          case 'plan_name':
            return (string) $stripeObject->plan->name;

          case 'plan_start':
            return $stripeObject->start ? date("Y-m-d H:i:s", $stripeObject->start) : NULL;

          case 'cycle_day':
            return date("d", $stripeObject->billing_cycle_anchor);

          case 'subscription_id':
            return (string) $stripeObject->id;

          case 'status_id':
            switch ($stripeObject->status) {
              case \Stripe\Subscription::STATUS_ACTIVE:
                return CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'In Progress');

              case \Stripe\Subscription::STATUS_CANCELED:
                return CRM_Core_PseudoConstant::getKey('CRM_Contribute_BAO_Contribution', 'contribution_status_id', 'Cancelled');

            }

          case 'customer_id':
            return (string) $stripeObject->customer;
        }
        break;
    }
    return NULL;
  }

  public static function getParam($name, $stripeObject) {
    // Common parameters
    switch ($name) {
      case 'customer_id':
        return (string) $stripeObject->customer;

      case 'event_type':
        return (string) $stripeObject->type;

      case 'previous_plan_id':
        if (preg_match('/\.updated$/', $stripeObject->type)) {
          return (string) $stripeObject->data->previous_attributes->plan->id;
        }
        break;
    }
    return NULL;
  }

}