2010-09-28 2 views
25

Можете ли вы отменить автоматический платеж PayPal через API? Это «Подписка», созданная с помощью кнопки Hosted.Можете ли вы отменить автоматический платеж PayPal через API? (Подписка создана с помощью кнопки Hosted)

У меня есть «Автоматический номер платежа» и «Идентификатор транзакции».

ответ

26

Да.

Вы можете приостановить или отменить профиль, использованием ManageRecurringPaymentsProfileStatus API. Вы также можете активировать подвесной профиль . Если максимальный номер неудачных платежей уже достигнут , вам потребуется , чтобы увеличить количество неудачных платежей , прежде чем активировать профиль .

Пожалуйста найти this Ссылка:

Accodring к PAYPAL вы можете взять любой из трех действий, использующих ManagerecurringPayments API.

  • Отмена - Только профили в активном состоянии или Приостановленное состояние может быть отменено.
  • Suspend - Только профили в активном состоянии может быть suspended.-
  • Возобновить - только профили в взвешенном состоянии может быть возобновлен .--
+3

Разве это не только для "платежей Paypal Pro/Экспресс"? OP говорит о регулярной системе подписки PayPal. – erikcw

+1

Работала для меня, используя идентификатор подписки в качестве идентификатора профиля. – pat

+1

Вы не можете отменить старую подписку, используя API, как указано в ответе ниже. –

3

«подписка создается с помощью веб-сайта Платежи Standard «Подписаться». До 2009 года идентификатор профиля подписки начинался с S-XXXXXXXX. Вы не можете управлять этими подписками через любые вызовы API. После 2009 года идентификатор профиля подписки начинается с I-XXXXXX. Вы можете отменить эти подписки через вызов API ManageRecurringPaymentsProfileStatus ».

Имеет ту же проблему и просто прочитал ее Robert, и она работает, вы можете отменить стандартную подписку на сайт с использованием API.

+0

Что работает? У меня такая же проблема, и я не могу отменить S-подписки. – Tomas

+2

Да, вы не сможете отменить подписки на префикс 'S', используя API. –

+0

Как создать подписку с I-префиксом? – Tomas

0

Я не думаю, что вы можете использовать API для отмены платежа с помощью стандартного платежа Paypal pro pro, в то время как только экспресс-проверка будет работать. Я попробовал и получил сообщение об ошибке: «Профили подписки не поддерживаются API повторяющихся платежей». Вы можете узнать больше here.

+0

Вы получите эту ошибку только при попытке получить информацию о подписке. «Любая» подписка может иметь статус изменен. – gunwin

5

Я нашел эту тему, прежде чем найти решение, и подумал, что вернусь, чтобы дать ответ. (С #.Net Solution)

Вам потребуется следующие NuGet пакеты:

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

И следующие ссылки:

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

Вот код:

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

Ваш код был отличным и точным. Это помогло мне решить мою проблему. Благодарю. – Sunil