2010-09-28 16 views

Respuesta

26

Sí.

Puede suspender o cancelar un perfil de utilizando el ManageRecurringPaymentsProfileStatus API. También puede reactivar un perfil suspendido . Si se alcanzó el número máximo de pagos que ya se han alcanzado , necesitará para aumentar el número de pagos fallidos antes de reactivar el perfil .

Encuentre this Referencia:

Accodring a PAYPAL puede tomar cualquiera de las tres acciones que utilizan la API de ManagerecurringPayments.

  • Cancelar - Solo perfiles en activo o El estado suspendido se puede cancelar.
  • Suspender - Sólo los perfiles en estado activo puede ser suspended.-
  • Reactivar - Sólo los perfiles en un estado de suspensión puede reactivarse .--
+3

no se trata simplemente de "pagos PayPal Pro/Express"? El OP está hablando sobre el sistema de suscripción regular de PayPal. – erikcw

+1

Funcionó para mí utilizando la identificación de suscripción como ID de perfil. – pat

+1

No puede cancelar la suscripción anterior mediante API como se menciona en la respuesta a continuación. –

3

"Una suscripción se crea a través de un Pago estándar Botón 'Suscribir' Antes de 2009, el ID del perfil de suscripción comenzaba con S-XXXXXXXX. No puede administrar estas suscripciones a través de ninguna llamada API. Después de 2009, el ID del perfil de suscripción comienza con I-XXXXXX. Puede cancelar estos suscripciones a través de la llamada a la API ManageRecurringPaymentsProfileStatus ".

Estaba teniendo el mismo problema y acaba de leerlo por Robert y funciona, puede cancelar la suscripción al sitio web estándar mediante API.

+0

¿Qué funciona? Tengo el mismo problema y no puedo cancelar las suscripciones S. – Tomas

+2

Sí, no podrá cancelar suscripciones de prefijo 'S' mediante API. –

+0

¿Cómo crear una suscripción con el prefijo I-? – Tomas

0

No creo que pueda usar la API para cancelar un pago con el evento de pago estándar de Paypal, mientras que solo el pago exprés funcionará. Intenté y recibí el mensaje de error: "Los Perfiles de Suscripción no son compatibles con las API de Pago Recurrente". Puede encontrar más here.

+0

Solo obtendrá este error cuando intente recuperar los detalles de la suscripción. '' Cualquier '' suscripción puede tener su estado editado. – gunwin

5

Encontré este hilo antes de encontrar una solución, y pensé que volvería para dar la respuesta. (DO#.Solución neto)

se necesitan los siguientes paquetes NuGet:

Install-Package RestApiSDK 
Install-Package PayPalCoreSDK 
Install-Package PayPalMerchantSDK 

Y las siguientes referencias:

using PayPal.Api; 
using PayPal.PayPalAPIInterfaceService; 
using PayPal.PayPalAPIInterfaceService.Model; 

Aquí está el código:

public static void CancelRecurringPayment(string ProfileID) 
{ 
    ManageRecurringPaymentsProfileStatusRequestType request = 
     new ManageRecurringPaymentsProfileStatusRequestType(); 
    ManageRecurringPaymentsProfileStatusRequestDetailsType details = 
     new ManageRecurringPaymentsProfileStatusRequestDetailsType(); 
    request.ManageRecurringPaymentsProfileStatusRequestDetails = details; 

    details.ProfileID = ProfileID; 

    details.Action = StatusChangeActionType.CANCEL; 

    // Invoke the API 
    ManageRecurringPaymentsProfileStatusReq wrapper = new ManageRecurringPaymentsProfileStatusReq(); 
    wrapper.ManageRecurringPaymentsProfileStatusRequest = request; 

    Dictionary<string, string> configurationMap = new Dictionary<string, string>(); 

    configurationMap.Add("mode", "live"); 
    // Signature Credential 
    configurationMap.Add("account1.apiUsername", "APIUSERNAME"); 
    configurationMap.Add("account1.apiPassword", "APIPASSWORD"); 
    configurationMap.Add("account1.apiSignature", "APISIGNATURE"); 

    // Create the PayPalAPIInterfaceServiceService service object to make the API call 
    PayPalAPIInterfaceServiceService service = new PayPalAPIInterfaceServiceService(configurationMap); 

    ManageRecurringPaymentsProfileStatusResponseType manageProfileStatusResponse = 
       service.ManageRecurringPaymentsProfileStatus(wrapper); 

    // Check for API return status 

    Dictionary<string, string> responseParams = new Dictionary<string, string>(); 
    responseParams.Add("API Status", manageProfileStatusResponse.Ack.ToString()); 

    if (manageProfileStatusResponse.Ack.Equals(AckCodeType.FAILURE) || (manageProfileStatusResponse.Errors != null && manageProfileStatusResponse.Errors.Count > 0)) 
    { 
     //FAILURE 
     Console.WriteLine(manageProfileStatusResponse.Errors.ToString()); 
    } 
    else 
    { 
     //SUCCESS 
     Console.Write("Success!"); 
    } 
    Console.WriteLine(); 
} 
+1

Su código fue excelente y al grano. Me ayudó a resolver mi problema. Gracias. – Sunil

Cuestiones relacionadas