Bonjour à tous,
J'avais un peu de temps à tuer dans le train, alors je m'y suis mis. Je ne suis pas sûr à 100% de la traduction de certains termes techniques (model logic, adapter model, par exemple) que j'ai traduit par ce qui me semblait le plus correct sans utiliser le mot à mot. N'hésitez pas à me corriger au besoin.
Etant donné que c'est mon premier message j'en profite aussi pour me présenter rapidement. Je m'appelle Loïc, j'ai 21 ans et je suis étudiant. Je me penche depuis quelques temps maintenant sur la mise en place d'une boutique ce qui m'a amené à lire le blog de Capitaine Commerce, et à connaitre Fragento au lancement de la bêta de Magento.
Voila, place au tutorial maintenant
---------------------
Traduction française du tutorial
« Create Payment Method Module »Source : http://www.magentocommerce.com/wiki/how-to/create-payment-method-moduleI. Introduction :Chaque méthode de paiement peut être mise en place comme un module indépendant. Plusieurs méthodes peuvent également être combinées dans le même module si elles partagent des fonctionnalités ou sont utilisables ensembles.
Nous allons créer dans ce tutorial un module avec une méthode de paiement qui va :
- accepter les informations de la carte de crédit
- autoriser la carte quand la commande est passée
- sauvegarder l’ID de la transaction dans le registre des paiements
Notre nouveau module sera appelé NewModule.
Remplacez chaque apparition de « NewModule » par le nom de votre module, et « newmodule » avec le code simplifié, qui ne peut contenir que des caractères alphanumériques et l’underscore.
Pour rendre ce tutorial plus concis, il est entendu que la création des dossiers mentionnés par la suite est implicite.
Vérifiez que app/code/local se trouve dans include_path.
Si vous utilisez le cache pour la configuration, n’oubliez pas de le vider après avoir modifié les fichiers de configuration XML.
II. Configuration :Créez app/code/local/Mage/NewModule/etc/config.xml :
| Code : |
<?xml version="1.0">
<config>
<modules>
<!-- declare module's version information -->
<Mage_NewModule>
<!-- this version number will be used for database upgrades -->
<version>0.1.0</version>
</Mage_NewModule>
</modules>
<global>
<!-- declare model group for new module -->
<models>
<!-- model group alias to be used in Mage::getModel() -->
<newmodule>
<!-- base class name for the model group -->
<class>Mage_NewModule_Model</class>
</newmodule>
</models>
<!-- declare resource setup for new module -->
<resources>
<!-- resource identifier -->
<newmodule_setup>
<!-- specify that this resource is a setup resource and used for upgrades -->
<setup>
<!-- which module to look for install/upgrade files in -->
<module>Mage_NewModule</module>
</setup>
</newmodule_setup>
</resources>
</global>
</config>
|
Editez app/etc/local.xml :
| Code : |
<config>
<!-- ... -->
<modules>
<!-- ... -->
<!-- declare Mage_NewModule module -->
<Mage_NewModule>
<active>true</active>
<codePool>local</codePool>
</Mage_NewModule>
<!-- ... -->
</modules>
<!-- ... -->
</config>
|
Maintenant l’application connaît ce module, mais rien ne se passera tant que nous n’aurons pas créé la chaîne de traitement.
III. Chaine de traitement :
Remarque : le nom PaymentMethod est arbitraire et ne dépend que de vous.
Créez app/code/local/Mage/NewModule/Model/PaymentMethod.php :
| Code : |
<?php
/**
* Our test CC module adapter
*/
class Mage_NewModule_Model_PaymentMethod extends Mage_Payment_Model_Abstract
{
/**
* unique internal payment method identifier
*
* @var string [a-z0-9_]
*/
protected $_code = 'newmodule';
/**
* Possible result statuses
*/
const RESPONSE_CODE_APPROVED = 1;
const RESPONSE_CODE_DECLINED = 2;
const RESPONSE_CODE_ERROR = 3;
const RESPONSE_CODE_HELD = 4;
/**
* This method will be called on checkout payment methods page
*
* @param string $name global block name in layout (provided by payment method collector automatically)
* @return Mage_Core_Block_Abstract block instance to be shown on payment methods page
*/
public function createFormBlock($name)
{
// create block instance
$block = $this->getLayout()->createBlock('payment/form_cc', $name);
// set internal method name (should be simple [a-z0-9_] string)
$block->setMethod($this->_code);
// assign payment instance to the block to get saved information for form representation
$block->setPayment($this->getPayment());
return $block;
}
/**
* This method will be called on order review page
*
* @param string $name global block name in layout (provided by payment method collector automatically)
* @return Mage_Core_Block_Abstract block instance to be shown on order review page
*/
public function createInfoBlock($name)
{
// create block instance
$block = $this->getLayout()->createBlock('payment/info_cc', $name);
// assign payment instance to the block to get saved information
$block->setPayment($this->getPayment());
return $block;
}
/**
* This method will run when customer click on Place Order button on review page
*
* @param Mage_Sales_Model_Order_Payment $payment submitted order payment instance
*/
public function onOrderValidate(Mage_Sales_Model_Order_Payment $payment)
{
// run CC authorization procedure
$result = $this->_authorize($payment);
// process response
switch ($result->getResponseCode()) {
case self::RESPONSE_CODE_APPROVED:
// collect authorization result into order payment instance to be saved with order
$payment->setStatus('APPROVED')
->setCcApproval($result->getApprovalCode())
->setCcTransId($result->getTransactionId())
->setCcAvsStatus($result->getAvsResultCode())
->setCcCidStatus($result->getCardCodeResponseCode());
// retrieve new order status id from store configuration
$statusId = Mage::getStoreConfig('payment/'.$this->_code.'/order_status');
// set initial order status and save it in order history
$payment->getOrder()->addStatus($statusId);
break;
case self::RESPONSE_CODE_DECLINED:
// do necessary operations on DECLINED status
$payment->setStatus('DECLINED')
->setStatusDescription($result->getResponseReasonText());
break;
// can add here other result options such as self::RESPONSE_CODE_ERROR
}
return $this;
}
/**
* Payment gateway specific authorization procedure
*
* @param Varien_Object $payment
* @return mixed result of authorization API call
*/
protected function _authorize($payment)
{
// Logic can be moved to external API class: Mage_NewModule_Model_Api
// It is recommended to use create request object,
// if you use external API class
/// $request = Mage::getModel('payment/paygate_request');
// set service specific parameters for request
$request = array(
'x_card_num' => $payment->getCcNumber(),
'x_exp_date' => sprintf('%02d-%04d', $payment->getCcExpMonth(), $payment->getCcExpYear()
);
///... here we have our payment gateway API authorization calls
///... utilizing array $request and returning array $response
// create result object
$result = Mage::getModel('payment/paygate_result');
// fill it with transaction data from $response
// example array from authorize.net
$result->setResponseCode($response[0]);
$result->setApprovalCode($response[4]);
$result->setTransactionId($response[6]);
$result->setAvsResultCode($response[5]);
return $result;
}
}
|
Maintenant que nous avons le modèle, donnons à l’admin de quoi pouvoir configurer le module et informer la procédure de paiement de l’existence de cette méthode.
III. Mise à jour de la base de données :
Créez app/code/local/Mage/NewModule/sql/newmodule_setup/mysql4-install-0.1.0.php :
| Code : |
<?php
$code = 'newmodule';
// set model that should be used for this payment method
// no configuration field available in admin - definitely not for user change
$this->setConfigData('payment/'.$code.'/model', 'newmodule/paymentMethod');
// create payment method group in Admin / System / Configuration / Payment Methods
$this->addConfigField('payment/'.$code, 'New Module');
// specify title for this payment method
$this->addConfigField('payment/'.$code.'/title', 'Title');
$this->setConfigData('payment/'.$code.'/title', 'New Module');
// add Enabled flag configuration
$this->addConfigField('payment/'.$code.'/active', 'Enabled', array(
'frontend_type'=>'select',
'source_model'=>'adminhtml/system_config_source_payment_active'
));
// choose initial order status when checking out with this payment method
$this->addConfigField('payment/'.$code.'/order_status', 'Order Status', array(
'frontend_type'=>'select',
'source_model'=>'adminhtml/system_config_source_order_status'
));
// set position for this payment method in list
$this->addConfigField('payment/'.$code.'/sort_order', 'Sort Order');
|
Si vous allez dans Admin / System / Configuration / Payment Methods, vous devriez maintenant voir le groupe « New Module ». Activez-le et essayez de valider votre commande. Sur la page des solutions de paiement, vous devriez voir « New Module » avec le formulaire pour saisir les données de la carte de crédit.
Créons maintenant le fichier de désinstallation de la base de données.
Créez app/code/local/Mage/NewModule/sql/newmodule_setup/mysql4-uninstall-0.1.0.php :
| Code : |
<?php
$code = 'newmodule';
$this->run("
delete from `core_config_field` where `path`='payment/".$code."' or `path` like 'payment/".$code."/%';
delete from `core_config_data` where `path` like 'payment/".$code."/%';
");
|
Message édité par : Otaugames, à : 07 10 2007 18:21:16nn
Message édité par : Otaugames, à : 07 10 2007 18:22:48