Voici la façon dont je l'ai toujours compris les concepts, et ce que vous aurez besoin pour mettre en place un module de paiement en Magento. Des réponses à vos "où cela se passe" sont en caractères gras ci-dessous, bien que ce n'est pas tout à fait aussi simple que vous espérez pour.
Pré-internet, de la brique et de mortier de transactions de carte de crédit ont été un processus en deux étapes.
Au moment de la vente, lorsque le marchand a pris une carte de crédit du consommateur lors d'un achat qu'ils avaient faites-le glisser à travers un point de vente de l'appareil qui ferait la carte de crédit du bureau central et de demander "est-ce la carte autorisé pour ce type de réseau, et est-ce particulier à la consommation de la ligne de crédit disponible est assez importante pour permettre cet achat".
Si l'achat a été acceptée (par opposition à diminué, la charge a été dit d'être autorisé. Le consommateur serait prendre leur produit, et le système de point de vente/caisse à noter que la transaction a été autorisée. Puis, à la fin de la journée, ou à la fin de la semaine, à certains autres prédéterminé horaires réguliers, ou lorsque le propriétaire a décidé d'arrêter de boire, le marchand doit aller même si tous leurs autorisées les recettes et envoyer une autre demande à l'office central pour la capture des fonds de l' autorisé la transaction. Capture le fonds est ce qui met de l'argent dans le compte du marchand.
C'est encore le modèle utilisé par la plupart des passerelles, et est le modèle de domaine que Magento Inc. choisi de mettre en œuvre pour leurs modules de paiement.
La façon dont les choses sont censées exécuter est, lorsqu'un consommateur a atteint la finale de la caisse des mesures dans un système comme Magento, Magento émet une demande d'autorisation de la passerelle API. Si la transaction est réussie, la commande est acceptée dans le système, et un ID unique à partir de la demande d'autorisation est stocké. Ensuite, lorsque la consommation des marchandises du navire, un propriétaire de magasin utilise l'administration Magento pour créer une facture. La création de cette facture questions une capture de la demande (à l'aide d'un id de magasin retourné à partir de la demande d'autorisation). C'est là que ces appels de méthode sont émis dans Magento.
Cependant, les choses se sont compliqué parce que chaque passerelle de paiement interprète ces concepts un peu différemment, et tous les marchands interprétation de leurs "ne pas capturer jusqu'à ce que nous avons livré" responsabilités différemment. En plus le scénario décrit ci-dessus, les modules de paiement ont un système de configuration de la valeur connue comme un Paiement d'Action. Ceci peut être fixé à n'Autoriser qu'à mettre en œuvre les flux décrits ci-dessus. Il peut également être configuré pour Autoriser et de Capture, qui sera à la fois autoriser et de capturer un paiement au moment de la commande. Il devient encore plus confus parce que même si la méthode est appelée à Autoriser et de Capturer, les versions actuelles de Magento sera uniquement question de la capture de la demande lorsqu'elle est définie dans ce mode (au moins pour Authorize.net), et Authorize.net la volonté, en interne, laisser capturer les demandes dans un autorisées mais non capturés pour la plupart de la journée. Comment Magento gère des commandes et des paiements et des factures est une zone de la base de code qui change beaucoup d'une version à l'autre.
Ainsi, l'idée derrière le Magento module de paiement système est de vous protéger du groupe F--- ce qui est de la programmation de la Passerelle de paiement de la logique. Dans votre authorize
méthode à mettre en œuvre un appel à votre passerelle de paiement de l'autoriser l'API (ou effectuer que les contrôles et la logique que vous voulez arriver à ce point). Cette méthode est passé d'un objet du paiement et le montant. Si vous faites vous demande/effectuer votre logique et de déterminer qu'il est invalide pour quelque raison que ce soit, vous jetez une Exception avec
Mage::throwException('...');
Cela dit Magento l'échec de l'autorisation, et il agira en conséquence (afficher un message d'erreur, etc.). Sinon, vous définissez les données membres de l'objet du Paiement et d'émettre un
return $this;
Les données membres sont des choses que vous aurez besoin plus tard, lors de la capture de paiement. Ce qui nous amène à l' capture
méthode de votre module de Paiement. Cette méthode est également envoyé un paiement de l'objet et un montant. Dans cette méthode, vous émettez votre demande. L'objet du paiement devront cc_trans_id
membre de données
$payment->getCcTransId()
ce qui vous permettra d'émettre une capture à l'encontre de votre passerelle. C'est l'un des membres de données, vous êtes responsable de l'enregistrement dans authorize
. Encore une fois, si votre code détermine la capture a échoué, vous lancer une exception. Sinon, vous return $this
.
L'authorize.net module de paiement présente de bons exemples de la façon dont cela est fait.
app/code/core/Mage/Paygate/Model/Authorizenet.php
Par exemple, considérons que cela fait partie de l' capture
méthode
public function capture(Varien_Object $payment, $amount)
{
if ($payment->getCcTransId()) {
$payment->setAnetTransType(self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE);
} else {
$payment->setAnetTransType(self::REQUEST_TYPE_AUTH_CAPTURE);
}
$payment->setAmount($amount);
$request= $this->_buildRequest($payment);
$result = $this->_postRequest($request);
//...
Ici, la méthode de capture est de vérifier si le paiement a cc_trans_id
. Selon le résultat, il définit anet_trans_type
soit:
self::REQUEST_TYPE_PRIOR_AUTH_CAPTURE
self::REQUEST_TYPE_AUTH_CAPTURE
Cette valeur est ensuite utilisée par l'API objet de demande d'envoyer un appel d'API, soit
- La capture d'un pré-opération de paiement autorisée
- Saisie immédiate
Espère que ça aide, et bonne chance!