При использовании ManageRecurringPaymentsProfileStatus через некоторое время из строк, возвращаемых для базы данных MySQL, вместо отмены только указанных подписок, PayPal завершает отмену всех их и отправляет запросы IPN с отменами.
Я провел несколько провероки цикл while получает только необходимые записи из базы данных.
Я не совсем понимаю, что происходит, и я хотел бы знать, может ли кто-нибудь помочь мне решить эту проблему, пожалуйста.
Цель состоит в том, чтобы отменить все подписки, кроме самой последней.
Вот исходный запрос:
$result = $db->query("SELECT * FROM REDACTED where subscr_id <>'" . $subscr_id . "' and txn_id <> '' and custom='" . $custom . "'");
while($row = mysqli_fetch_array($result))
{
$profileid = $row[119];
}
change_subscription_status( $profileid, 'Cancel' );
mysqli_free_result($result);
Это приводит к тому же проблемному поведению:
$result = $db->query("SELECT * FROM REDACTED where subscr_id <>'" . $subscr_id . "' and txn_id <> '' and custom='" . $custom . "'");
while($row = mysqli_fetch_array($result))
{
change_subscription_status( $row[119], 'Cancel' );
}
mysqli_free_result($result);
Здесьэто код функции:
<?php
/**
* 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( 'REDACTED' )
. '&PWD=' . urlencode( 'REDACTED' )
. '&SIGNATURE=' . urlencode( 'REDACTED' )
. '&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;
};
?>
Спасибо за ваше время и помощь, это очень ценится.