2017-05-10 4 views
0

J'ai donc commencé ce petit cours pour faire des annulations, des remboursements et des annulations d'abonnement PayPal. Ma question est la suivante: quelle est la pratique recommandée? Je veux dire, devrais-je essayer d'annuler la transaction, puis ignorer l'erreur, puis le rembourser, puis annuler l'abonnement? Remarque: dans mon cas, la transaction a été lancée à partir d'un clic sur un bouton d'abonnement PayPal, puis elle a été renouvelée une fois après la période de 6 mois, puis le client voulait un remboursement et arrêter d'autres abonnements.Quelle est la pratique recommandée sur l'API PayPal NVP avec l'arrêt et le remboursement des abonnements?

<?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 

Répondre

0

Par essais et erreurs dans le bac à sable, je trouve ce que le flux de travail doit être:

  1. Passer vide. Selon un représentant de PayPal: "Les annulations ne sont valables que pour les autorisations et les commandes, et vous ne pouvez pas les créer via un abonnement."

  2. Oui, remboursement. Il exécute le txn_id, qui est unique pour chaque sous-paiement que vous recevez dans le processus d'abonnement. Ainsi, vous ne rembourserez que le dernier paiement de souscription que vous avez reçu sur votre IPN. Oui, annuler l'abonnement - le remboursement seul ne fera pas cette étape pour vous.

2

Passer l'étape d'annulation. Les annulations ne sont valides que pour les autorisations et les commandes, et vous ne pouvez pas les créer via un abonnement. Mais oui, vous devrez annuler l'abonnement et rembourser les paiements individuels.