Archive

Monthly Archives: juin 2017
3

Intégrer une API PayPal en PHP pour débutant et facilement

Comment accepter PayPal sur son site web?

 
Aujourd’hui nous vous présentons un tutoriel vous permettant t’intégrer une API Paypal sur votre site web afin d’accepter des paiements et d’automatiser les mécanismes de retour vers votre site.
Énormément de personne rencontre des problèmes via des API obsolète utilisant des requêtes fsockopen que PayPal n’accepte plus.

Quels sont les prérequis pour faire fonctionner son API PayPal?

Les prérequis nécessaire au bon fonctionnement de votre API sont les suivants:

  • Un certificat SSL à jour, valide et surtout reconnu par tout les navigateurs.
  • Une version de PHP 5.6 au minimum par sécurité.
  • Un compte Paypal (si possible en Business Pro) avec des accès API préalablement créer.

(Si vous rencontrez des problèmes avec votre hébergeur ou que vous souhaitez plus d’informations veuillez nous contacter sur notre support.)
Nous disposons d’hébergement web capable de supporter cette technologie.

Pour commencer connectez vous à votre système de fichier (FTP ou SFTP) et créer votre fichier que nous allons nommé PayPal.php et copier coller le code suivant:
Rajoutez bien vos informations d’API de votre compte Paypal avec la signature de celle-ci.

<?php
 class PayPal {
 //API Credentials
 protected $username = ""; //PayPal API utilisateur
 protected $password = ""; //PayPal API mot de passe
 protected $apiSignature = ""; //PayPal API signature
 protected $apiVersion = "74.0"; //Set PayPal API version
protected $payPalAPIUrl = "https://api-3t.sandbox.paypal.com/nvp";
 protected $errorReportingEnabled = true;
 protected $errors = array();
 protected $lastServerResponse;
 protected $curl;
public function SetExpressCheckout($request) {
 return $this->sendRequest($request, "SetExpressCheckout");
 }
public function DoExpressCheckoutPayment($request) {
 return $this->sendRequest($request, "DoExpressCheckoutPayment");
 }
public function GetExpressCheckoutDetails($request) {
 return $this->sendRequest($request, "GetExpressCheckoutDetails");
 }
public function DoAuthorization($request){
 return $this->sendRequest($request, "DoAuthorization");
 }
 public function DoReauthorization($request){
 return $this->sendRequest($request, "DoReauthorization");
 }
public function DoVoid($request){
 return $this->sendRequest($request, "DoVoid");
 }
 public function UpdateAuthorization($request){
 return $this->sendRequest($request, "UpdateAuthorization");
 }
public function BAUpdate($request){
 return $this->sendRequest($request, "BAUpdate");
 }
public function BillOutstandingAmount($request){
 return $this->sendRequest($request, "BillOutstandingAmount");
 }
public function CreateBillingAgreement($request){
 return $this->sendRequest($request, "CreateBillingAgreement");
 }
public function CreateRecurringPaymentsProfile($request){
 return $this->sendRequest($request, "CreateRecurringPaymentsProfile");
 }
public function DoReferenceTransaction($request){
 return $this->sendRequest($request, "DoReferenceTransaction");
 }
 public function GetRecurringPaymentsProfileDetails($request){
 return $this->sendRequest($request, "GetRecurringPaymentsProfileDetails");
 }
public function ManageRecurringPaymentsProfileStatus($request){
 return $this->sendRequest($request, "ManageRecurringPaymentsProfileStatus");
 }
public function UpdateRecurringPaymentsProfile($request){
 return $this->sendRequest($request, "UpdateRecurringPaymentsProfile");
 }
public function RefundTransaction($request){
 return $this->sendRequest($request, "RefundTransaction");
 }
 public function sendRequest($requestData, $method) {
 if (!isset($method)) {
 array_push($this->errors, "Method name can not be empty");
 }
 if (!isset($requestData)) {
 array_push($this->errors, "Request data is can not be empty");
 }
 if ($this->checkForErrors()) {//If there are errors, STOP
 if ($this->errorReportingEnabled())//If error reporting is enabled, show errors
 $this->showErrors();
 $this->lastServerResponse = null;
 return false; //Do not send a request
 }
 $requestParameters = array(
 "USER" => $this->username,
 "PWD" => $this->password,
 "SIGNATURE" => $this->apiSignature,
 "METHOD" => $method,
 "VERSION" => $this->apiVersion,
 );
 $requestParameters+=$requestData;
 $finalRequest = http_build_query($requestParameters);
 $ch = curl_init();
 $this->curl=$ch;
$curlOptions=$this->getcURLOptions();
 $curlOptions[CURLOPT_POSTFIELDS]=$finalRequest;
 //var_dump($curlOptions);exit;
curl_setopt_array($ch, $curlOptions);
 $serverResponse = curl_exec($ch);
 if (curl_errno($ch)) {
 $this->errors = curl_error($ch);
 curl_close($ch);
 if ($this->errorReportingEnabled) {
 $this->showErrors();
 }
 $this->lastServerResponse = null;
 return false;
 } else {
 curl_close($ch);
 $result = array();
 parse_str($serverResponse, $result);
 $this->lastServerResponse = $result;
 return $this->lastServerResponse;
 }
 }
 /**
 * Returns latest result from the PayPal servers
 * @return array
 */
 public function getLastServerResponse() {
 return $this->lastServerResponse;
 }
 /**
 * Call this function if you want to retreave errors occured during last API call
 * @return void Prints all errors during last API call.
 */
 public function showErrors() {
 var_dump($this->errors);
 }
 /**
 *
 * @param string $username Set your PayPal API username
 */
 public function setUsername($username) {
 $this->username = $username;
 }
 /**
 *
 * @param string $password Set your PayPal API password
 */
 public function setPassword($password) {
 $this->password = $password;
 }
 /**
 *
 * @param string $apiSignature Set your PayPal API signature
 */
 public function setApiSignature($apiSignature) {
 $this->apiSignature = $apiSignature;
 }
 /**
 * Call this function if you want to disable error reporting
 */
 public function disableErrorReporting(){
 $this->errorReportingEnabled=false;
 }
 /**
 * Call this function if you want to enable error reporting
 */
 public function enableErrorReporting(){
 $this->errorReportingEnabled=true;
 }
 /**
 *
 * @return boolean Checks if there are errors and returns the true/false
 */
 private function checkForErrors() {
if(!is_array($this->errors) && $this->errors!="") return TRUE;
if (count($this->errors) > 0) {
 return true;
 }
 return false;
 }
 /**
 * Returns an array of options to initialize cURL
 * @return array
 */
 private function getcURLOptions() {
 return array(
 CURLOPT_URL => $this->payPalAPIUrl,
 CURLOPT_VERBOSE => 1,
 CURLOPT_SSL_VERIFYPEER => true,
 CURLOPT_SSL_VERIFYHOST => 2,
 //CURLOPT_CAINFO => dirname(__FILE__) . '/cacert.pem', //CA cert file
 CURLOPT_RETURNTRANSFER => 1,
 CURLOPT_SSL_VERIFYPEER => true,
 CURLOPT_POST => 1,
 );
 }
/**
 * If you want to set cURL with additional parameters, use this function. NOTE: Call this function prior sendRequest method
 * @param int $option
 * @param mixed $value
 */
 public function setCURLOption($option, $value){
 curl_setopt($this->curl, $option, $value);
 }
 }

Cette class comporte tout les éléments nécessaire au bon fonctionnement de votre API PayPal.

Comment vérifier le paiement depuis notre API?

Créer un fichier paiement-paypal.php et intégrez y le code suivant:

<?php
include_once('PayPal.php');
$token=$_GET["token"];//Session retourné par Paypal
$paypal = new PayPal();
$requestParams = array('TOKEN' => $token);
$response = $paypal->GetExpressCheckoutDetails($requestParams);
$payerId=$response["PAYERID"];//ID du paiement retourné par Paypal
$requestParams=array(
"TOKEN"=>$token,
"PAYERID"=>$payerId,
"PAYMENTREQUEST_0_AMT"=>"20",//Motant du paiement
"PAYMENTREQUEST_0_CURRENCYCODE"=>"EUR",//Monnaie
"PAYMENTREQUEST_0_ITEMAMT"=>"20"//Nombre d'objet
);
$transactionResponse=$paypal->DoExpressCheckoutPayment($requestParams);//Execute la transfaction
if(is_array($transactionResponse) && $transactionResponse["ACK"]=="Success"){//Le paiement est réalisé avec succès
//Paiement réussi
}
else{
//Echoué
}
?>

 
Vous voici maintenant capable de traiter un paiement PayPal correctement, si vous avez des suggestions n’hésitez pas à commenter l’article.
Nous vous remercions de votre attention et n’hésitez donc pas à partager si l’article vous as été utile.

Publicités

1

Comment sécuriser PHP de son serveur web

Comment sécuriser PHP de son serveur web

 
Cet article va vous expliquez comment sécurisé PHP de son serveur web APACHE ou NGINX fasse à certains scripts dangereux, nommés « PHP Shell » ou « Backdoor Shell ».
Il est très facile pour n’importe qui de s’en procurer un et il est donc primordiale de prévenir son PHP fasse à ces scripts.
Le tutoriel vous donne une liste de fonctions PHP a désactiver, c’est une solution préventif qui empêche ainsi votre assaillant de prendre le contrôle totale de votre serveur WEB. Bien entendu cette solution n’est pas une solution miracle fasse à tout type d’attaque visant votre site web.

