Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Paypal Recurring Payment Transaction Error: 11502 : Token is invalid

I am new to paypal and I need to implement a subscription ( recurring payment) for my client.I am using paypal sandbox for its implementation. I followed the way that the paypal insists for creating a recurring payment profile. On getting "success" acknowlegment from SetExpressCheckout, GetExpressCheckOut and DoExpressCheckOut . I have tried to create the Recurring Payment Profile with the token from the DoExpressCheckOutpayment response, but the response from the CreateRecurrinpayment profile returns failure, stating that the toke in ivnalid. I tried by setting "BILLINGAGREEMENTDESCRIPTION and BILLINGTYPE=RecurringPayments" on my set express checkout request but also the same error persists.

Please find the code I used to implement the recurring deposit below.

SetEXpressCheckout

{
NameValueCollection values = new NameValueCollection();

            values["METHOD"] = "SetExpressCheckout";

            values["RETURNURL"] = PayPalSettings.ReturnUrl;

            values["CANCELURL"] = PayPalSettings.CancelUrl;

            values["PAYMENTACTION"] = "Sale";

            values["CURRENCYCODE"] = "USD";

            values["BUTTONSOURCE"] = "PP-ECWizard";

            values["USER"] = PayPalSettings.Username;

            values["PWD"] = PayPalSettings.Password;

            values["SIGNATURE"] = PayPalSettings.Signature;

            values["SUBJECT"] = "";

            values["L_NAME0"] = "MyName";

            values["L_AMT0"] = "20.00";

            values["VERSION"] = "2.3";

            values["AMT"] = PayPalSettings.OrderAmount;

            values["L_BILLINGTYPE0"] = "RecurringPayments";

            values["L_BILLINGAGREEMENTDESCRIPTION0"] = "Test subscription";





            values = Submit(values);



            string ack = values["ACK"].ToLower();



            if (ack == "success" || ack == "successwithwarning")

            {

                return new PayPalRedirect

                {

                    Token = values["TOKEN"],
                    Url = String.Format("https://{0}/cgi-bin/webscr?cmd=_express-checkout&token={1}",
                       PayPalSettings.CgiDomain, values["TOKEN"])
                 };
            }
             else
            {
            throw new Exception(values["L_LONGMESSAGE0"]);
            }
}

Submit

private static NameValueCollection Submit(NameValueCollection values)

        {

            string data = String.Join("&", values.Cast<string>()

              .Select(key => String.Format("{0}={1}", key, HttpUtility.UrlEncode(values[key]))));



            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(

               String.Format("https://{0}/nvp", PayPalSettings.ApiDomain));



            request.Method = "POST";

            request.ContentLength = data.Length;



            using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))

            {

                writer.Write(data);

            }



            using (StreamReader reader = new StreamReader(request.GetResponse().GetResponseStream()))

            {

                return HttpUtility.ParseQueryString(reader.ReadToEnd());

            }

        }

GetExpressCheckout

