News:

Want to get involved in developing SMF, then why not lend a hand on our github!

Main Menu

taille d'un champ d'enregistrement dans abonnement payant

Started by DanielSan34, January 14, 2016, 04:31:43 AM

Previous topic - Next topic

DanielSan34

je fais part de l'avancée :

après entretien avec Paypal :
comme nous sommes dans le cas d'un abonnement,
il n'y a pas de gestion d'adresse de livraison,
c'est pourquoi nous ne retrouvons pas ces informations dans l'administration paypal.

J'ai donc créé un bouton "acheter" que j'ai intégré à la place de "s'abonner",
à partir de là les coordonnées apparaissent bien chez paypal et la notification de paiement que reçoit le "client".
Sauf que lors du retour sur le forum, l'abonnement n'est pas pris en compte ! >:(
Je n'arrive pas à afficher les informations envoyées par paypal sur le forum pour éventuellement les mettre en force dans le script ...
(ce sont les champs a3, t3, p3 qui définissent une transaction de type "abonnement" ).

Pour ce qui est de la facturation via l'admin de Paypal, elle ne vaut que si on envoie une demande de paiement via l'admin de paypal.

Donc soit :

  • j'utilise un bouton "acheter un produit" et lors du retour sur le forum après paiement je simule un abonnement
  • je laisse tel quel et me faudra implémenter un module de facturation,
    je ne sais pas s'il en existe déjà,
    mais j'en ai déjà fait (génération de PDF envoyé en PJ d'un email ...)
  • soit j'utilise un logiciel tierce mais faudra que je fasse du copier/coller des coordonnées
    et trouver comment donner la permission de voir ces champs privés à un modérateur (celui qui gère les adhésions)
  • soit utiliser un module de vente en ligne dans lequel la gestion des abonnements est prise en compte

sinon l'ajout des champs personnalisés dans la notification de "nouvelle souscription" ne fonctionne pas :(

maximus23

Bonjour,

sinon l'ajout des champs personnalisés dans la notification de "nouvelle souscription" ne fonctionne pas :(

Donc les variables ne passent pas dans le formulaire c'est cela ?

Je vois que c'est du SSI si c'est le cas je ferai un test SSI car la fonction s'opère autrement via le SSI elle doit y être intégrée directement via l'appel SSI bien entendu car c'est externe à Smf.

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DanielSan34


maximus23

Bonsoir,

Bon on progresse effectivement ce foutu fichier est en mode SSI.

Donc tu vas ajouter avant la fin du fichier SSI.php la fonction SSI suivante :

// Load mycustom fields for this area => 'summary' loads all public ones.
function ssi_loadMyCustomFields($area = 'summary')
{
global $db_prefix, $context, $txt, $user_profile, $smcFunc, $user_info, $settings, $scripturl;


// Did we get the user by name...
if (isset($_REQUEST['user']))
$memberResult = loadMemberData($_REQUEST['user'], true, 'profile');
// ... or by id_member?
elseif (!empty($_REQUEST['u']))
$memberResult = loadMemberData((int) $_REQUEST['u'], false, 'profile');
// If it was just ?action=profile, edit your own profile.
else
$memberResult = loadMemberData($user_info['id'], false, 'profile');

// Check if loadMemberData() has returned a valid result.
if (!is_array($memberResult))
fatal_lang_error('not_a_user', false);

// If all went well, we have a valid member ID!
list ($memID) = $memberResult;
$context['id_member'] = $memID;
$cur_profile = $user_profile[$memID];

// Get the right restrictions in place...
$where = 'active = 1';

// Load all the relevant fields - and data.
$request = $smcFunc['db_query']('', '
SELECT
col_name, field_name, field_desc, field_type, field_length, field_options,
default_value, bbc, enclose, placement
FROM {db_prefix}custom_fields
WHERE ' . $where,
array(
'area' => $area,
)
);

$context['custom_myprofile_fields'] = array();
while ($row = $smcFunc['db_fetch_assoc']($request))
{
$curField = 'cust_' . $row['col_name'];

// Collect the column info and some extra.
$context['custom_myprofile_fields']['columns'][$curField] = array(
'label' => $row['field_name'],
'type' => $row['field_type'],
'bbc' => !empty($row['bbc']),
);

// Build up sort queries.
if ($row['field_type'] != 'check')
$context['custom_myprofile_fields']['sort'][$curField] = array(
'down' => 'LENGTH(t' . $curField . '.value) > 0 ASC, IFNULL(t' . $curField . '.value, 1=1) DESC, t' . $curField . '.value DESC',
'up' => 'LENGTH(t' . $curField . '.value) > 0 DESC, IFNULL(t' . $curField . '.value, 1=1) ASC, t' . $curField . '.value ASC'
);
else
$context['custom_myprofile_fields']['sort'][$curField] = array(
'down' => 't' . $curField . '.value DESC',
'up' => 't' . $curField . '.value ASC'
);


if (isset($_REQUEST['sort']) && $_REQUEST['sort'] == $curField)
{
$context['custom_myprofile_fields']['join'] = 'LEFT JOIN {db_prefix}themes AS t' . $curField . ' ON (t' . $curField . '.variable = {string:t' . $curField . '} AND t' . $curField . '.id_theme = 1 AND t' . $curField . '.id_member = mem.id_member)';
$context['custom_myprofile_fields']['parameters']['t' . $curField] = $row['col_name'];
}


// Shortcut.
$exists = $memID && isset($user_profile[$memID], $user_profile[$memID]['options'][$row['col_name']]);
$value = $exists ? $user_profile[$memID]['options'][$row['col_name']] : '';

// If this was submitted already then make the value the posted version.
if (isset($_POST['customfield']) && isset($_POST['customfield'][$row['col_name']]))
{
$value = $smcFunc['htmlspecialchars']($_POST['customfield'][$row['col_name']]);
if (in_array($row['field_type'], array('select', 'radio')))
$value = ($options = explode(',', $row['field_options'])) && isset($options[$value]) ? $options[$value] : '';
}

// HTML for the input form.
$output_html = $value;
if ($row['field_type'] == 'check')
{
$true = (!$exists && $row['default_value']) || $value;
$input_html = '<input type="checkbox" name="customfield[' . $row['col_name'] . ']" ' . ($true ? 'checked="checked"' : '') . ' class="input_check" />';
$output_html = $true ? $txt['yes'] : $txt['no'];
}
elseif ($row['field_type'] == 'select')
{
$input_html = '<select name="customfield[' . $row['col_name'] . ']"><option value="-1"></option>';
$options = explode(',', $row['field_options']);
foreach ($options as $k => $v)
{
$true = (!$exists && $row['default_value'] == $v) || $value == $v;
$input_html .= '<option value="' . $k . '"' . ($true ? ' selected="selected"' : '') . '>' . $v . '</option>';
if ($true)
$output_html = $v;
}

$input_html .= '</select>';
}
elseif ($row['field_type'] == 'radio')
{
$input_html = '<fieldset>';
$options = explode(',', $row['field_options']);
foreach ($options as $k => $v)
{
$true = (!$exists && $row['default_value'] == $v) || $value == $v;
$input_html .= '<label for="customfield_' . $row['col_name'] . '_' . $k . '"><input type="radio" name="customfield[' . $row['col_name'] . ']" class="input_radio" id="customfield_' . $row['col_name'] . '_' . $k . '" value="' . $k . '" ' . ($true ? 'checked="checked"' : '') . '>' . $v . '</label><br />';
if ($true)
$output_html = $v;
}
$input_html .= '</fieldset>';
}
elseif ($row['field_type'] == 'text')
{
$input_html = '<input type="text" name="customfield[' . $row['col_name'] . ']" ' . ($row['field_length'] != 0 ? 'maxlength="' . $row['field_length'] . '"' : '') . ' size="' . ($row['field_length'] == 0 || $row['field_length'] >= 50 ? 50 : ($row['field_length'] > 30 ? 30 : ($row['field_length'] > 10 ? 20 : 10))) . '" value="' . $value . '" class="input_text" />';
}
else
{
@list ($rows, $cols) = @explode(',', $row['default_value']);
$input_html = '<textarea name="customfield[' . $row['col_name'] . ']" ' . (!empty($rows) ? 'rows="' . $rows . '"' : '') . ' ' . (!empty($cols) ? 'cols="' . $cols . '"' : '') . '>' . $value . '</textarea>';
}

// Parse BBCode
if ($row['bbc'])
$output_html = parse_bbc($output_html);
elseif($row['field_type'] == 'textarea')
// Allow for newlines at least
$output_html = strtr($output_html, array("\n" => '<br />'));

// Enclosing the user input within some other text?
if (!empty($row['enclose']) && !empty($output_html))
$output_html = strtr($row['enclose'], array(
'{SCRIPTURL}' => $scripturl,
'{IMAGES_URL}' => $settings['images_url'],
'{DEFAULT_IMAGES_URL}' => $settings['default_images_url'],
'{INPUT}' => $output_html,
));

$context['mycustom_fields'][] = array(
'name' => $row['field_name'],
'desc' => $row['field_desc'],
'type' => $row['field_type'],
'input_html' => $input_html,
'output_html' => $output_html,
'placement' => $row['placement'],
'colname' => $row['col_name'],
'value' => $value,
);
}
$smcFunc['db_free_result']($request);
}


Dans ce même fichier au début tu cherches :

require_once($sourcedir . '/Security.php');

et tu ajoutes après ceci :

require_once($sourcedir . '/Profile-Modify.php');

Puis tu vas créer un fichier test.php  que tu exécuteras à la racine du site avec ceci de cette façon tu auras les éléments pour faire ton appel de fonction car attention différente de l'appel de fonction globale de Smf.


<?php

// Start things rolling by getting SMF alive...
$ssi_guest_access true;
if (!
file_exists(dirname(__FILE__) . '/SSI.php'))
die('Cannot find SSI.php');

require_once(
dirname(__FILE__) . '/SSI.php');
require_once(
$sourcedir '/ManagePaid.php');


header'content-type: text/html; charset=utf-8' );


// Exemple de l'appel de Fonction à mettre dans Subscriptions


global $db_connection$modSettings$context$sc$user_info$topic$board$txt;

ssi_loadMyCustomFields();

echo
'<br/><br/>';

// print_r($context);

echo'<br/><br/>';

echo 
'Nom : ' .$context['mycustom_fields'][0]['name'];

echo 
'<br/>Description : ' .$context['mycustom_fields'][0]['desc'];

echo 
'<br/>Mon Adresse : ' .$context['mycustom_fields'][0]['value'];

echo
'<br/><br/>';

echo 
'Nom : ' .$context['mycustom_fields'][1]['name'];

echo 
'<br/>Description : ' .$context['mycustom_fields'][1]['desc'];

echo 
'<br/>Mon Adresse : ' .$context['mycustom_fields'][1]['value'];

echo
'<br/><br/>';

echo 
'Nom : ' .$context['mycustom_fields'][2]['name'];

echo 
'<br/>Description : ' .$context['mycustom_fields'][2]['desc'];

echo 
'<br/>Mon Adresse : ' .$context['mycustom_fields'][2]['value'];


echo
'<br/><br/>';
echo
'<br/><br/>';

?>




Voilà fais le test avec le fichier test dis moi si tout est bon et seulement après tu feras les modifs dans le fichier adéquat.

Attention à la fonction insomnie();

:)


Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DanielSan34

bonsoir,

ok merci ! Le fichier test fonctionne.

j'ai malheureusement un souci d'encodage d'url de retour qui est apparu (j'ai dû faire quelque chose quelque part mais où ?? )
Me rappel un pb d'accent dans le titre de l'abonnement, en passant le charset à UTF-8 ça a réglé ce pb mais engendré celui de l'url ???

   forum/index.php?action=profile%3bu%3d13293%3barea%3dsubscriptions%3bsub_id%3d3%3bdone
au lieu de
   forum/index.php?action=profile;u=13293;area=subscriptions;sub_id=3;done

il est pourtant bien indiqué dans le formulaire paypal que le charset est UTF-8
<input type="hidden" id="paypal_charset" name="charset" value="UTF-8" />

et un test sur les variables $gateway['hidden']
echo $name." : ".mb_detect_encoding($value)."<br/>\n";
me renvoie ASCII, donc pas de souci normalement ?

donc comme l'email de retour est faux, ça n'envoie pas l'email dans lequel j'ai rajouté les champs persos ! arg !

je creuse

maximus23

#25
Bonsoir,

J'avais vu quelque part que tu avais modifié l'encodage mais je ne me rappelle plus ou.

Tu as cela avec tout les liens du forum ?

Quand tu fais le test avec le fichier ssi tes accentués sont corrects ?

Car je sais que certains on déjà eu des problèmes à ce niveau.

Retour ascii pour ton encodage url si ton forum est uft8 tu devrais être utf8 pour tout ?

Ps : manque un morceau de mon message >>

Sinon tu peux forcer le ré-encodage de ton url :

$str = utf8_encode($str);

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DanielSan34

quand je teste avec le fichier test.php tout est ok.

J'ai trouvé où j'avais rajouté le charset (en fait par défaut le module n'en met pas)
dans Subscriptions-Paypal.php / function fetchGatewayFields
du coup je me retrouve avec un nom d'abonnement bizarroïde et une url inexacte :(
ça me saoule !


// All the standard bits.
$return_data['hidden']['business'] = $modSettings['paypal_email'];
$return_data['hidden']['item_name'] = $sub_data['name'] . ' ' . $txt['subscription'];
$return_data['hidden']['item_number'] = $unique_id;
$return_data['hidden']['currency_code'] = strtoupper($modSettings['paid_currency_code']);
$return_data['hidden']['no_shipping'] = 1;
$return_data['hidden']['no_note'] = 1;
$return_data['hidden']['amount'] = $value;
$return_data['hidden']['cmd'] = !$sub_data['repeatable'] ? '_xclick' : '_xclick-subscriptions';
$return_data['hidden']['return'] = $return_url;
$return_data['hidden']['a3'] = $value;
$return_data['hidden']['src'] = 1;
$return_data['hidden']['notify_url'] = $boardurl . '/subscriptions.php';
// $return_data['hidden']['charset'] = 'UTF-8';



d'ailleurs c'est plutôt dans ce fichier que j'ai rajouté les champs perso pour qu'ils complètent le formulaire paypal.
if ($context['user']['is_logged'])
{
# champs persos
loadMyCustomFields($memID, $area = 'summary');
$return_data['hidden']['first_name'] = $context['mycustom_fields'][7]['value'];
$return_data['hidden']['last_name'] = $context['mycustom_fields'][8]['value'];
$return_data['hidden']['address1'] = $context['mycustom_fields'][4]['value'];
$return_data['hidden']['city'] = $context['mycustom_fields'][9]['value'];
$return_data['hidden']['zip'] = $context['mycustom_fields'][2]['value'];
$return_data['hidden']['night_phone_b'] = $context['mycustom_fields'][5]['value'];
$return_data['hidden']['email'] = $context['user']['email'];
}


j'ai pu copier le formulaire de retour avant d'être redirigé, là le charset était Windows-1252, va savoir ...
Quand l'état annonce la subvention d'un clavier avec des accents, on rigole ! ;D

Malgré des tests avec la sandbox, je ne reçois plus de notification "nouvelle souscription"
faut que je dorme

DanielSan34

Quote from: maximus23 on January 28, 2016, 05:33:55 PM
Sinon tu peux forcer le ré-encodage de ton url :
$str = utf8_encode($str);
ça me sort ça pour le nom d'abonnement "test d'adhésion fédé" au lieu de "test d'adhésion fédé" avec ta ligne
pour l'url, il n'y a pas de différence, elle a l'air bien

maximus23

Bonsoir,

Avec les retours d'encodage donc c'est correct en charset :)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DanielSan34

Bonsoir,

je viens de faire un nouvel essai pour de vrai avec un abonnement à 1€
(je pensais qu'en le faisant sur un forum miroir + en mode bac à sable ça pourrait être la cause)

nom de l'abonnement avec accent : OK,
champs perso : OK,
paiement : OK,
url de retour : PAS OK

en parallèle dans ton fichier test qui est devenu :
<?php

// Start things rolling by getting SMF alive...
$ssi_guest_access true;
if (!
file_exists(dirname(__FILE__) . '/SSI.php'))
die('Cannot find SSI.php');

require_once(
dirname(__FILE__) . '/SSI.php');
require_once(
$sourcedir '/ManagePaid.php');
require_once(
$sourcedir '/Subs-Admin.php');


header'content-type: text/html; charset=utf-8' );


// Exemple de l'appel de Fonction à mettre dans Subscriptions


global $db_connection$modSettings$context$sc$user_info$topic$board$txt;

ssi_loadMyCustomFields();
$notify_users = array('email'=>'[email protected]','name'=>'DanielSan','id'=>0);

$replacements = array(
'NAME' => "rahan",
'SUBNAME' => "raoul c'est cool",
'SUBUSER' => "daniel",
'SUBEMAIL' => "[email protected]",
'PRICE' => sprintf('&euro;''69'),
'PROFILELINK' => 'lien_profil',
'DATE' => 'demain',

//modifs
'CUST_PRENOM' => $context['mycustom_fields'][7]['value'],
'CUST_NOM' => $context['mycustom_fields'][8]['value'],
'CUST_ETB' => $context['mycustom_fields'][6]['value'],
'CUST_RUE' => $context['mycustom_fields'][4]['value'],
'CUST_CP' => $context['mycustom_fields'][2]['value'],
'CUST_VILLE' => $context['mycustom_fields'][9]['value'],
'CUST_TEL' => $context['mycustom_fields'][5]['value']
);

emailAdmins('paid_subscription_new'$replacements$notify_users);
?>


ça m'a bien envoyé un email avec les champs persos !
donc j'imagine que tout est bon dans le cochon code, et qu'il me reste à régler ce pb d'encodage d'url de retour

maximus23

Bonsoir,

C'est Paypal qui te renvoi le mail ou c'est une notification Smf ?

:)



Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DanielSan34

Hello,

c'est une fois de retour sur le forum que les notifications sont envoyées :
une à l'adhérent et l'autre au service adhésion (celui avec les champs perso).

maximus23

Bonjour,

Donc l'adresse Email incorrecte vient de Paypal ?

Aucun des deux mails n'est envoyé ?

:)
Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DanielSan34

Bonjour,

Ce n'est pas l'adresse email mais l'url de retour qui merde.
Donc le visiteur n'arrive pas au bon endroit, donc les notifications envoyées par le forum ne se font pas.

maximus23

Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DanielSan34

Quote from: maximus23 on January 29, 2016, 09:39:20 AM
Dans ton log Smf tu as un report erreur ?
disons que ce mois-ci j'en quelques unes ... ;D
Toutes les erreurs (162534) | Critiques (14) | Générale (95) | Modèles (7) | Éléments indéfinis (162371) | Utilisateurs (47)
faudrait peut-être que je m'y penche à ces trucs ...

sinon j'ai contacté le support technique de paypal,
il manquait le paramètre "rm" dans le formulaire
Allowable values are:
0 – all shopping cart payments use the GET method
1 – the buyer's browser is redirected to the return URL by using the GET method, but no payment variables are included
2 – the buyer's browser is redirected to the return URL by using the POST method, and all payment variables are included

j'ai bien entendu essayé les 3, mais en vain.
Je vais télécharger une version propre de SMF, mettre les fichiers là où il faut et on verra bien ...

DanielSan34

si j'installe une version propre de SMF avec ma bdd SQL actuelle, ça ferait quoi ?
car avec toutes ces modifs, peut plus installer de mod ;D

Maintenant que j'ai mis les mains dans le cambouis, si c'était à refaire je m'y prendrais pas pareil
notamment pour les modifs de template : j'ai modifié des fichiers du thème par défaut alors que j'aurai dû le dupliquer dans mon propre thème ...
et pour les fichiers du dossier source, s'il y a une méthode pour ne pas faire de connerie ...

qu'en penses-tu ?

DanielSan34

ah je viens de m'apercevoir d'un truc plutôt cool,
je ne sais pas comment, mais si je rembourse un abonnement via l'admin de paypal,
je reçois une notif du forum :o
va savoir !

maximus23

Bonsoir,

Si tu installes Smf en propre et que tu remets ta bdd tu auras juste ce qui est accessible par smf. Donc Mods et Thèmes à 0.

Moi quand je fais des modifications je fais toujours un backup du forum pour garder celui de base et quand je modifie les fichiers je les numérotes et je renvois le numéro vers la modification apportée ainsi j'ai l'historique des modifications.

Pour faire de grosses modif je les fais directement sur des fichiers propres de Smf pas de duplication on risque des erreurs car on est en dehors du thème par défaut de Smf.

Pour les fichiers Sources identiques numérotations et historique des modifs donc chaque modifications se trouvent dans un fichier qui correspond au numéro de modification se trouvant dans les fichiers.

Oui là la façon de travailler de chacun diffère surtout que moi je programme à la volée lol alors si un autre passe après pas la peine il ne s'y retrouvera pas ... :) :)

Tiens oui hors sujet => je ne me rappelle pas avoir mis des accentués sur les majuscules quand j'allais à l'école donc ce fameux clavier prôné et repensé par le ministère pour moi ils peuvent se le mettre ou je pense  :laugh:

Bon en ce qui concerne PayPal même là j'ai difficile de t'aider car j'utilise pas ce genre de chose pour le reste pas de soucis même si tu me fais perdre un de mes deux derniers cheveux.... ;D ;D



Pas de support par PM ou Courrier...Veuillez utiliser le forum pour vous avoir une réponse rapide à votre demande d'aide. Merci.
Amitiés et à Bientôt...
No support by PM or Mail...You will get better and faster responses in the support forums. Thank you.
Have a nice day...

DanielSan34

ok je n'ai pas tout très bien compris à ta méthode mais j'te crois ! ;D
vu que niveau thème il est maintenant assez stable, je pense que je vais repartir d'un truc propre est le faire bien.
Après je verrais pour le dossier "source" ...

Advertisement: