2012-04-22 111 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