Php 关于PayPal NVP API停止和退款订阅的推荐做法是什么?

Php 关于PayPal NVP API停止和退款订阅的推荐做法是什么?,php,paypal,paypal-subscriptions,paypal-nvp,Php,Paypal,Paypal Subscriptions,Paypal Nvp,所以我开始了这门课,学习PayPal的作废、退款和取消订阅。我的问题是,推荐的做法是什么?我的意思是,我应该尝试取消交易,然后忽略错误,然后退款,然后取消订阅吗 注意,在我的例子中,交易是从点击PayPal订阅按钮开始的,然后在6个月期限结束后续费一次,然后客户要求退款并停止进一步订阅 <?php class Paypp { public static function voidCard($r) { $asData = array( 'METHOD' => 'DoVo

所以我开始了这门课,学习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

通过在沙盒中的反复试验,我找到了工作流程应该是什么:

  • 跳过空白。根据PayPal代表的说法:“无效信息仅对授权和订单有效,您不能通过订阅创建任何一个。”

  • 是的,退款。它以txn_id运行,该id对于您在订阅过程中收到的每个SubCr_付款都是唯一的。因此,您将只退还您在IPN上收到的最新subscr_付款

  • 是的,取消订阅——光是退款并不能帮你完成这一步


  • 通过在沙盒中的反复试验,我找到了工作流程应该是什么:

  • 跳过空白。根据PayPal代表的说法:“无效信息仅对授权和订单有效,您不能通过订阅创建任何一个。”

  • 是的,退款。它以txn_id运行,该id对于您在订阅过程中收到的每个SubCr_付款都是唯一的。因此,您将只退还您在IPN上收到的最新subscr_付款

  • 是的,取消订阅——光是退款并不能帮你完成这一步


  • 跳过无效步骤。无效仅对授权和订单有效,您不能通过订阅创建任何一个。但是,是的,您需要取消订阅并退还个人付款。

    跳过作废步骤。无效仅对授权和订单有效,您不能通过订阅创建任何一个。但是,是的,您需要取消订阅并退还个人付款