简体   繁体   English

Paypal定期付款交易错误:11502:令牌无效

[英]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. 我是paypal的新手,我需要为我的客户实现订阅(定期付款)。我正在使用paypal沙箱进行实施。 I followed the way that the paypal insists for creating a recurring payment profile. 我遵循paypal坚持创建定期付款资料的方式。 On getting "success" acknowlegment from SetExpressCheckout, GetExpressCheckOut and DoExpressCheckOut . 从SetExpressCheckout,GetExpressCheckOut和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. 我尝试使用DoExpressCheckOutpayment响应中的令牌创建循环付款配置文件,但来自CreateRecurrinpayment配置文件的响应返回失败,说明了ivnalid中的toke。 I tried by setting "BILLINGAGREEMENTDESCRIPTION and BILLINGTYPE=RecurringPayments" on my set express checkout request but also the same error persists. 我试着通过设置快速结账请求设置“BILLINGAGREEMENTDESCRIPTION和BILLINGTYPE = RecurringPayments”,但同样的错误仍然存​​在。

Please find the code I used to implement the recurring deposit below. 请在下面找到我用于实施定期存款的代码。

SetEXpressCheckout 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 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 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 提前致谢

Sujth , The correct version to be given is 51.0 for your need. Sujth,正确的版本是51.0满足您的需求。 Happy Coding! 快乐的编码!

In your SetExpressCheckout call, set VERSION to something more recent, like 97.0 . 在SetExpressCheckout调用中,将VERSION设置为更新的内容,例如97.0 L_BILLINGTYPE0 and L_BILLINGAGREEMENTDESCRIPTION didn't exist in version 2.3, so the API doesn't recognize them. 版本2.3中不存在L_BILLINGTYPE0L_BILLINGAGREEMENTDESCRIPTION ,因此API无法识别它们。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM