/** * Checks whether test mode is enabled or disabled * and sets appropriate details against GoCardless object * @param array $params Array of parameters that contains gateway details */ function gocardless_set_account_details($params = null) { # check if params have been supplied, if not attempt # to use global params if (is_null($params)) { unset($params); global $params; } global $CONFIG; # check we have been able to obtain the correct params if (!isset($params['app_id'])) { throw new Exception('Could not get GoCardless params'); } if (!empty($CONFIG['SystemSSLURL']) && $CONFIG['SystemSSLURL'] != "") { $systemUrl = $CONFIG['SystemSSLURL']; } else { $systemUrl = $CONFIG['SystemURL']; } # check if we are running in Sandbox mode (test_mode) if ($params['test_mode'] == 'on') { # Initialise SANDBOX Account Details GoCardless::$environment = 'sandbox'; GoCardless::set_account_details(array('app_id' => $params['dev_app_id'], 'app_secret' => $params['dev_app_secret'], 'merchant_id' => $params['dev_merchant_id'], 'access_token' => $params['dev_access_token'], 'redirect_uri' => $systemUrl . '/modules/gateways/gocardless/redirect.php', 'ua_tag' => 'gocardless-whmcs/v' . GC_VERSION)); } else { # Initialise LIVE Account Details GoCardless::$environment = 'production'; GoCardless::set_account_details(array('app_id' => $params['app_id'], 'app_secret' => $params['app_secret'], 'merchant_id' => $params['merchant_id'], 'access_token' => $params['access_token'], 'redirect_uri' => $systemUrl . '/modules/gateways/gocardless/redirect.php', 'ua_tag' => 'gocardless-whmcs/v' . GC_VERSION)); } }
public function setup() { $this->account_details = array('app_id' => env('GOCARDLESS_APP_ID', ''), 'app_secret' => env('GOCARDLESS_APP_SECRET', ''), 'merchant_id' => env('GOCARDLESS_MERCHANT_ID', ''), 'access_token' => env('GOCARDLESS_ACCESS_TOKEN', '')); // Initialize GoCardless if (\App::environment() == 'production') { \GoCardless::$environment = 'production'; } \GoCardless::set_account_details($this->account_details); }
function gocardless_init() { define('GC_WP_VERSION', '0.1.1'); global $gocardless_config; global $gocardless_limit; $gocardless_config = get_option('gocardless_config'); $gocardless_limit = get_option('gocardless_limit'); if (is_array($gocardless_limit)) { $gocardless_limit = array_map('stripslashes', $gocardless_limit); } // Check to see if already instantiated if (!class_exists('GoCardless') && isset($gocardless_config['app_id']) && isset($gocardless_config['app_secret']) && isset($gocardless_config['merchant_id']) && isset($gocardless_config['access_token'])) { // Include GoCardless PHP library require_once dirname(__FILE__) . '/lib/GoCardless.php'; // Sandbox mode? Defaults to production if ($gocardless_config['sandbox']) { GoCardless::$environment = 'sandbox'; } // Initialize library GoCardless::set_account_details(array('app_id' => $gocardless_config['app_id'], 'app_secret' => $gocardless_config['app_secret'], 'merchant_id' => $gocardless_config['merchant_id'], 'access_token' => $gocardless_config['access_token'], 'ua_tag' => 'gocardless-wp/v' . GC_WP_VERSION)); } }
public function gocardless_complete() { $flash_success = $this->session->flashdata(__FUNCTION__ . '_success'); if ($flash_success) { $this->session->keep_flashdata('notice'); return redirect('order'); } //get going with Go Cardless require_once APPPATH . '/third_party/GoCardless.php'; GoCardless::$environment = config_item('gocardless_environment'); GoCardless::set_account_details(config_item('gocardless_account')); //we've come back from Go Cardless //finalize the process $confirm_params = array('resource_uri' => $this->input->get('resource_uri'), 'resource_id' => $this->input->get('resource_id'), 'resource_type' => $this->input->get('resource_type'), 'signature' => $this->input->get('signature'), 'state' => $this->input->get('state')); // Returns the confirmed resource if successful, otherwise throws an exception $confirm_result = GoCardless::confirm_resource($confirm_params); if (!$confirm_result) { $this->flash->set('error', 'There was an error processing with Go Cardless.', TRUE); return redirect('bill/view/' . $this->input->get('state')); } //check what to do now //var_export($this->input->get()); die(); if ($this->input->get('resource_type') == 'bill') { //a single bill was paid, update it $this->load->model('order_model'); $result = $this->order_model->mark_bill_paid($this->input->get('state'), 'Go Cardless'); //send the user on if (!$result) { $this->flash->set('error', 'The payment was taken, but an error occured updating the bill. Please contact website staff.', TRUE); } else { $this->flash->set(__FUNCTION__ . '_success', TRUE, TRUE); $this->flash->set('notice', 'Thank you for paying with Go Cardless.', TRUE); } return redirect('order'); } else { if ($this->input->get('resource_type') == 'pre_authorization') { //Go Cardless is authorized to take payments. //make a note $this->load->model('order_model'); $this->order_model->gc_save_preauth_id($this->session->userdata('u_id'), $this->input->get('resource_id')); //Pay a bill we were on? if (is_numeric($this->input->get('state')) && $this->input->get('state') > 0) { //get the bill to pay. $this->load->model('order_model'); $bill = $this->order_model->get_bill($this->input->get('state')); if (isset($bill)) { //pay the bill we were on... $pre_auth = GoCardless_PreAuthorization::find($this->input->get('resource_id')); $gc_bill = $pre_auth->create_bill(array('name' => 'Bill #' . $bill['b_id'], 'amount' => $bill['b_price'])); } //send the user on if (!$gc_bill) { $this->flash->set('error', 'Go Cardless was authorised for futue payments, but an error occured paying this bill.', TRUE); } else { //after authorizing bill was paid, update it $this->load->model('order_model'); $result = $this->order_model->mark_bill_paid($this->input->get('state'), 'Go Cardless'); //send the user on if (!$result) { $this->flash->set('error', 'Payment was taken, but an error occured updating the bill. Please contact website staff.', TRUE); } else { $this->flash->set('notice', 'Thank you for paying with Go Cardless. Future payments will be made automatically.', TRUE); } } return redirect('order'); } else { $this->flash->set('success', 'Go Cardless has been set up for future bills.', TRUE); return redirect('order'); //send them where? } } else { $this->flash->set('error', 'Payment process not recognised.', TRUE); return redirect('order'); } } }
<?php // First create your application in the GoCardless sandbox: // https://sandbox.gocardless.com // Then grab your application id and secret and paste them in below // You'll also need to to change the various ids throughout this demo // Include library include_once '../lib/gocardless.php'; // Sandbox GoCardless::$environment = 'sandbox'; // Config vars $account_details = array('app_id' => null, 'app_secret' => null, 'merchant_id' => null, 'access_token' => null); // Initialize GoCardless GoCardless::set_account_details($account_details); if (isset($_GET['resource_id']) && isset($_GET['resource_type'])) { // Get vars found so let's try confirming payment $confirm_params = array('resource_id' => $_GET['resource_id'], 'resource_type' => $_GET['resource_type'], 'resource_uri' => $_GET['resource_uri'], 'signature' => $_GET['signature']); // State is optional if (isset($_GET['state'])) { $confirm_params['state'] = $_GET['state']; } $confirmed_resource = GoCardless::confirm_resource($confirm_params); echo '<p>Payment confirmed!</p>'; } echo '<h2>New payment URLs</h2>'; // New subscription $payment_details = array('amount' => '10.00', 'interval_length' => 1, 'interval_unit' => 'month'); $subscription_url = GoCardless::new_subscription_url($payment_details); echo '<p><a href="' . $subscription_url . '">New subscription</a>'; // New pre-authorization $payment_details = array('max_amount' => '20.00', 'interval_length' => 1, 'interval_unit' => 'month');
function doTransferCheckout(&$params, $component) { $paymentProcessorType = CRM_Core_PseudoConstant::paymentProcessorType(false, null, 'name'); $paymentProcessorTypeId = CRM_Utils_Array::key('Gocardless', $paymentProcessorType); $domainID = CRM_Core_Config::domainID(); $sql = " SELECT user_name "; $sql .= " , password "; $sql .= " , signature "; $sql .= " , subject "; $sql .= " FROM civicrm_payment_processor "; $sql .= " WHERE payment_processor_type_id = %1 "; $sql .= " AND is_test= %2 "; $sql .= " AND domain_id = %3 "; $isTest = 0; if ($this->_mode == 'test') { $isTest = 1; } $sql_params = array(1 => array($paymentProcessorTypeId, 'Integer'), 2 => array($isTest, 'Int'), 3 => array($domainID, 'Int')); $dao = CRM_Core_DAO::executeQuery($sql, $sql_params); if ($dao->fetch()) { $app_id = $dao->user_name; $app_secret = $dao->password; $merchant_id = $dao->signature; $access_token = $dao->subject; } $account_details = array('app_id' => $app_id, 'app_secret' => $app_secret, 'merchant_id' => $merchant_id, 'access_token' => $access_token); // Fail nicely if no account details set if (!$account_details['app_id'] && !$account_details['app_secret']) { echo '<p>First sign up to <a href="http://gocardless.com">GoCardless</a> and copy your sandbox API credentials from the \'Developer\' tab into the top of this script.</p>'; exit; } // Set $environment to 'production' if live. Default is 'sandbox' if ($this->_mode == 'live') { GoCardless::$environment = 'production'; } // Initialize GoCardless GoCardless::set_account_details($account_details); $goCardLessParams = array(); $goCardLessParams['amount'] = $params['amount']; $goCardLessParams['interval_length'] = $params['frequency_interval']; $goCardLessParams['interval_unit'] = $params['frequency_unit']; if (!empty($params['preferred_collection_day'])) { $preferredCollectionDay = $params['preferred_collection_day']; $collectionDate = UK_Direct_Debit_Form_Main::firstCollectionDate($preferredCollectionDay, null); // ISO8601 format. $goCardLessParams['start_at'] = $collectionDate->format('c'); } $url = $component == 'event' ? 'civicrm/event/register' : 'civicrm/contribute/transact'; $cancel = $component == 'event' ? '_qf_Register_display' : '_qf_Main_display'; $returnURL = CRM_Utils_System::url($url, "_qf_ThankYou_display=1&qfKey={$params['qfKey']}" . "&cid={$params['contactID']}", true, null, false); $goCardLessParams['redirect_uri'] = $returnURL; $goCardLessParams['user'] = array('email' => isset($params['email-5']) ? $params['email-5'] : NULL, 'first_name' => isset($params['first_name']) ? $params['first_name'] : NULL, 'last_name' => isset($params['last_name']) ? $params['last_name'] : NULL, 'billing_address1' => isset($params['street_address']) ? $params['street_address'] : NULL, 'billing_town' => isset($params['city']) ? $params['city'] : NULL, 'billing_postcode' => isset($params['postal_code']) ? $params['postal_code'] : NULL, 'country_code' => 'GB'); // Allow further manipulation of the arguments via custom hooks .. CRM_Utils_Hook::alterPaymentProcessorParams($this, $params, $goCardLessParams); $subscription_url = GoCardless::new_subscription_url($goCardLessParams); CRM_Utils_System::redirect($subscription_url); }
/** * Tries to auto pay a bill with Go Cardless, o e-mails the user, and updates the bill status as relevant * * @author GM * @param $b_id int the id of the bill * @param $u_id int the id of the user that needs to pay * @param $b_price float the price of the bill that we want to debit from them */ public function make_bill_due_and_pay($b_id, $u_id, $b_price) { //error avoidance if ($b_price <= 0) { return array('success' => FALSE, 'description' => 'Amount due must be positive, Bill #' . $b_id . ' not marked as due.'); } //have they authorised Go Cardless in the past? $pre_auth_id = $this->gc_get_preauth_id($u_id); if (!$pre_auth_id) { //set bill as due, e-mail them asking to pay $result = $this->change_bill_status($b_id, "Pending"); if ($result) { //email them about it $this->load->model('users_model'); $member = $this->users_model->get_user($u_id); $subject = config_item('site_name') . ' Payment is due. '; $message = '<p>Hello ' . $member['u_title'] . ' ' . $member['u_fname'] . ' ' . $member['u_sname'] . ',</p>'; $message .= '<p>Bill #' . $b_id . ', is now ready for you to pay.'; $message .= '<br />The amount for your recent delivery is <em>£' . $b_price . '</em>.'; $message .= '<br />You can view details of this bill and pay online at <a href="' . site_url('bill/view/' . $b_id) . '">' . site_url('bill/view/' . $b_id) . '</a>.</p>'; $message .= '<p>Thank you, <br /> ' . config_item('site_name') . '</p>'; $eq[] = array('eq_email' => $member['u_email'], 'eq_subject' => $subject, 'eq_body' => $message); // load emails queue model $this->load->model('emails_queue_model'); $this->emails_queue_model->set_queue($eq); return array('success' => TRUE, 'description' => 'The member has been notified that the bill is due.'); } else { return array('success' => FALSE, 'description' => 'The bill status could not be updated.'); } } else { //is Go Cardless working & enough? require_once APPPATH . '/third_party/GoCardless.php'; GoCardless::$environment = config_item('gocardless_environment'); GoCardless::set_account_details(config_item('gocardless_account')); $pre_auth = GoCardless_PreAuthorization::find($pre_auth_id); if (isset($pre_auth) && $pre_auth->status == 'active' && $pre_auth->remaining_amount >= $b_price) { //try paying it $bill_details = array('name' => 'Bill #' . $b_id, 'amount' => $b_price); $gc_bill = $pre_auth->create_bill($bill_details); if ($gc_bill) { //mark it as paid $result = $this->mark_bill_paid($b_id, 'Go Cardless Pre-Auth'); if (!$result) { return array('success' => FALSE, 'description' => 'Bill ' . $b_id . ' was paid, but an error caused it not to be marked as such.'); } else { return array('success' => TRUE, 'description' => 'The bill was paid through Go Cardless pre-authorisation.'); } } } //set bill as due, e-mail them asking to pay, because GC couldn't be used (or was not enough) $result = $this->change_bill_status($b_id, "Pending"); if ($result) { //email them about it $this->load->model('users_model'); $member = $this->users_model->get_user($u_id); $subject = config_item('site_name') . ' Payment is due. '; $message = '<p>Hello ' . $member['u_title'] . ' ' . $member['u_fname'] . ' ' . $member['u_sname'] . ',</p>'; $message .= '<p>Bill #' . $b_id . ', is now ready for you to pay.'; $message .= '<br />The amount for your recent delivery is <em>£' . $b_price . '</em>.'; $message .= '<br />On this occasion, we were unable to debit the amount from your bank through the Go Cardless system.'; $message .= '<br />You can view details of this bill and pay online at <a href="' . site_url('bill/view/' . $b_id) . '">' . site_url('bill/view/' . $b_id) . '</a>.</p>'; $message .= '<p>Thank you, <br /> ' . config_item('site_name') . '</p>'; $eq[] = array('eq_email' => $member['u_email'], 'eq_subject' => $subject, 'eq_body' => $message); // load emails queue model $this->load->model('emails_queue_model'); $this->emails_queue_model->set_queue($eq); return array('success' => TRUE, 'description' => 'The member has been notified that the bill is due.'); } else { return array('success' => FALSE, 'description' => 'The bill status could not be updated.'); } } }
require_once "{$root}/user.php"; require_once "{$root}/transaction.php"; require_once "{$root}/card.php"; require_once "{$root}/usersprofile.php"; require_once "{$root}/learning.php"; require_once "{$root}/alias.php"; require_once "{$root}/interest.php"; require_once "{$root}/calendar.php"; require_once "{$root}/project.php"; require_once "{$root}/gocardless-php/lib/GoCardless.php"; $db = new fDatabase('postgresql', $DB_NAME, $DB_USER, $DB_PASSWORD); fORMDatabase::attach($db); fSession::setLength('30 minutes', '10 weeks'); fSession::setPath(dirname(__FILE__) . '/../var/session'); if (isset($GOCARDLESS_CREDENTIALS)) { GoCardless::set_account_details($GOCARDLESS_CREDENTIALS); } if ($uid = fSession::get('user')) { $user = new User($uid); } else { $user = null; } function ensureLogin() { global $user; if (!isset($user)) { fURL::redirect("/login.php?forward={$_SERVER['REQUEST_URI']}"); } } function ensureMember() {
/** * Caller Magic Method * * @param string * @param array * @return object */ public function __call($method, $params) { GoCardless::$environment = $this->_config['mode'] == 'test' ? 'sandbox' : 'production'; $account_details = array('app_id' => $this->_config['app_identifier'], 'app_secret' => $this->_config['app_secret'], 'merchant_id' => $this->_config['id'], 'access_token' => $this->_config['access_token']); GoCardless::set_account_details($account_details); $args = $params[0]; $this->_lib_method = $method; list($api, $api_method, $params_ready) = $this->_build_request($args); try { $raw = $api::$api_method($params_ready); return $this->_parse_response($raw); } catch (Exception $e) { return Payment_Response::instance()->gateway_response('failure', $method . '_gateway_failure', $e->getMessage()); } }