2017-05-10 5 views
0

私はPayPalボイド、払い戻し、サブスクリプションキャンセルを行うために、この小さなクラスを始めました。私の質問は、お勧めの練習は何ですか?つまり、トランザクションを無効にしようとしたら、エラーを無視して払い戻しをしてから、契約をキャンセルする必要がありますか?PayPal NVP APIの推奨プラクティスとはどのようなものですか?

私のケースでは、PayPalサブスクリプションボタンのクリックからトランザクションが開始され、6ヶ月の期間が終了した後に1回更新され、顧客は払い戻しを希望し、さらにサブスクリプションを停止します。サンドボックスで試行錯誤しながら

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

、私は、ワークフローがどうあるべきかが見つかりました:

  1. スキップボイド。 PayPalの担当者によると、「無効はオーソリゼーションとオーダーにのみ有効で、サブスクリプションを通じて作成することはできません」

  2. はい、払い戻します。サブスクリプションプロセスで受け取ったすべてのsubscr_paymentに固有のtxn_idが再度実行されます。したがって、IPNで受け取った最新のsubscr_paymentのみを払い戻します。

  3. はい、申し込みをキャンセルします。払い戻しだけでは、あなたのためのステップはありません。

2

ボイドステップを省略します。空きはオーソリゼーションとオーダーにのみ有効で、サブスクリプションを通じて作成することはできません。しかし、はい、サブスクリプションをキャンセルし、個々の支払いを払い戻す必要があります。

関連する問題