AVERTISSEMENT : Ce tutoriel est actuellement en cours de rédaction...
Préambule : N'étant pas développeur PHP et mes connaissances en la matière se limitant au "bricolage" à partir d'exemples de bouts de code, la solution qui suit est le fruit de nombreuses recherches. Par ce tutoriel je souhaite épargner à toute personne qui voudrait mettre en relation leur site sous VM 2.x et la solution propriétaire GameCP 1.2.x (à l'heure où j'écris ces lignes, la version 1.3 n'est encore qu'en bêta et sa date de sortie n'est pas connue).
Remerciements : Je tiens à remercier pour leur aide précieuse : PATSXM971
Objectif : Permettre la création automatisée d'un compte utilisateur et/ou d'un serveur de jeu sous GameCP au moment où une commande passée sur Virtuemart passe en statut "Payée".
Lorsque survient cet évènement, il faudra que soient effectuées automatiquement les opérations suivantes :
- vérifier si l'utilisateur virtuemart existe déjà dans la BD des utilisateurs GameCP et le créer si besoin,
- créer le serveur de jeu commandé avec les choix définis par le client (RAM, Nbre de slots, Privé/Public, etc)
Support documentaire : Afin de mettre en oeuvre cette solution, il y a lieu de se référer aux documentations suivantes :
1 - Insertion dans le code de Virtuemart :
Ce code est à ajouter dans le fichier [racine_de_votre_site]/administrator/components/com_virtuemart/models/orders.php
après la ligne :
Code PHP:
$data->order_status == "X"
Code PHP:
/* Code pour que VM envoie des infos à l'API de GameCP
pour la construction du serveur.
Ce code est à ajouter dans le fichier administrator/components/com_virtuemart/models/orders.php
après la ligne :
$data->order_status == "X"
*/
if ($data->order_status == "C") { // Si la commande dans VM passe à "payée"
$url = "http://votre_url.com"; // The URL to your GameCP panel
$passphrase = "votre_password_api"; // The passphrase defined in Settings > Billing
/* [A CODER] Vérifier si le client VM a déjà un compte sur GameCP (en comparant adresse mail ?) */
// Si oui : récupérer son customerid dans variable $customerid
// Si non, continuer et créer l'utilisateur avant de créer le serveur
/* [ILLUSTRATION] Collecte des données nécessaires à la création d'un customer dans GameCP */
/* Dans virtuemart, on capture les infos de cette manière :
$userinfo = ps_user::getUserInfo($current_user->id);
$firstname=$userinfo->f("first_name");
*/
$postdata = array(
"passphrase" => $passphrase,
"action" => "create", // ou 'action' => 'unsuspend', (si il sagit dun renouvellement)
"idtype" => 'direct', //(si il sagit dun renouvellement)
"function" => "createacct",
"username" => $infoFromYourAPI["User Name"],
"password" => $infoFromYourAPI["password"],
"customerid" => $infoFromYourAPI['userid'],
"packageid" => $packageID,
// profile information
"emailaddr" => $order['details']['BT']->email,
"firstname" => $address->first_name,
"lastname" => $address->last_name,
"address" => $address->address_1,
"city" => $address->city,
"state" => isset($address->virtuemart_state_id) ? ShopFunctions::getStateByID ($address->virtuemart_state_id) : '',
"country" => ShopFunctions::getCountryByID ($address->virtuemart_country_id, 'country_2_code'),
"zipcode" => $address->zip,
"phonenum" => $address->phone_1,
// Game server information
"game_id" => $infoFromYourAPI["game_id"],
"max_players" => $infoFromYourAPI['Players'],
"pub_priv" => $infoFromYourAPI["pubpriv"],
"login_path" => $infoFromYourAPI["no"],
"sv_location" => $infoFromYourAPI["Location"], //"null" pour Automatic
/* game profile */
"website" => $infoFromYourAPI['Website'],
"hostname" => $infoFromYourAPI['Host Name'],
"motd" => $infoFromYourAPI['MOTD'],
"rcon_password" => $infoFromYourAPI['RCON Password'],
"priv_password" => $infoFromYourAPI['Server Password'],
"addons" => serialize($infoFromYourAPI['addons'])
);
/* [CODE] Envoie des données par Curl */
$ch = curl_init(rtrim($url, "/")."/billing/mb/index.php");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
(description)
3 - Créer votre premier produit :
(description)