Skip to content

I Manage to Make Recurring Work... Now How to Cancel Recurring Subscription and Reactivate? #3

@masterpowers

Description

@masterpowers

Your Code is Great But Lacks Sample...

I manage to Successfully make a Recurring payment...
With a Little Tweak from your Code example ....

Here i Plan to Create 1 Week Free Trial Then Do Monthly Subscription Until Cancelled
This is How i Do it...

As shown ... That my Code Example Below will work...
recurring profile
recurring

This is How i Do it...

I Imported Sync ,CreateRecurringPaymentProfile ,Api From Payum\Paypal\ExpressCheckout\Nvp

<?php

namespace App\Http\Controllers\Gateway;

use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Payum\Core\GatewayInterface;
use Payum\Core\Model\PaymentInterface;
use Payum\Core\Payum;
use Payum\Core\Request\GetHumanStatus;
use Payum\Core\Security\TokenInterface;
use Payum\Core\Storage\StorageInterface;
use Recca0120\LaravelPayum\Service\Payment;
use Payum\Paypal\ExpressCheckout\Nvp\Api;
use Payum\Core\Request\Sync;
use Payum\Paypal\ExpressCheckout\Nvp\Request\Api\CreateRecurringPaymentProfile;

prepare method ( Added Here All Needed Properties for Recurring)

public function prepare(Payment $payment)
  {
      return $payment->prepare('paypal_express_checkout', function (PaymentInterface $payment, $gatewayName, StorageInterface $storage, Payum $payum) {
          $payment->setNumber(uniqid());
          $payment->setCurrencyCode('PHP');// Needed For Payum to Work
          $payment->setClientId('customer-001'); // Auth User ID
          $payment->setClientEmail('customer@example.com'); // Auth User Email
          $payment->setDetails([
            'BRANDNAME' => 'My Company', // Provide name for cancel and return url
            'LOGOIMG' => 'https://profugo.org/wp-content/uploads/2013/08/logo-190x60.png', // Show at Top
            'SOLUTIONTYPE' => 'Mark', //Buyer must have a PayPal account to check out
            'LANDINGPAGE' => 'Login', // Billing(Credit Card) or Login Type Pages
            'CARTBORDERCOLOR' => '009688', // Border Color
            'CHANNELTYPE' => 'Merchant',
            'L_BILLINGTYPE0' => Api::BILLINGTYPE_RECURRING_PAYMENTS, // Enables Recurring
            'L_BILLINGAGREEMENTDESCRIPTION0' => '1 Week Free Trial then PREMIUM Membership ₱500 PHP Per Month', // Billing Agreement
            'PAYMENTREQUEST_0_AMT' => 0, // Zero Transaction
            'NOSHIPPING' => 1, // Enable no Shipping Fee for Digital Products
          ]);
      });
  }

done method ( with CreateRecurringPaymentProfile)


public function done(Payment $payment, Request $request, $payumToken)
    {
      return $payment->done($request, $payumToken, function (GetHumanStatus $status, PaymentInterface $payment, GatewayInterface $gateway, TokenInterface $token) {
        $agreement = $status->getModel();
        $payment->setClientEmail($agreement['EMAIL']);
        $payment->setDetails([
          'TOKEN' => $agreement['TOKEN'], // EC_SOMERANDOMESTRING
          'SUBSCRIBERNAME' => $agreement['SUBSCRIBERNAME'], // Paypal Name Used for Payment
          'DESC' =>  '1 Week Free Trial then PREMIUM Membership ₱500 PHP Per Month', // MUST BE THE SAME AS L_BILLINGAGREEMENTDESCRIPTION0
          'EMAIL' =>  $agreement['EMAIL'], // Paypal Email used for payment Useful if user uses different Email for Subscription
          'AMT' =>  500, // The Amount they Will pay per month
          'TAXAMT' => 60,
          'CURRENCYCODE' =>  'PHP',
          'BILLINGFREQUENCY' =>  1, // 1 per month
          'PROFILESTARTDATE' => date(DATE_ATOM), // Current Date
          'BILLINGPERIOD' => Api::BILLINGPERIOD_MONTH, // Per Month
          'MAXFAILEDPAYMENTS' => 3,
          'PROFILEREFERENCE' => 'order#1', // My Reference For That Order No#
          'TRIALBILLINGPERIOD' => Api::BILLINGPERIOD_WEEK, // Per Week
          'TRIALBILLINGFREQUENCY' => 1, // 1 Week
          'TRIALTOTALBILLINGCYCLES' => 1, // x1 Week
          'TRIALAMT' => 0 // FREE TRIAL at 0
        ]);

        $gateway->execute(new CreateRecurringPaymentProfile($payment));
        $gateway->execute(new Sync($payment));
          // Add Role or permission
          // Return RedirectTo Dashboard.
          // Check if Active, Pending, Cancelled , Suspended ,Expired
          return response()->json([
              'status' => $status->getValue(),
              'client' => [
                  'id'    => $payment->getClientId(),
                  'email' => $payment->getClientEmail(),
              ],
              'number'        => $payment->getNumber(),
              'description'   => $payment->getCurrencyCode(),
              'total_amount'  => $payment->getTotalAmount(),
              'currency_code' => $payment->getCurrencyCode(),
              'details'       => $payment->getDetails(),
          ]);
      });
    }

In My Routes File

Route::get('payment/paypal', [
    'uses' => 'Gateway\PaypalController@prepare',
    'as' => 'payment.paypal',
]);
Route::any('payment/paypal/done/{payumToken}', [
    'uses' => 'Gateway\PaypalController@done',
    'as' => 'payment.done',
]);

This Code Works to make Recuring Payment...

My Problem Now is

1.) How Can I Catch if a User Cancel it From Inside Paypal Site....?

2.) How Can a User Reactivate a Recurring Payment in Dashboard?

3.) How Can a User Cancel Recurring Payment In Dashboard...?

Can You Show me or Point me to the Right Path thanks

Also Please Also Make A Wiki For Examples, U can use mine for Recurring thanks

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions