Vendre des ebooks, PHP, paypal IPN, et ma galère

Bonjour,
Bon je vous raconte mes misères : je suis écrivain et j’ai écrit deux bouquins (un roman et un essai). Devant le refus de plusieurs éditeurs, mais restant persuadé de la qualité de mes oeuvres (en toute modestie of course !), je me suis dit que je pourrait les vendre en plaçant les fichiers pdf en téléchargement payant sur mon site perso. J’ai bien réfléchi aux risques de me faire “pirater” mes oeuvres, mais je crois que je vais le faire. Je précise que j’ai tous les droits légaux pour le faire vu que je ne proposerai que mes oeuvres à télécharger et rien d’autre. Donc s’il vous plait évitons le débat : “t’es sûr que t’as le droit de faire ça ?” Oui, j’ai le droit, et je paierai la TVA et des impots sur mes gains, pas de pb.

Je me suis dit que la solution la plus simple était de faire payer l’acheteur avec le système “paypal IPN”. Techniquement, c’est assez compliqué : l’acheteur clique sur un bouton “acheter maintenant”, il est renvoyé sur paypal où il paye (par son compte paypal ou directement par CB), puis il est renvoyé sur mon site vers une page “votre téléchargemetn va commencer”. simultanément paypal me notifie par un POST qui prouve que le paiement est OK, ce qui doit déclancher automatiquement le téléchargement. j’ai cherché sur le net des scripts php “tout prets” qui fassent tout ça, mais nada. il semble que les gens qui ont trouvé la solution la gardent pour eux… ou bien ils la vendent (dans un ebook ! ) Je trouve pas ça très fair play : lorsque j’aurai des scripts php au point (gràce à vous), je compte bien faire profiter les internautes de mon expérience et les mettre à leur disposition ! une sorte de projet open source si on veut.

Bref, je me suis mis à apprendre PHP (sur le site du zero, très bien fait), et voila où j’en suis : je sais déclencher un téléchargement de pdf depuis mon site, mais je ne vois pas encore comment garantir que seul l’internaute qui a payé pourra télécharger mes oeuvres. Et puis j’ai un script qui gère l’IPN, mais il est loin d’être complet, je galère et je voudrais savoir si quelqu’un pourrait m’aider ! En plus toute la doc de paypal est super ardue à comprendre, c’est vraiment la galère.

Voici mon script pour l’IPN (mais j’imagine que ce n’est qu’une petite partie du système à créer) :

<?php
// lire la publication du système PayPal et ajouter 'cmd'
$req = 'cmd=_notify-validate';

foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}

// renvoyer au système PayPal pour validation
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('www.paypal.com', 80, $errno, $errstr, 30);

// affecter les variables publiées aux variables locales
$item_name = $_POST['item_name'];
$item_number = $_POST['item_number'];
$payment_status = $_POST['payment_status'];
$payment_amount = $_POST['mc_gross'];
$payment_currency = $_POST['mc_currency'];
$txn_id = $_POST['txn_id'];
$receiver_email = $_POST['receiver_email'];
$payer_email = $_POST['payer_email'];

if (!$fp) {
// ERREUR HTTP je fais quoi là ?
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIE") == 0) {
// TOUT CA RESTE A FAIRE !!!
// vérifier que payment_status est Terminé
// vérifier que txn_id n'a pas été précédemment traité sinon c'est un hacker
// vérifier que receiver_email est mon adresse email PayPal principale
// vérifier que payment_amount et payment_currency sont corrects
// traiter le paiement : enregistrer dans la BD, envoyer l'internaute vers une page "votre téléchargement va commencer"
// déclencher le téléchargement (et comment savoir si ça s'est bien passé ?)
}
else if (strcmp ($res, "NON VALIDE") == 0) {
// consigner pour étude manuelle, qu'ils disent. Je fais comment ?
}
}
fclose ($fp);
}
?>

Ah, j’oubliais : j’ai besoins aussi de conseils pour savoir comment organiser ma base de données : je voudrais garder la trace des acheteurs (et leur email), et savoir pour chaqun d’eux le statut de leur achat (en cours, téléchargement OK, erreur…) pour pouvoir recontacter ceux qui ont eu un pb technique.
Et je voudrais savoir où je met mes deux fichiers pdf : soit sur le site dans un endroit “secret”, soit dans la BD ? qu’est-ce qui est le mieux ? Dans le cas où c’est dans la BD, comment provoquer le téléchargement ?

Bon voila, il me semble que c’est un bon sujetp pour des cadors comme vous, mais pour un débutant comme moi c’est dur dur de commencer par un truc aussi compliqué… C’est pourquoi j’appelle à l’aide !
merci !

Juste une question, as-tu pensé à lulu.com?

Je pense que tu peux éviter bien des problèmes, tout en ayant une visibilité accrue :wink:

Oui, ca a l’air intéressant, mais je me mefie de l’auto edition papier. Mon site a 150 visiteurs/jour (1500 pages vues), je me dit que c’est pas mal comme plate-forme promotionelle… Bon si j’y arrive pas ca reste une solution. Merci en tout cas pour le conseil !

150 visiteurs par jour, cela me semble très très faible, surtout avec l’objectif ‘plateforme promotionnelle’

Par ailleurs lulu.com a un fondateur très connu, Robert Young, l’un des fondateurs de Red Had et du Linux Journal, et la plateforme existe depuis 2002, est internationale et a une base française aujourd’hui bien en place… Ce n’est pas tout à fait n’importe quel service :wink:

Et bien finalement j’ai suivi ton conseil, myself ! Et effectivement lulu c’est pas mal du tout.

J’ai pu créer ma boutique en ligne chez eux: www.lulu.com… pour y vendre mes deux bouquins :
L’esprit, l’IA et la Singularité --> www.lulu.com…
et Glissement des âmes --> www.lulu.com…
Maintenant je croise les doigts… parce qu’il ne suffit pas de dire que ce sont deux très bons bouquins (même si c’est vrai, dixit tous ceux qui les ont lus) pour que ça se vende ! Mais là on rentre dans le domaine du marketing, je ny’ connait strictement rien… Et puis ça nous éloigne de php !

Quand même, si quelqu’un peut régir à mon premier post, je pense qu’une solution simple et gratuite en PHP pour vendre des ebooks en ligne intéressait beaucoup de gens… Oui je sais il y a aussi OSCommerce (licence GNU) mais c’est une usine à gaz et c’est conçu avant tout pour vendre des biens PHYSIQUES en ligne et pas des ebooks…

Tes livres semblent vraiment bons !! Dès que j’ai l’argent nécessaire je les achète, version imprimée of course ! Continue dans cette voie !

Apparemment il n’existe toujours rien de gratuit dans ce domaine. D’autres auteurs (présents sur Lulu pour la plupart) se sont posé la question, mais sans succès.
Serdj, as-tu poursuivi dans cette voie ?
Edité le 08/01/2008 à 10:34

Bonjour Serdj,

je serais intéressé pour affectuer la même démarche que toi. Je me suis renseigné sur lulu.com, cependant je reste toujours méfiant. Peux tu me dire si les résultats sont concluant de ton côté? que ce soit au niveau de la promotion qu’au niveau des ventes et donc financier.

merci d’avance

salut ton probleme dit,

tu as reussi depuis que tu as envoye ton post à trouvé une solution?

Hello. Pour ce qui est de la programmation Paypal, c’est en effet assez compliqué. Il y a un peu de doc sur le site de paypal, mais comme tu le dit il y a pas tout et ceux qui on trouvés gardent les infos pour eux ( ou les font payer ).

Pour commencer sur paypal, il faut savoir que plus de la moitié des acheteurs ne cliquent jamais sur le bouton " revenir à la boutique " une fois l’achat effectué. tu doit donc codé deux script, un pour paypal et un peu l’utilisateur qui reviens sur ta boutique.

Maintenant il y a aussi une autre solution, il éxiste des “cms” dédié au ecommerce, comme oscommerce, prestashop ou encore magento. En ce moment je développe pas mal sous prestashop, c’est une plateforme très très souple et open source.

Par défaut tu à déja paypal, gestion des compte clients, etc. Pour customisé, tu à un système de thème avec des template ( des .tpl ), comme ça tu ne touche jamais au php ( le core du logiciel ). Au niveau serveur, ça tourne correctement sur un free.fr ou sur un ovh basique ( mais je conseil un vrai serveur ).