Какова рекомендуемая практика использования API PayPal NVP с остановкой и возвратом подписок?

Итак, я начал этот небольшой класс для выполнения PayPal аннулирования, возмещения и отмены подписки. Мой вопрос: какова рекомендуемая практика? Я имею в виду, должен ли я попытаться аннулировать транзакцию, затем проигнорировать ошибку, затем вернуть ее, а затем отменить подписку?

Обратите внимание, что в моем случае транзакция была запущена нажатием на кнопку подписки PayPal, а затем она возобновлялась один раз по истечении 6-месячного периода, а затем клиент хотел вернуть деньги и прекратить дальнейшую подписку.

<?php

class Paypp {

public static function voidCard($r) {
$asData = array(
'METHOD' => 'DoVoid',
'AUTHORIZATIONID' =>  @ $r['paypal_txn_id'] // tnx_id from subscr_payment IPN
);
return self::_sendData($asData);
}

public static function cancelSubscription($r) {
$asData = array(
'METHOD' => 'ManageRecurringPaymentsProfileStatus',
'PROFILEID' =>  @ $r['paypal_subscr_profile_id'], // subscr_id from subscr_payment IPN
'ACTION' => 'cancel'
);
return self::_sendData($asData);
}

public static function refundCard($r) {
$asData = array(
'METHOD' => 'RefundTransaction',
'TRANSACTIONID' =>  @ $r['paypal_txn_id'],
'REFUNDTYPE' => 'full',
'CURRENCYCODE' => @ $r['currency'],
'AMT' => @ $r['gross']
);
return self::_sendData($asData);

}

private static function _sendData($asData) {
global $config;

$sActive = $config->PAYMENT_GATEWAY_DATA->pp->ACTIVE;
$sURL = $config->PAYMENT_GATEWAY_DATA->pp->$sActive->NVP_URL;

$sVersion = $config->PAYMENT_GATEWAY_DATA->pp->$sActive->NVP_VERSION;
$sUser = $config->PAYMENT_GATEWAY_DATA->pp->$sActive->NVP_USER;
$sPass = $config->PAYMENT_GATEWAY_DATA->pp->$sActive->NVP_PASS;
$sSig = $config->PAYMENT_GATEWAY_DATA->pp->$sActive->NVP_SIG;

$asExtra = array(
'VERSION' => $sVersion,
'USER' => $sUser,
'PWD' => $sPass,
'SIGNATURE' => $sSig
);
$asData = array_merge($asData,$asExtra);

$asOpt = array(
CURLOPT_HEADER => FALSE,
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_POSTFIELDS => http_build_query($asData),
CURLOPT_VERBOSE => TRUE,
);

$hCurl = curl_init($sURL);

curl_setopt_array($hCurl, $asOpt);
$bVerifySSL = @ $config->VERIFY_SSL;
curl_setopt($hCurl, CURLOPT_SSL_VERIFYPEER, $bVerifySSL);

$sResponse = curl_exec($hCurl);
curl_close($hCurl);
return $sResponse;

}} // end class

0

Решение

Пропустить шаг пустоты. Пустоты действительны только для авторизаций и заказов, и вы не можете создать ни через подписку. Но да, вам нужно отменить подписку и вернуть отдельные платежи.

2

Другие решения

Методом проб и ошибок в песочнице я обнаружил, каким должен быть рабочий процесс:

  1. Пропустить void. По словам представителя PayPal: «Пустоты действительны только для авторизаций и заказов, и вы не можете создать ни через подписку».

  2. Да, возврат. Он запускает снова txn_id, который уникален для каждой subscr_payment, которую вы получаете в процессе подписки. Таким образом, вы вернете только самую последнюю сумму subscr_payment, которую вы получили в своем IPN.

  3. Да, отмените подписку — только возврат не сделает этот шаг для вас.

0

По вопросам рекламы [email protected]