<?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'); $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, '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, ]; $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; } /** * 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']); 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'); }