Envoi de newsletter HTML avec amazon ses

Petit snippet de script php utilisant le code de Anthone et Dan :

http://whitehatcrew.com/blog/free-php-class-for-sending-email-through-amazon-ses/

http://www.orderingdisorder.com/aws/ses/

<?php
require_once('ses.php');
$AccessKeyID='AKIAJT*******3XYQIWA';
$SecretKey='b8tTSghJqV*************y/HQ9';
$ses = new SimpleEmailService($AccessKeyID,$SecretKey);
$m = new SimpleEmailServiceMessage();
$m->setFrom('thomas@lyonsalsacongress.com');
$m->addTo('thomas@lyonsalsacongress.com');
$m->addBCC(array('salut@gmail.com', 'thomas@6www.net'));
$m->addReplyTo('thomas@lyonsalsacongress.com');
$m->setSubject('News du Lyon Salsa Congress');
$m->addRawMessageFromFile('html','news.html','text/html');
print_r($ses->sendEmail($m));
print_r($ses->getSendQuota());
print_r($ses->getSendStatistics());
?>

Il faut sauver la page en HTML depuis le navigateur et l’uploader sur le site.

Les functions : ses

Bon dimanche.

Paypal pour WordPress avec un formulaire personalisé

Bonjour,
Ci dessous un petit guide pour transformer votre site wordpress en e-boutique sans utiliser le plugin wp-e-commerce.
En plus de créer un boutton paypal, cela vous crée un formulaire pour demander plus d’informations à l’acheteur comme la taille, la couleur du produits, son signe astrologique, etc.

Fonctionnement général :

Vous placer un shortcode sur les pages de votre site ou vous voulez faire apparaitre un bouton paypal. Exemple, je vends une guitare en plastique à 8.35€, cela donne : [PaypalBuyNowButton item_name=”Guitare en plastique” amount=”8.35″]

Le code suivant est à placer dans le fichier functions.php :

function my_scripts_method() {
    wp_deregister_script( 'joinFields' );
    wp_register_script( 'joinFields', 'http://www.votre-site.fr/wp-content/themes/votre-theme/joinFields.js');
    wp_enqueue_script( 'joinFields' );
}    
add_action('wp_enqueue_scripts', 'my_scripts_method');

function PaypalBuyNowButton($atts){
  global $wpdb, $post;
  extract( shortcode_atts( array('item_name' => 'Prevision astrale','amount' => '0.10'), $atts));
  //$Output.='<a href="#" onclick="joinFields()">joinFields</a>';
  //print_r($atts);
  $Output.='<form action="https://www.paypal.com/cgi-bin/webscr" method="post" name="fmBuy" id="fmBuy" onSubmit="joinFields()">
  <input type="hidden" name="cmd" value="_xclick">
  <input type="hidden" name="business" value="votreemailebay@hotmail.com">
  <input type="hidden" name="lc" value="FR">
  <input type="hidden" name="item_name" value="'.$item_name.'">
  <input type="hidden" name="amount" value="'.$amount.'">
  <input type="hidden" name="currency_code" value="EUR">
  <INPUT TYPE="hidden" name="charset" value="utf-8">
  <input type="hidden" name="button_subtype" value="services">
  <input type="hidden" name="no_note" value="1">
  <input type="hidden" name="no_shipping" value="1">
  <input type="hidden" name="rm" value="1">
  <p>Votre nom<br />
  <input type="text" id="nom" name="nom" value="'.$keyarray['last_name'].'" size="40" /></span> </p>
  <p>Votre prénom<br />
  <input type="text" id="prenom" name="prenom" value="'.$keyarray['first_name'].'" size="40" /></span> </p>
  <p>Votre date de naissance<br />
  <input type="text" id="datedenaissance" name="datedenaissance" value="" size="40" /></span> </p>
  <p>Votre heure de naissance<br />
  <input type="text" id="heuredenaissance" name="heuredenaissance" value="" size="40" /></span> </p>
  <p>Votre lieu de naissance<br />
  <input type="text" id="lieudenaissance" name="lieudenaissance" value="" size="40" /></span> </p>
  <p>Votre email<br />
  <input type="text" id="email" name="email" value="'.$keyarray['payer_email'].'" size="40" /></span></p>
  <p>Votre numéro de téléphone<br />
  <input type="text" id="telephone" name="telephone" value="" size="40" /></span></p>
  <p>Votre adresse postale complète<br />
  <input type="text" id="adresse" name="adresse" value="" size="100" /></span></p>
  <input type="hidden" name="custom" id="custom" value="">
  <input type="hidden" name="return" value="http://www.votre-site.fr">
  <input type="hidden" name="cancel_return" value="http://www.votre-site.fr">
  <input type="hidden" name="notify_url" value="http://www.louisette-astro.fr/paypal_ipn.php">
  <input type="hidden" name="bn" value="PP-BuyNowBF:btn_buynowCC_LG.gif:NonHosted">
  <input type="image" src="https://www.paypalobjects.com/fr_FR/FR/i/btn/btn_buynowCC_LG.gif" border="0" name="submit" alt="PayPal - la solution de paiement en ligne la plus simple et la plus sécurisée !">
  <img alt="" border="0" src="https://www.paypalobjects.com/fr_FR/i/scr/pixel.gif" width="1" height="1">
  </form>';
  return $Output;
}
add_shortcode( 'PaypalBuyNowButton', 'PaypalBuyNowButton' );

Ensuite il faut créer le fichier javascript joinFields.js qui va concaténer les elements du formulaire :

function joinFields(){
 var nom = document.getElementById('nom').value;
 var prenom = document.getElementById('prenom').value;
 var datedenaissance = document.getElementById('datedenaissance').value;
 var heuredenaissance = document.getElementById('heuredenaissance').value;
 var lieudenaissance = document.getElementById('lieudenaissance').value;
 var email = document.getElementById('email').value;
 var telephone = document.getElementById('telephone').value;
 var adresse = document.getElementById('adresse').value;
 var req=nom+'&'+prenom+'&'+datedenaissance+'&'+heuredenaissance+'&'+lieudenaissance+'&'+email+'&'+telephone+'&'+adresse;
 var custom = document.getElementById('custom');
 custom.value=req;
  }

Le troisième fichier paypal_ipn.php est à placer à la racine de votre site :

<?php

error_reporting(E_ALL ^ E_NOTICE);
$emailtext = "";
// Read the post from PayPal and add 'cmd'
$req = 'cmd=_notify-validate';
if(function_exists('get_magic_quotes_gpc')){$get_magic_quotes_exits = true;}
foreach ($_POST as $key => $value)
// Handle escape characters, which depends on setting of magic quotes
    {
    if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1)
        {$value = urlencode(stripslashes($value));}
    else {$value = urlencode($value);}
    $req .= "&$key=$value";
    }
// Post back to PayPal to validate
$header .= "POST /cgi-bin/webscr HTTP/1.0rn";
$header .= "Content-Type: application/x-www-form-urlencodedrn";
$header .= "Content-Length: " . strlen($req) . "rnrn";
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);

// Process validation from PayPal
if (!$fp)
    { // HTTP ERROR
    }
else
    {
    // NO HTTP ERROR
    fputs ($fp, $header . $req);
    while (!feof($fp))
        {
        $res = fgets ($fp, 1024);
        if (strcmp ($res, "VERIFIED") == 0)
            {
            // Check the payment_status is Completed
            if ($_POST['payment_status']=='Completed')
                {
                $emailtext.='Bonjour,'."n".'Nous avons reçu votre commande '."n".'Détails de votre demande :'."n";
                $emailtext.='Type de demande : '.$_POST['item_name']."n";
                $custom = explode("&",$_POST['custom']);
                $emailtext.='Nom : '.$custom[0]."n".'Prénom : '.$custom[1]."n";
                $emailtext.='Date de naissance :'.$custom[2]."n".'Heure de naissance :'.$custom[3]."n".'Lieu de naissance :'.$custom[4]."n";
                $email=$custom[5];
                $emailtext.='Email : '.$email."n".'Téléphone : '.$custom[6]."n";
                $emailtext.='Adresse : '.$custom[7]."nn";

                foreach ($_POST as $key => $value)
                    {
                    //$emailtext .= $key . " = " .$value ."nn";
                    }

                    $headers  = 'MIME-Version: 1.0' . "rn";
                    $headers .= 'Content-type: text/plain; charset=utf-8' . "rn";
                    $headers .= 'From: Vous <nepasrepondre@votre-site.fr>' . "rn";
                    $headers .= 'Bcc: votre-email@hotmail.com' . "rn";
                    mail($email, "Accusé de reception de votre commande", $emailtext,$headers);
                }//End if completed
            }
        else if (strcmp ($res, "INVALID") == 0)
            {
            foreach ($_POST as $key => $value){$emailtext .= $key . " = " .$value ."nn"; }
            mail('votre-email@hotmail.com', "Live-INVALID IPN at astro", $emailtext . "nn" . $req);
            }  
        }
        fclose ($fp);
    }
