societeuser = new Societeuser(); $this->societeusercentral = new Societeusercentral(); $this->facture = new Facture(); $codeSociete = $_SESSION['codeSociete']; $societe = $this->societeuser->getSocieteSimple($codeSociete); $this->parammobile = $this->societeusercentral->getSocieteusersPaiementMobile($codeSociete); $parammobile = $this->parammobile; $this->fournisseurPaiementMobile = $parammobile['fournisseurPaiementMobile']; $this->apikeyPaiementMobile = $parammobile['apikeyPaiementMobile']; $this->passwordPaiementMobile = $parammobile['passwordPaiementMobile']; $this->emailPaiementMobile = $parammobile['emailPaiementMobile']; $this->paiementMobileSandBox = $parammobile['paiementMobileSandBox']; $this->codePays = $societe['codePays']; $this->indicatifTelephone = $societe['indicatifTelephone']; $this->nomProduitSante = $societe['nomProduitSante']; $this->plafondPaiementMobile = $societe['plafondPaiementMobile']; $this->testPaiementMobile = $societe['testPaiementMobile']; } public function index() { } public function envoyerargent() { $fournisseurPaiementMobile = $this->fournisseurPaiementMobile; if($fournisseurPaiementMobile>" ") { $idReglement = $this->requete->getParametreFormulaire("idReglement"); $withdrawModePaiementMobile = $this->requete->getParametreFormulaire("withdrawModePaiementMobile"); $testPaiementMobile = $this->testPaiementMobile; $plafondPaiementMobile = $this->plafondPaiementMobile; /* var_dump ( array ( "fournisseurPaiementMobile" => $fournisseurPaiementMobile, "testPaiementMobile" => $testPaiementMobile, "plafondPaiementMobile" => $plafondPaiementMobile, ) ); exit(); */ if($testPaiementMobile=="1") { $this->envoyerargenttests($idReglement, $withdrawModePaiementMobile); } else { if($fournisseurPaiementMobile=="cinetpay") { $this->envoyerargentcinetpay($idReglement, $withdrawModePaiementMobile); } elseif($fournisseurPaiementMobile=="paydunya") { $this->envoyerargentpaydunya($idReglement, $withdrawModePaiementMobile); } } } else { echo "Pas de Fournisseur de paiement mobile"; } } public function envoyerargentcinetpay($idReglement, $withdrawModePaiementMobile) { $reglement = $this->facture->getPaiementMobile($idReglement); $codeSociete = $_SESSION['codeSociete']; $notify_url = $_SESSION['lienProduction_C']; $name = $reglement['beneficiaireReglement']; $surname = $codeSociete; $phone = $reglement['mobilePaiement']; $prefix = $reglement['prefixePaiementMobile']; $amount = $reglement['montantApayer']; $email = $this->emailPaiementMobile; $token = null; $apikey = $this->apikeyPaiementMobile; $password = $this->passwordPaiementMobile; if($apikey>" " && $password>" ") { $ch = curl_init('https://client.cinetpay.com/v1/auth/login'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([ 'apikey' => $apikey, 'password' => $password, 'lang' => 'fr' ])); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Content-Type: application/x-www-form-urlencoded' ]); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); if(isset($data['data']['token'])){ $token = $data['data']['token']; } else { echo "Erreur auth: ".print_r($data, true); exit(); } if($token) { // Ajout contact à cinetpay $payload = json_encode([ [ "prefix" => $prefix, "phone" => $phone, // numéro local sans +225 dans "phone" "name" => $name, "surname"=> $surname, "email" => $email ] ]); $ch = curl_init("https://client.cinetpay.com/v1/transfer/contact?token={$token}&lang=fr"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['data' => $payload])); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']); curl_exec($ch); curl_close($ch); // Envoyer l’argent au contact — ordre de transfert $amount = 200; // pour les tests $data = [ [ "prefix" => $prefix, "phone" => $phone, "amount" => $amount, "client_transaction_id" => "$codeSociete-$idReglement"."-".uniqid(), // empêche le paiement 2 fois du même décompte "notify_url" => $notify_url ] ]; $payload = json_encode($data); $ch = curl_init("https://client.cinetpay.com/v1/transfer/money/send/contact?token={$token}&lang=fr"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['data' => $payload])); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/x-www-form-urlencoded']); $response = curl_exec($ch); curl_close($ch); // action à faire si le paiement est passé => enregitsrer paiement décompte dans INTER-SANTE $data = json_decode($response, true); $codeOp = $data['data'][0][0]["code"]; if(isset($codeOp) and $codeOp=="0"){ // Succès $transaction_id = $data['data'][0][0]["transaction_id"]; $idPaiementDecompte = $this->facture->payerParMobile($idReglement, $amount, $transaction_id, $this->fournisseurPaiementMobile); var_dump ( array ( "transaction_id" => $transaction_id, "idPaiementDecompte" => $idPaiementDecompte, ) ); exit(); } else { echo "Erreur auth: ".print_r($data, true); exit(); } } } else { echo "Fournisseur de paiement mobile inconnu!"; } } public function envoyerargentpaydunya($idReglement, $withdrawModePaiementMobile) { $reglement = $this->facture->getPaiementMobile($idReglement); $codeSociete = $_SESSION['codeSociete']; $notify_url = $_SESSION['lienProduction_C']; $name = $reglement['beneficiaireReglement']; $surname = $codeSociete; $phone = $reglement['mobilePaiement']; $prefix = $reglement['prefixePaiementMobile']; $amount = $reglement['montantApayer']; $email = $this->emailPaiementMobile; $PD_MASTER_KEY = $this->parammobile['apikeyPaiementMobile']; $PD_PRIVATE_KEY = $this->parammobile['clePrivePaiementMobile']; $PD_PUBLIC_KEY = $this->parammobile['clePubliquePaiementMobile']; $PD_TOKEN = $this->parammobile['passwordPaiementMobile']; $paiementMobileSandBox = $this->parammobile['paiementMobileSandBox']; $amount = 200; // pour les tests => enlever en production $payloadlnvoice = [ "account_alias" => $phone, // numéro local sans code pays "amount" => $amount, "withdraw_mode" => $withdrawModePaiementMobile, "callback_url" => $notify_url, ]; $urlInvoice = 'https://app.paydunya.com/api/v2/disburse/get-invoice'; $ch = curl_init($urlInvoice); $headers = [ 'Content-Type: application/json', "PAYDUNYA-MASTER-KEY: $PD_MASTER_KEY", "PAYDUNYA-PRIVATE-KEY: $PD_PRIVATE_KEY", "PAYDUNYA-PUBLIC-KEY: $PD_PUBLIC_KEY", "PAYDUNYA-TOKEN: $PD_TOKEN", ]; curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => $headers, // CURLOPT_TIMEOUT => 45, ]); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payloadlnvoice, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); if(isset($data['disburse_token'])){ $response_code = $data['response_code']; $disburse_token = $data['disburse_token']; } else { echo "Erreur auth: ".print_r($data, true); exit(); } if($disburse_token && $response_code=="00") { $payloadPayment = [ "disburse_invoice" => $disburse_token, // le token reçu de get-invoice "disburse_id" => "$codeSociete-$idReglement"."-".uniqid(), // empêche le paiement 2 fois du même décompte ]; $urlPayment = "https://app.paydunya.com/api/v2/disburse/submit-invoice"; $ch = curl_init($urlPayment); curl_setopt_array($ch, [ CURLOPT_RETURNTRANSFER => true, CURLOPT_CUSTOMREQUEST => 'POST', CURLOPT_HTTPHEADER => $headers, // CURLOPT_TIMEOUT => 45, ]); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($payloadPayment, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE)); $response = curl_exec($ch); curl_close($ch); $data = json_decode($response, true); if(isset($data['transaction_id']) && $data['response_code']=="00"){ $transaction_id = $data['transaction_id']; $idPaiementDecompte = $this->facture->payerParMobile($idReglement, $amount, $transaction_id, $this->fournisseurPaiementMobile); /* var_dump ( array ( "transaction_id" => $transaction_id, "idPaiementDecompte" => $idPaiementDecompte, ) ); */ exit(); } else { echo "Erreur auth: ".print_r($data, true); exit(); } } } public function envoyerargenttests($idReglement, $withdrawModePaiementMobile) { $reglement = $this->facture->getPaiementMobile($idReglement); $amount = $reglement['montantApayer']; $transaction_id = $withdrawModePaiementMobile . "-" . uniqid(); $idPaiementDecompte = $this->facture->payerParMobile($idReglement, $amount, $transaction_id, $this->fournisseurPaiementMobile); /* var_dump ( array ( // "transaction_id" => $transaction_id, // "withdrawModePaiementMobile" => $withdrawModePaiementMobile, "idPaiementDecompte" => $idPaiementDecompte, ) ); exit(); */ } }