2012-04-22 26 views
2

当用户在我的网站上升级订阅时,我接触到IPN,然后我想使用PHP联系贝宝以取消任何现有的订阅他们可能有。我该怎么做呢?我只能找到如何使用用户必须点击的按钮。如何使用PHP自动取消订阅用户(当他们升级到不同的订阅时)

+0

网站付款标准版或专业版? – Yaniro 2012-04-22 10:15:39

+0

网站付款标准 – 2012-04-22 14:38:26

+1

那么,据我所知,你不能自动做到这一点,你只能将用户重定向到他/她的PayPal帐户,并让他/她手动取消订阅(不幸的是,这是我的现在就做吧......) – Yaniro 2012-04-22 14:40:25

回答

1

这是最好的解决方案,我发现:

http://thereforei.am/2012/07/03/cancelling-subscriptions-created-with-paypal-standard-via-the-express-checkout-api/

/** 
* Performs an Express Checkout NVP API operation as passed in $action. 
* 
* Although the PayPal Standard API provides no facility for cancelling a subscription, the PayPal 
* Express Checkout NVP API can be used. 
*/ 
function change_subscription_status($profile_id, $action) { 

    $api_request = 'USER=' . urlencode('api_username') 
       . '&PWD=' . urlencode('api_password') 
       . '&SIGNATURE=' . urlencode('api_signature') 
       . '&VERSION=76.0' 
       . '&METHOD=ManageRecurringPaymentsProfileStatus' 
       . '&PROFILEID=' . urlencode($profile_id) 
       . '&ACTION=' . urlencode($action) 
       . '&NOTE=' . urlencode('Profile cancelled at store'); 

    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, 'https://api-3t.sandbox.paypal.com/nvp'); // For live transactions, change to 'https://api-3t.paypal.com/nvp' 
    curl_setopt($ch, CURLOPT_VERBOSE, 1); 

    // Uncomment these to turn off server and peer verification 
    // curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); 
    // curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 

    // Set the API parameters for this transaction 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $api_request); 

    // Request response from PayPal 
    $response = curl_exec($ch); 

    // If no response was received from PayPal there is no point parsing the response 
    if(! $response) 
     die('Calling PayPal to change_subscription_status failed: ' . curl_error($ch) . '(' . curl_errno($ch) . ')'); 

    curl_close($ch); 

    // An associative array is more usable than a parameter string 
    parse_str($response, $parsed_response); 

    return $parsed_response; 
} 

例子:

change_subscription_status('I-NARPL1C00000', 'Cancel'); 

我希望它能帮助

+0

很酷!我现在没有一个活跃的项目来测试,但很高兴知道现在有一个解决方案。你有没有做任何不同的事情使用NVP API,或者你可以使用标准的API,除了这个功能(来自没有NVP经验的人) – 2014-12-23 18:07:42

+1

@SabrinaGelbart真诚的,我还没有使用这个API的任何更多的东西。我只是在寻找解决方案,我很幸运地找到了这个博客。 在这里,你有所有的NVP可用的方法及其文档的API参考:https://developer.paypal.com/webapps/developer/docs/classic/api/ 希望得到这个帮助! – 2014-12-23 21:11:07