?>

Enfin il est important de bien régler vos options de paypal, notamment pour l’ipn :
Paypal -> Préférences -> Plus d’options -> Mes outils de vente -> Notifications instantanées de paiement
(ou directement : https://www.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-ipn-notify)

Paypal Réglage IPN
Paypal Réglage IPN

Note : La somme des champs réponses (nom, prénoms, …) ne peut dépasser 256 caractères (limitation de cette technique). Si besoin de plus de caractères, utiliser une base de données ou wpec.

Todo :

  • intégrer dans un plugin.
  • le lier à un plugin type contact form 7 pour ne pas avoir a créer le formulaire en dur

[Bug Résolu] Les réductions par coupons promo ne prennent pas en compte la quantité

Bonjour,

Petit mot pour proposer une correction au problème suivant :

Les réductions à prix fixes ne sont pas multipliées si l’acheteur achète 2 produits.

Exemple 5 euro de réduction pour l’achat du produit A, si l’acheteur en achète 2 il doit avoir 10€ de réduction.

Solution : corriger dans : wpsc-includes/coupon.class.php entre les lignes 196 et 203 :

else {
$item->discount = $this->value;
if($this->every_product == 1){
$return += $item->discount;
}else{
return $item->discount*$item->quantity; // modification ici !
}
}

Bonne année à tous.

Le formulaire de livraison de s’affiche pas, comment faire ?

Un petit mot pour répondre à un problème rencontrée par une utilisatrice.

Son problème : sur son site s’affichait :
” Veuillez choisir un pays ci-dessous afin de calculer vos frais de livraison ”
et/ou Entrez votre Zip Code (code postal)
mais aucun formulaire n’appairaissait !

Raison du problème :
Une mise à jour de WPEC a changé des éléments dans le coeur de wpec mais cette utilisatrice avait copié les pages du thème dans son dossier wp-content/theme/sontheme/
Donc ces pages n’ont pas été mises à jour en même temps que wpec et ce sont celles ci qui sont utilisées lorsque celles ci existent.

Solution :
J’ai mis à jour wpsc-shopping_cart_page.php. Problème réolu.

Fonctionnement du paiement Test Gateway

La méthode de paiement test gateway de wpec est très pratique pour deux raison :

  • Elle permet de tester la boutique sans acheter réellement
  • Elle permet de mettre en place un paiement par chèque, virement bancaire ou même en liquide (tous les paiements qui ne peuvent être programmés en php finalement…)

Comment cela fonctionne ?

Régler dans Réglages -> Boutique -> Paiement -> Test Gateway -> Editer

Ajouter des instructions de paiement comme dans l’exemple :

Réglages de Test Gateway
Réglages de Test Gateway

Lorsque le client choisit la méthode Test Gateway (qui apparaître comme “Chèque ou Virement Bancaire” dans cet exemple) dans le panier.

Il est automatiquement redirigé vers la page de fin de commande en lui indiquant que sa commande est en attente de paiement. Un email lui est aussi envoyé en lui indiquant les instructions de paiement.

Vous recevez vous aussi un email pour vous dire qu’un paiement est en attente.

Une fois que le paiement vous est parvenu (vous avez reçu le chèque par la poste, vous avez reçu le virement, vous avez récupérer le paiement en liquide,…) il faut que vous validiez la commande.

Pour cela, rendez vous sur Tableaux de Bord -> Ventes en boutique

Recherchez la commande pour laquelle vous avez reçu le paiement.

Paiement en attente
Paiement en attente

Transformer Commande reçue en “paiement accepté” ou en “commande close” et automatiquement, un email sera envoyé à l’acheteur pour lui dire que son paiement a été reçu. Attention, vous ne receverez pas d’email.

Voilà, bonne utilisation.