* This function sends request and receives response from
* the processor
*
- * @param array $params
+ * @param array|PropertyBag $params
+ *
+ * @param string $component
+ *
+ * @return array
+ * Result array (containing at least the key payment_status_id)
*
- * @return array|object
- * @throws \Exception
+ * @throws \Civi\Payment\Exception\PaymentProcessorException
*/
- public function doDirectPayment(&$params) {
+ public function doPayment(&$params, $component = 'contribute') {
+ $propertyBag = \Civi\Payment\PropertyBag::cast($params);
+ $this->_component = $component;
+ $statuses = CRM_Contribute_BAO_Contribution::buildOptions('contribution_status_id', 'validate');
+
+ // If we have a $0 amount, skip call to processor and set payment_status to Completed.
+ // Conceivably a processor might override this - perhaps for setting up a token - but we don't
+ // have an example of that at the moment.
+ if ($propertyBag->getAmount() == 0) {
+ $result['payment_status_id'] = array_search('Completed', $statuses);
+ $result['payment_status'] = 'Completed';
+ return $result;
+ }
+
if ($params['is_recur'] == TRUE) {
throw new CRM_Core_Exception(ts('First Data - recurring payments not implemented'));
}
//=============
$params['trxn_result_code'] = $processorResponse['r_message'];
$params['trxn_id'] = $processorResponse['r_ref'];
+ $params['payment_status_id'] = array_search('Completed', $statuses);
+ $params['payment_status'] = 'Completed';
CRM_Core_Error::debug_log_message("r_authresponse " . $processorResponse['r_authresponse']);
CRM_Core_Error::debug_log_message("r_code " . $processorResponse['r_code']);
CRM_Core_Error::debug_log_message("r_tdate " . $processorResponse['r_tdate']);