6.0.0-git
2024-05-04

Diff for Project/Horde_Payment between 11 and 12

[[toc]]



+ Horde_Payment



Unified payment processor providing payment gateway for any Horde module.



++ Bugs



List any tickets on http://bugs.horde.org/ that cover this issue or are relevant to it.



++ People



Duck [mailto:duck@obala.net duck@obala.net]



++ Code



http://cvs.horde.org/incubator/Horde_Payment/



++ Description



A payment processing module encapsulating all communications with various payment interfaces. 



The application just pushes a payment request with the “authorizationRequest” API call. When a payment is processed, the payment module calls the selling application's “authorizationResponse” callback API method to notify it of the results. After payment processing is finished, the user will be redirected to the calling application's webroot, or to the URL provided by “authorizationReturn” result if the selling application provides it.



The payment module provides an administrative interface to list and search payment requests per module, amount, user status etc.



+++ Features



* Built in payment methods

 * Cash on delivery

 * Proforma invoice

* Known statuses

 * pending

 * revoked

 * successful

 * void

* Configurable payment methods

* Limit payment methods per application

* Limit payment methods per amount

* Virtual host support

* Possibility to add a testing process request 



+++ authorizationRequest() usage example



<code type="php">



$app = $registry->getApp(); // Calling app

$transaction_id = "myID123"; // App internal unique id

$total = 500; // Total requested amount

$params = array(); // Optional: Additional payment parameters, like user details (name, address etc..)



// Check if any authorization method exits and is linked to this

$authorization_methods = $registry->call('payment/getMethods', array($app));

if ($authorization_methods instanceof PEAR_Error) {

    echo sprintf(_("Authorization error. %s"), $authorization_methods->getMessage());

    exit;

}



// Push an paymnet authorization request

$authorizationID = $registry->call('payment/authorizationRequest',

                                    array($app, $transaction_id, $total, $params));

if ($authorizationID instanceof PEAR_Error) {

    echo sprintf(_("Authorization error. %s"), $authorizationID->getMessage());

    exit;

}



// Redirect to paymnet system

// $redirect_url = $registry->link('payment/show', array('id' => $transaction_id, 'module' => $app));

$redirect_url = $registry->link('payment/show', array('id' => $authorizationID));



header('Location:' . $redirect_url);

exit;



</code>



+++ authorizationResponse() API example



<code type="php">



...



$_services['authorizationResponse'] = array(

    'args' => array('id' => 'id', 'params' => '{urn:horde}stringArray'),

    'type' => 'string'

);



....



/**

 * Handle authorization response.

 *

 * @param string $id         Invoice identification number

 * @param string $params     Additional parameters

 */

function _manios_authorizationResponse($id, $params)

{

    require_once dirname(__FILE__) . '/base.php';



    $manios_driver = Manios_Driver::singleton();

    if ($manios_driver instanceof PEAR_Error) {

        return $manios_driver;

    }



    $transaction = $manios_driver->getTransaction($id);

    if ($transaction instanceof PEAR_Error) {

        return $transaction;

    }



    switch ($params['status_id']) {

    case Horde_Payment::PENDING:

        // We have noting to do

        return true;

        break;



    case Horde_Payment::VOID:

    case Horde_Payment::REVOKED:

        // Cancle order

        return $manios_driver->deleteTransaction($id, $transaction['advertiser_id']);



    case Horde_Payment::SUCCESSFUL:

        // Payment was successfully, process order

        return $manios_driver->confirmTransaction($id);



    default:

        // Unknown

        return PEAR::raiseError(_("Unknown response status"));



    }

}

</code>



+++ authorizationReturn() API example



<code type="php">



...



$_services['authorizationReturn'] = array(

    'args' => array('id' => 'id'),

    'type' => 'string'

);



....



/**

 * Returns authorization comeback url.

 *

 * @param string $id         Invoice identification number

 */

function _manios_authorizationReturn($id)

{

    require_once dirname(__FILE__) . '/base.php';



    $manios_driver = Manios_Driver::singleton();

    if ($manios_driver instanceof PEAR_Error) {

        return $manios_driver;

    }



    $transaction = $manios_driver->getTransaction($id);

    if ($transaction instanceof PEAR_Error) {

        return $transaction;

    }



    // The transaction has no campaign linked

    if (empty($transaction['campaign_id'])) {

        return Horde::applicationUrl('impressions/transfer.php', true);

    }



    // Redirect to campaign management

    return Util::addParameter(Horde::applicationUrl('banners/', true), 'c', $transaction['campaign_id']);

}

</code>



++ Screenshots



Configure payment methods

[[image config.png]]

Link payment methods to application

[[image links.png]]

Search authorizations

[[image search.png]]

Add a testing process request 

[[image testing.png]]







----

Back to the ((Projects|Project List))