setName('T-Shirt of the Month Club Plan') ->setDescription('Template creation.') ->setType('fixed'); // # Payment definitions for this billing plan. $paymentDefinition = new PaymentDefinition(); // The possible values for such setters are mentioned in the setter method documentation. // Just open the class file. e.g. lib/PayPal/Api/PaymentDefinition.php and look for setFrequency method. // You should be able to see the acceptable values in the comments. $paymentDefinition->setName('Regular Payments') ->setType('REGULAR') ->setFrequency('Month') ->setFrequencyInterval("2") ->setCycles("12") ->setAmount(new Currency(['value' => '100', 'currency' => 'USD'])); // Charge Models $chargeModel = new ChargeModel(); $chargeModel->setType('SHIPPING') ->setAmount(new Currency(['value' => '10', 'currency' => 'USD'])); $paymentDefinition->setChargeModels(array($chargeModel)); $merchantPreferences = new MerchantPreferences(); $baseUrl = getBaseUrl(); $merchantPreferences->setReturnUrl("$baseUrl/ExecuteAgreement.php?success=true") ->setCancelUrl("$baseUrl/ExecuteAgreement.php?success=false") ->setAutoBillAmount("YES") ->setInitialFailAmountAction("CONTINUE") ->setMaxFailAttempts("0") ->setSetupFee(new Currency(['value' => '1', 'currency' => 'USD'])); $plan->setPaymentDefinitions(array($paymentDefinition)); $plan->setMerchantPreferences($merchantPreferences); // For Sample Purposes Only. $request = clone $plan; // ### Create Plan try { $output = $plan->create($apiContext); } catch (PayPal\Exception\PPConnectionException $ex) { echo "Exception: " . $ex->getMessage() . PHP_EOL; var_dump($ex->getData()); exit(1); } ResultPrinter::printResult("Created Plan", "Plan", $output->getId(), $request, $output); return $output;