public ActionResult Success(string token)

    {

        GetExpressCheckout getExpressCheckout = new GetExpressCheckout();

        GetExpressCheckoutDetailsResponseType getExpressCheckoutResponse = getExpressCheckout.ECGetExpressCheckoutCode(token);



        if (getExpressCheckoutResponse.Ack == AckCodeType.Success)

        {

            ExpressCheckout expressCheckout = new ExpressCheckout();

            DoExpressCheckoutPaymentResponseType doExpressCheckoutResponse = expressCheckout.DoExpressCheckoutPayment

                                                        (

                                                            token,

                                                            getExpressCheckoutResponse.GetExpressCheckoutDetailsResponseDetails.PayerInfo.PayerID,

                                                            PayPalSettings.OrderAmount,

                                                            PaymentActionCodeType.Sale,

                                                            CurrencyCodeType.USD

                                                        );



            if (doExpressCheckoutResponse.Ack == AckCodeType.Success)

            {

CreateRecurringPaymentsProfile createRecurringPaymentsProfile = new CreateRecurringPaymentsProfile();               

                CreateRecurringPaymentsProfileResponseType recurringPaymentProfileResponse = createRecurringPaymentsProfile.CreateRecurringPaymentsProfileCode(

                                                                                                doExpressCheckoutResponse.DoExpressCheckoutPaymentResponseDetails.Token,

                                                                                                doExpressCheckoutResponse.Timestamp,

                                                                                                PayPalSettings.OrderAmount,

                                                                                                1,

                                                                                                BillingPeriodType.Month,

                                                                                                CurrencyCodeType.USD

                                                                                                );

                if (recurringPaymentProfileResponse.Ack == AckCodeType.Success)

                {
}

CreateReEcurringPaymentsProfile

public CreateRecurringPaymentsProfileResponseType CreateRecurringPaymentsProfileCode(string token, DateTime date, string amount, int BF, BillingPeriodType BP, CurrencyCodeType currencyCodeType)

              {

                     CallerServices caller = new CallerServices();



                     IAPIProfile profile = ProfileFactory.createSignatureAPIProfile();



            // Set up your API credentials, PayPal end point, and API version.

            profile.APIUsername = PayPalSettings.Username;

            profile.APIPassword = PayPalSettings.Password;

            profile.APISignature = PayPalSettings.Signature;

                     profile.Environment="sandbox";

                     caller.APIProfile = profile;





                     // Create the request object.

                    CreateRecurringPaymentsProfileRequestType pp_request=new CreateRecurringPaymentsProfileRequestType();

                     pp_request.Version="51.0";



            // Add request-specific fields to the request.

                     pp_request.CreateRecurringPaymentsProfileRequestDetails= new CreateRecurringPaymentsProfileRequestDetailsType();

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.Token=token;

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.RecurringPaymentsProfileDetails=new RecurringPaymentsProfileDetailsType();

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.RecurringPaymentsProfileDetails.BillingStartDate=date;

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails=new ScheduleDetailsType();

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails.PaymentPeriod=new BillingPeriodDetailsType();

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails.PaymentPeriod.Amount=new BasicAmountType();

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails.PaymentPeriod.Amount.Value =amount ;

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails.PaymentPeriod.Amount.currencyID= currencyCodeType;//Enum for currency code is  CurrencyCodeType.USD

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails.PaymentPeriod.BillingFrequency=BF;

                     pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails.PaymentPeriod.BillingPeriod=BP;////Enum for BillingPeriod is  BillingPeriodType.Day

            //pp_request.Version = "51.0";



            pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails.Description = "Test subscription";

            //pp_request.CreateRecurringPaymentsProfileRequestDetails.ScheduleDetails.Description



            // Execute the API operation and obtain the response.

                     CreateRecurringPaymentsProfileResponseType pp_response=new CreateRecurringPaymentsProfileResponseType();

                     pp_response= (CreateRecurringPaymentsProfileResponseType) caller.Call("CreateRecurringPaymentsProfile", pp_request);

                     return pp_response;

              }

Any help will be greatly appreciated.

Thanks in advance

like image 341
Sujith S Nair Avatar asked Feb 06 '13 07:02

Sujith S Nair


People also ask

Why do I keep getting an error message on PayPal?

There are many reasons why a student may encounter an error message while using the PayPal checkout - they could be seeing an error due to insufficient funds, a processing issue or outage on PayPal's side, the student's bank blocking the purchase for security reasons, or a number of other reasons.

Does PayPal allow for recurring payments?

Organise recurring payments with easeUse PayPal Automatic Payments to pay and manage all your recurring bills, monthly subscriptions and even instalment plans, all in one place. Use PayPal Automatic Payments to pay and manage all your recurring bills, monthly subscriptions and even instalment plans, all in one place.

How do I manage recurring payments on PayPal?

Log into your PayPal account. Hover over your account profile or click the Settings icon then select the Account settings option. Search for the "Automatic payments" then click Update beside the Automatic payments option. From your recurring payments dashboard, filter the list to display only Active profiles.


1 Answers

Sujth , The correct version to be given is 51.0 for your need. Happy Coding!

like image 73
BonDaviD Avatar answered Oct 19 '22 06:10

BonDaviD