Implement changeSubscriptionAmount method.
[trustcommerce.git] / trustcommerce.php
index afa2b0d07eddaf13097be70d83786a61d3f5c954..560cae34ff344d1741ee017907c0ea6b06d1031f 100644 (file)
@@ -140,7 +140,12 @@ class org_fsf_payment_trustcommerce extends CRM_Core_Payment {
        * Convert back to dollars
        * Save the transaction ID
        */
+
+      if (CRM_Utils_Array::value('is_recur', $params) && $params['contributionRecurID']) {
+       $params['contributionRecurID'] = $reply['billingid'];
+      } 
       $params['trxn_id'] = $reply['transid'];
+
       $params['gross_amount'] = $tc_params['amount'] / 100;
 
       return $params;
@@ -247,6 +252,7 @@ class org_fsf_payment_trustcommerce extends CRM_Core_Payment {
 
     $fields['cycle'] = '1'.$cycle;   /* The billing cycle in years, months, weeks, or days. */
     $fields['payments'] = $payments;
+    $fields['authnow'] = 'y';
     $fields['action'] = 'store';      /* Change our mode to `store' mode. */
 
     return $fields;
@@ -276,6 +282,11 @@ class org_fsf_payment_trustcommerce extends CRM_Core_Payment {
       // TODO FIXME be more or less specific? 
       // declinetype can be: decline, avs, cvv, call, expiredcard, carderror, authexpired, fraud, blacklist, velocity
       // See TC documentation for more info
+      switch($reply['declinetype']) {
+      case 'avs':
+       return self::error(9009, "Your transaction was declined for address verification reasons. If your address was correct please contact us at donate@fsf.org before attempting to retry your transaction.");
+       break;
+      }
       return self::error(9009, "Your transaction was declined: {$reply['declinetype']}");
       break;
     case self::AUTH_BADDATA:
@@ -424,7 +435,32 @@ class org_fsf_payment_trustcommerce extends CRM_Core_Payment {
     /* We are done, pass success */
     return TRUE;
   }
+
+  function changeSubscriptionAmount(&$message = '', $params = array()) {
+    $tc_params['custid'] = $this->_getParam('user_name');
+    $tc_params['password'] = $this->_getParam('password');
+    $tc_params['action'] = 'store';
+
+    $tc_params['billingid'] = CRM_Utils_Array::value('subscriptionId', $params);
+    $tc_params['payments'] = CRM_Utils_Array::value('installments', $params);
+    $tc_params['amount'] = CRM_Utils_Array::value('amount', $params) * 100;
+
+    if($tc_params['payments'] == 1) {
+      $tc_params['payments'] = 0;
+    }
+    $reply = $this->_sendTCRequest($tc_params);
+    $result = $this->_getTCReply($reply);
+
+    /* Test if call failed */
+    if(!$result) {
+      return self::error(9002, 'Could not initiate connection to payment gateway');
+    }
+
+    /* We are done, pass success */
+    return TRUE;
+
+    }
+
   public function install() {
     return TRUE;
   }