4 * Licensed to CiviCRM under the Academic Free License version 3.0.
6 * Written and contributed by Ideal Solution, LLC (http://www.idealso.com)
13 * @author Marshal Newrock <marshal@idealso.com>
14 * $Id: Dummy.php 45429 2013-02-06 22:11:18Z lobo $
18 * Dummy payment processor
20 class CRM_Core_Payment_Dummy
extends CRM_Core_Payment
{
21 const CHARSET
= 'iso-8859-1';
23 protected $_mode = NULL;
25 protected $_params = array();
26 protected $_doDirectPaymentResult = array();
29 * Set result from do Direct Payment for test purposes.
31 * @param array $doDirectPaymentResult
32 * Result to be returned from test.
34 public function setDoDirectPaymentResult($doDirectPaymentResult) {
35 $this->_doDirectPaymentResult
= $doDirectPaymentResult;
36 if (empty($this->_doDirectPaymentResult
['trxn_id'])) {
37 $this->_doDirectPaymentResult
['trxn_id'] = array();
40 $this->_doDirectPaymentResult
['trxn_id'] = (array) $doDirectPaymentResult['trxn_id'];
45 * We only need one instance of this object. So we use the singleton
46 * pattern and cache the instance in this variable
50 static private $_singleton = NULL;
56 * The mode of operation: live or test.
58 * @param $paymentProcessor
60 * @return \CRM_Core_Payment_Dummy
62 public function __construct($mode, &$paymentProcessor) {
64 $this->_paymentProcessor
= $paymentProcessor;
65 $this->_processorName
= ts('Dummy Processor');
69 * Submit a payment using Advanced Integration Method.
71 * @param array $params
72 * Assoc array of input parameters for this transaction.
75 * the result in a nice formatted array (or an error object)
77 public function doDirectPayment(&$params) {
78 // Invoke hook_civicrm_paymentProcessor
79 // In Dummy's case, there is no translation of parameters into
80 // the back-end's canonical set of parameters. But if a processor
81 // does this, it needs to invoke this hook after it has done translation,
82 // but before it actually starts talking to its proprietary back-end.
83 if (!empty($params['is_recur'])) {
84 $throwAnENoticeIfNotSetAsTheseAreRequired = $params['frequency_interval'] . $params['frequency_unit'];
86 // no translation in Dummy processor
87 $cookedParams = $params;
88 CRM_Utils_Hook
::alterPaymentProcessorParams($this,
92 // This means we can test failing transactions by setting a past year in expiry. A full expiry check would
94 if (!empty($params['credit_card_exp_date']['Y']) && date('Y') >
95 CRM_Core_Payment_Form
::getCreditCardExpirationYear($params)) {
96 $error = new CRM_Core_Error(ts('transaction failed'));
99 //end of hook invocation
100 if (!empty($this->_doDirectPaymentResult
)) {
101 $result = $this->_doDirectPaymentResult
;
102 $result['trxn_id'] = array_shift($this->_doDirectPaymentResult
['trxn_id']);
105 if ($this->_mode
== 'test') {
106 $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE 'test\\_%'";
108 $trxn_id = strval(CRM_Core_Dao
::singleValueQuery($query, $p));
109 $trxn_id = str_replace('test_', '', $trxn_id);
110 $trxn_id = intval($trxn_id) +
1;
111 $params['trxn_id'] = 'test_' . $trxn_id . '_' . uniqid();
114 $query = "SELECT MAX(trxn_id) FROM civicrm_contribution WHERE trxn_id LIKE 'live_%'";
116 $trxn_id = strval(CRM_Core_Dao
::singleValueQuery($query, $p));
117 $trxn_id = str_replace('live_', '', $trxn_id);
118 $trxn_id = intval($trxn_id) +
1;
119 $params['trxn_id'] = 'live_' . $trxn_id . '_' . uniqid();
121 $params['gross_amount'] = $params['amount'];
122 // Add a fee_amount so we can make sure fees are handled properly in underlying classes.
123 $params['fee_amount'] = 1.50;
124 $params['net_amount'] = $params['gross_amount'] - $params['fee_amount'];
130 * Are back office payments supported - e.g paypal standard won't permit you to enter a credit card associated with someone else's login
133 protected function supportsLiveMode() {
138 * Generate error object.
140 * Throwing exceptions is preferred over this.
142 * @param string $errorCode
143 * @param string $errorMessage
145 * @return CRM_Core_Error
148 public function &error($errorCode = NULL, $errorMessage = NULL) {
149 $e = CRM_Core_Error
::singleton();
151 $e->push($errorCode, 0, NULL, $errorMessage);
154 $e->push(9001, 0, NULL, 'Unknown System Error.');
160 * This function checks to see if we have the right config values.
163 * the error message if any
165 public function checkConfig() {