Skip to content
Snippets Groups Projects
Importsubscription.php 3.88 KiB
Newer Older
  • Learn to ignore specific revisions
  • mattwire's avatar
    mattwire committed
    <?php
    /*
     +--------------------------------------------------------------------+
     | Copyright CiviCRM LLC. All rights reserved.                        |
     |                                                                    |
     | This work is published under the GNU AGPLv3 license with some      |
     | permitted exceptions and without any warranty. For full license    |
     | and copyright information, see https://civicrm.org/licensing       |
     +--------------------------------------------------------------------+
     */
    
    use CRM_Stripe_ExtensionUtil as E;
    
    /**
     * @param array $spec
     */
    function _civicrm_api3_stripe_importsubscription_spec(&$spec) {
      $spec['subscription']['title'] = E::ts('Stripe Subscription ID');
      $spec['subscription']['type'] = CRM_Utils_Type::T_STRING;
      $spec['subscription']['api.required'] = TRUE;
      $spec['contact_id']['title'] = E::ts('Contact ID');
    
      $spec['contact_id']['description'] = E::ts('If not specified this will be determined from the "customer" on the subscription - a StripeCustomer record must exist in CiviCRM');
    
    mattwire's avatar
    mattwire committed
      $spec['contact_id']['type'] = CRM_Utils_Type::T_INT;
      $spec['ppid']['title'] = E::ts('Payment Processor ID');
      $spec['ppid']['type'] = CRM_Utils_Type::T_INT;
      $spec['ppid']['api.required'] = TRUE;
    
      $spec['recur_id']['title'] = E::ts('Contribution Recur ID');
      $spec['recur_id']['type'] = CRM_Utils_Type::T_INT;
      $spec['contribution_id']['title'] = E::ts('Contribution ID');
      $spec['contribution_id']['type'] = CRM_Utils_Type::T_INT;
      $spec['membership_id']['title'] = E::ts('Membership ID');
      $spec['membership_id']['type'] = CRM_Utils_Type::T_INT;
      $spec['membership_auto']['title'] = E::ts('Link to existing membership automatically');
      $spec['membership_auto']['type'] = CRM_Utils_Type::T_BOOLEAN;
      $spec['membership_auto']['api.default'] = TRUE;
      $spec['financial_type_id'] = [
    
        'title' => E::ts('Financial Type ID'),
        'type' => CRM_Utils_Type::T_STRING,
    
    mattwire's avatar
    mattwire committed
        'pseudoconstant' => [
          'table' => 'civicrm_financial_type',
          'keyColumn' => 'id',
          'labelColumn' => 'name',
        ],
    
        'api.default' => 1,
      ];
      $spec['payment_instrument_id'] = [
        'title' => E::ts('Payment Instrument ID'),
        'type' => CRM_Utils_Type::T_STRING,
        'api.default' => 1,
    
    mattwire's avatar
    mattwire committed
      ];
      $spec['contribution_source'] = [
        'title' => 'Contribution Source (optional description for contribution)',
        'type' => CRM_Utils_Type::T_STRING,
      ];
    
      $spec['is_email_receipt']['title'] = E::ts('Send Email Receipt (default: no)');
      $spec['is_email_receipt']['type'] = CRM_Utils_Type::T_BOOLEAN;
      $spec['is_email_receipt']['api.default'] = FALSE;
    
    mattwire's avatar
    mattwire committed
    }
    
    
    /**
     * API to import a stripe subscription, create a customer, recur, contribution and optionally link to membership
     * You run it once for each subscription and it creates/updates a recurring contribution in civicrm (and optionally links it to a membership).
     *
     * @param array $params
     *
     * @return array
     * @throws \API_Exception
     * @throws \CRM_Core_Exception
     * @throws \CiviCRM_API3_Exception
     * @throws \Stripe\Exception\ApiErrorException
     */
    function civicrm_api3_stripe_importsubscription($params) {
      $importer = new \Civi\StripeImport\Subscription();
      $importer->setPaymentProcessorID($params['ppid']);
      $importer->setStripeSubscriptionID($params['subscription']);
    
    mattwire's avatar
    mattwire committed
      if (!empty($params['contact_id'])) {
        $importer->setContactID($params['contact_id']);
      }
    
      if (!empty($params['recur_id'])) {
        $importer->setContributionRecurID($params['recur_id']);
      }
      $importer->setEmailReceipt($params['is_email_receipt']);
      if (!empty($params['membership_id'])) {
        $importer->setMembershipID($params['membership_id']);
      }
      $importer->setMembershipAuto($params['membership_auto']);
      $importer->setFinancialTypeID($params['financial_type_id']);
      $importer->setPaymentInstrumentID($params['payment_instrument_id']);
    
      $return = $importer->importOne();
    
      return civicrm_api3_create_success($return, $params, 'StripeSubscription', 'import');
    }