L'intégration de HiPAY

applications internet utilitaires

Ce site ne sera plus alimenté de contenu après août 2014. Tous les nouveaux articles seront redigés pour www.waitingforcode.com
Avec l'émergence de l'e-commerce le paiement par carte sur Internet s'est banalisé. Il est utilisé même par les non-habitués de la Toile, attirés par les occasions à saisir. Parmi tous les systèmes de paiement en lign, un gagne de plus en plus de terrain. Il s'agit de HiPAY, créé en 2008 par la société belge, HPME.

Dans cet article on va se concentrer sur l'intégration de HiPAY sur un site web. Pour cela on utilisera l'API mis en disposition par l'équipe de développement de ce mode de paiement. Cependant, on commencera par la présentation du flux d'informations échangées par HiPAY et un système e-commerce.

Flux d'informations

SITE E-COMMERCE SYSTEME HiPAY
Le système attribue au commerçant une clé qui sera encryptée avec les informations sur la commande.
Le système d'e-commerce conçoit un document XML contenant les données sur la commande passée par le client.

Ensuite, ces informations sont encryptées avec la clé secrète attachée au compte de client.
HiPAY valide le document XML envoyé. Si la vérification se déroule correctement, il renvoie une adresse URL de paiement. Dans le cas contraire, la réponse contient le message d'erreur.
Le payeur passe à l'écran de paiement HiPAY. Il y renseigne les informations sur sa carte bancaire. A la fin il valide son paiement et déclenche 2 opérations chez HiPAY.
La première opération de HiPAY est la redirection vers la page contenant le message de confirmation de paiement. Bien évidemment, en fonction du résultat final, il peut s'agir aussi d'une page avec le message d'annulation de paiement.

La deuxième action lancée par HiPAY est celle de notification. Si le paiement réussit, ce système de paiement envoie en POST des informations concernant le paiement (numéro de référence, date, statut).
La boutique affiche la page de confirmation ou d'annulation de paiement. En même temps, elle traite simultanément, d'une manière transparente, le document XML reçu en POST de la parte de HiPAY.


Intégration de l'API
Maintenant, quand on connaît le flux d'échange entre deux participants, on peut se concentrer sur l'intégration de HiPAY sur un site e-commerce. Pour comprendre, rien de mieux qu'un bout de code bien documenté.


try
{
// we include HiPAY API's package
require_once(__DIR__.'/api/mapi_package.php');

// first, we define payement params
$payParams = new HIPAY_MAPI_PaymentParams();
$payParams->setLogin('000000','store_password');
// set accounts for order and tax amount
// you can determine 5 differents accounts; the third concerns insurance, the fourth fixed costs and the last shipping
$payParams->setAccounts('000000','000000');
$payParams->setLocale('fr_FR');
$payParams->setMedia('WEB');
$payParams->setCurrency('EUR');
// precise store's order id
$payParams->setIdForMerchant($orderId);
// payment method : simple or regular
$payParams->setPaymentMethod(HIPAY_MAPI_METHOD_SIMPLE);
// when paiement will be really executed (immediately or for some time)
$payParams->setCaptureDay(HIPAY_MAPI_CAPTURE_IMMEDIATE);
$payParams->setMerchantSiteId('0000');
// minimum age of buyer (ALL - everybody is accepted)
$payParams->setRating('ALL');
// set return URLs
$payParams->setUrlOk('<![CDATA[http://www.system.com/succes.html]]>');
$payParams->setUrlNok('<![CDATA[http://www.system.com/error.html]]>');
$payParams->setUrlCancel('<![CDATA[http://www.system.com/cancel.html]]>');
// set notyfication informations
$payParams->setEmailAck('administrateur@system.com');
$payParams->setUrlAck('<![CDATA[http://www.system.com/notify.php?order='.$orderId.']]>');
if(!$payParams->check())
{
throw new Exception("Error when creating Payment Params object");
}

// secondly, we define taxes which will be added on HiPAY page to order amount
// in our case, we wan't to add taxes; it's why we put 0 as a tax amount
$taxParam = new HIPAY_MAPI_Tax();
$taxParam->setTaxName('without tax');
$taxParam->setTaxVal(0,false);
if(!$taxParam->check())
{
throw new Exception("Error when creating Tax object");
}

// after that we can pass to order's products
$itemParams = new HIPAY_MAPI_Product();
$itemParams->setName('Milk');
$itemParams->setquantity(2);
$itemParams->setRef('REF384');
$itemParams->setCategory(656);
$itemParams->setPrice(2.4));
$itemParams->setTax(array($taxParam));
if(!$itemParams->check())
{
throw new Exception("Error when creating Item object");
}

// finally we add some supplementary informations about the order
$orderParams = new HIPAY_MAPI_Order();
$orderParams->setOrderTitle('Your order to our site');
$orderParams->setOrderInfo('Your order informations');
$orderParams->setOrderCategory(656);
$orderParams->setShipping(4.8, array($tax1));
if(!$orderParams->check())
{
throw new Exception("Error when creating Order object");
}

// create simple payment document and send this XML to HiPAY
$orderSimple = new HIPAY_MAPI_SimplePayment($payParams, $orderParams, $itemParams);
$xmlToSend = $orderSimple->getXML();
$output = HIPAY_MAPI_SEND_XML::sendXML($xmlToSend);

// we sent the document and received the response
// if we received error, we show error message
$result = HIPAY_MAPI_COMM_XML::analyzeResponseXML($output, &$url, &$err_msg);
if($result !== true)
{
throw new Exception($err_msg);
}

echo '
<form target="_blank" action="'.$url.'" method="post">
<input type="submit" name="send" value="Pay my order" />
</form>';
}
catch(Exception $e)
{
echo $e->getMessage();
die();
}


Supossons que l'opération de paiement s'est bien passée. On va donc traiter la notification de paiement qu'appelle le fichier notify.php .


// include API package
require_once(__DIR__.'/api/mapi_package.php');
// analyze response document
$result = HIPAY_MAPI_COMM_XML::analyzeNotificationXML(stripslashes($_POST['xml']), &$operation, &$status, &$date, &$time, &$transid, &$amount, &$currency, &$idformerchant, &$merchantdatas, &$emailClient, &$subscriptionId, &$refProduct);
if($result !== false)
{
mysql_query("INSERT INTO order_history (order, info) VALUES
(1, 'Transaction id: ".$transid."; Transaction date: ".$date." ".$time."') ");
}


Le système de paiement est déjà prêt. Si vous cherchez un module HiPAY pour Hikashop, n'hésitez pas à me contacter.

L'article écrit en rythme de:
Célis - Hold you zouk
Bartosz KONIECZNY 10-10-2011 20:54 applications web
Moi

Développeur d'applications Internet et journaliste passionné par l'adjectif français. Un aigle polonais orienté vers la progression, volant très haut et écoutant du zouk après les matches du foot français.

Vous appréciez mon travail ?

Pour contribuer au développement de ce site, ou pour remercier pour des articles rédigés, vous pouvez faire un don.

Un conseil CSS

Comment centrer verticalement les inputs type radio et checkbox ?

L'alignement vertical des inputs radio et checkbox peut se faire avec la propriété CSS, vertical-align. Par exemple :

<input type="radio" name="typeUser" id="pro-1" style="vertical-align:top;"/><label for="pro-1">Professionnel</label>