Je finis par publier ce plugin cybermut que j'ai sous le coude depuis un moment, et que j'ai enfin utilisé en production
script/plugin install http://svn.immateriel.fr/cybermut/trunk
Le README:
Basé sur le gem paypal et sur le code de Yann KLIS
Dans environment.rb:
Cybermut::Confirmation.action_url = "https://ssl.paiement.cic-banques.fr/test/paiement.cgi" Cybermut::Confirmation.hmac_sha1_key = "SHA1_KEY" Cybermut::Confirmation.hmac_sha1_pass = "SHA1_PASS"
Dans la vue:
cybermut_setup(no_commande, montant, tpe, options)
Exemple:
<%= cybermut_form_tag %>
<%= cybermut_setup("order10", 100, "123456",'societe'=>"nomsociete", 'url_retour_ok'=>"http://site/paiement_ok", 'url_retour_err'=>"http://site/paiement_erreur") %>
<%= submit_tag "Payer maintenant"%>
</form>
La validation:
def validate_cybermut_order
if request.raw_post
confirmation=Cybermut::Confirmation.new(request.raw_post)
# verification que la commande existe dans la base
if Order.exists?(confirmation.reference)
@order=Order.find(confirmation.reference)
# verification de la validité du message du serveur cybermut
if confirmation.acknowledge
# verification du total
if @order.total == confirmation.montant_euros
@order.validation
logger.info "CYBERMUT: order #{@order.id} is OK"
else
logger.info "CYBERMUT: order #{@order.id} FAILS with data problem"
end
else
logger.info "CYBERMUT: order #{@order.id} FAILS with validation
end
else
logger.info "CYBERMUT: order #{confirmation.reference} FAILS not found"
end
end
render :text=>confirmation.response
end
Limitations : Pas de support d'une autre monnaie que l'euro