Qu’es qu’un Backdoor Shell sous PHP?

php-backdoor
backdoor php crypté

Un Backdoor Shell en PHP est un script contenant du code dangereux, il est souvent crypté suivant diverses méthodes tel que le base64, urldecode et bien d’autres méthodes de cryptages du code de celui-ci. Il est souvent introduit via une faille Upload ou bien via une faille d’accès à votre serveur FTP (Bruteforce ou bien Exploit du serveur FTP), on peut également les retrouver dans des cracks de template WordPress, Plugins et bien d’autres liens « miracles » qui vous fait soi-disant économiser de l’argent alors qu’en réalité vous risquez très gros.
Les « Defaces » que l’ont peut voir sur certains sites viennent en général de ce genre de backdoors.

Comment ce prévenir d’un Backdoor Shell PHP?

 
Les Backdoors Shell utilisent des fonctions qui possède certaines autorisations sur votre serveur web, il est important de les bloquer afin que les backdoors aient le moins d’emprise possible sur votre serveur web.
Commencez par ouvrir le fichier php.ini de votre serveur web.
Rechercher la ligne disable_functions et remplacez là par la ligne suivante:

disable_functions = "ln, cat, popen, pclose, posix_getpwuid, posix_getgrgid,
posix_kill, parse_perms, system, dl, passthru, exec, shell_exec, popen, proc_close,
proc_get_status, proc_nice, proc_open, escapeshellcmd, escapeshellarg, show_source,
posix_mkfifo, mysql_list_dbs, get_current_user, getmyuid, pconnect, link, symlink,
pcntl_exec, ini_alter, pfsockopen, leak, apache_child_terminate, posix_kill,
posix_setpgid, posix_setsid, posix_setuid, proc_terminate, syslog, fpassthru,
stream_select, socket_select, socket_create, socket_create_listen, socket_create_pair,
socket_listen, socket_accept, socket_bind, socket_strerror, pcntl_fork, pcntl_signal,
pcntl_waitpid, pcntl_wexitstatus, pcntl_wifexited, pcntl_wifsignaled,
pcntl_wifstopped, pcntl_wstopsig, pcntl_wtermsig, openlog, apache_get_modules,
apache_get_version, apache_getenv, apache_note, apache_setenv, virtual, chmod,
file_upload, fsockopen"

A présent, redémarrer votre serveur web, la modification sera prise en compte.
Certaines fonctions bloqué dans notre exemple, bloque l’accès à certaines autorisations d’accès à votre serveur web. la fonction symlink permet par exemple de parcourir l’ensemble des dossiers de votre serveur web, fsockopen est une fonction obsolète chez PHP, elle permet d’executer du UDP flood depuis les backdoors shells.
En bloquant toutes ces fonctions vous supprimerez beaucoup de risques au sujet de votre site web.
Si vous avez des questions, ou des avis n’hésitez pas à publier un commentaire sur notre article, n’hésitez pas aussi à le partager.
Cordialement, Afrofreehost

3Vision-group, une agence web spectaculaire, en Afrique , et pour le monde

Dans un monde qui se veut de plus en plus orienté numérique, il est essentiel pour la survie d’une entreprise, d’emprunter les voies et moyens du digital et de profiter de la force d’Internet pour demeurer compétitive sur son marché.
Pour atteindre cet objectif, 3Vision-Group est une agence web basée en France, et représenté un peu partout de chez vous qui vous propose une variété de services grâce à nos équipes professionnelles qualifiées.
Notre force, recouvrir l’ensemble des métiers du Web : développement de sites Internet et d’applications mobiles, E-Communication, E-Commerce, Accompagnement éditorial, etc…, nous prenons en charge tout ou partie de votre stratégie avec une équipe constituée de spécialistes qui vous feront profiter de leur expertise.
Ainsi vous pourrez garder la main mise sur votre e-réputation et entretenir une présence en ligne reflétant votre identité de marque. Nos prestations vous garantissent une importante flexibilité et vous permettent de vous concentrer sur vos activités spécifiques. De plus, nous nous engageons à vous apporter notre vision extérieure, située côté «consommateur». Vous pourrez dès lors, développer en toute quiétude de nouvelles idées, augmenter vos ventes, gérer au mieux votre image, pour in fine permettre à votre entreprise de se pérenniser.
Enfin, sachez que se développer sur Internet peut s’avérer long s’il vous faut bâtir votre communauté pierre par pierre. C’est pourquoi notre agence vous garantit d’ores et déjà un réseau puissant sur lequel s’appuyer, à travers des plateformes web connectées (telles que doingbuzz.com, afrique-entreprise.com, godogodoo.com etc…) et la force des réseaux sociaux.
En somme, choisir 3Vision Group, c’est vous assurer de véritables alliés de votre performance et de l’évolution de vos activités.