J'essaie d'intégrer le standard Paypal à mon site Wordpress et tout se passait bien jusqu'à ce que je veuille faire une chose simple:
Je pensais que ce serait assez simple, mais si j'ajoute ceci à mon functions.php
pour le post IPN Hook:
add_filter("gform_Paypal_post_ipn", "update_order_status", 10, 4);
function update_order_status($ipn_post, $entry, $config, $cancel){
// if the IPN was canceled, don't process
if($cancel)
return;
global $current_user;
get_currentuserinfo();
$currUID = $current_user->ID;
update_user_meta($currUID, 'eventRegistration', 1);
return;
}
Absolument rien ne se passe. Je pense que puisque l'IPN rebondit hors site, l'ID utilisateur n'est peut-être pas disponible? Ou est-ce que je me trompe ici?
Voyant que j'ai raison de dire que l'ID utilisateur n'est pas disponible, je pensais à un autre moyen de saisir l'ID utilisateur. Depuis que j'utilise Gravity Forms avec l'addon Paypal, tous les formulaires soumis sont stockés dans une base de données tables wp_rg_lead
& wp_rg_Paypal_transaction
. Étant donné que chaque IPN affiche un identifiant de transaction, j'ai pensé que je pouvais faire une jointure entre les deux tables en utilisant l'identifiant de transaction envoyé par Paypal.
alors j'ai essayé:
$txn_id = 'aRandomStringOfNumbersAndLetters'; // The transaction ID that Paypal POSTs
$uid = $wpdb->get_col( $wpdb->prepare(
"
SELECT wp_rg_lead.created_by
FROM wp_rg_lead, wp_rg_Paypal_transaction
WHERE wp_rg_lead.id = wp_rg_Paypal_transaction.entry_id AND wp_rg_Paypal_transaction.transaction_id = %s
",
$txn_id
));
qui a renvoyé l'ID utilisateur associé à l'ID de transaction. Je me suis dit, génial! Cela fonctionnera!
Cependant, si j'essaie de combiner tout cela dans mon functions.php
, rien ne semble fonctionner dans son intégralité.
Ce:
add_filter("gform_Paypal_post_ipn", "update_order_status", 10, 4);
function update_order_status($ipn_post, $entry, $config, $cancel){
// if the IPN was canceled, don't process
if($cancel)
return;
$txn_id = $ipn_post["txn_id"]; // transaction ID POSTed by Paypal
$uid = $wpdb->get_col( $wpdb->prepare(
"
SELECT wp_rg_lead.created_by
FROM wp_rg_lead, wp_rg_Paypal_transaction
WHERE wp_rg_lead.id = wp_rg_Paypal_transaction.entry_id AND wp_rg_Paypal_transaction.transaction_id = %s
",
$txn_id
) );
update_user_meta($uid[0], 'eventRegistration', 1)
return;
}
function update_order_status($ipn_post, $entry, $config, $cancel){
$txn_id = $ipn_post["txn_id"]; // transaction ID POSTed by Paypal
$uid = $wpdb->get_col( $wpdb->prepare(
"
SELECT wp_rg_lead.created_by
FROM wp_rg_lead, wp_rg_Paypal_transaction
WHERE wp_rg_lead.id = wp_rg_Paypal_transaction.entry_id AND wp_rg_Paypal_transaction.transaction_id = %s
",
$txn_id
) );
update_user_meta($uid[0], 'eventRegistration', 1)
}
Produit rien d'utile.
Si je supprime la requête SQL et dis que je modifie update_user_meta en 1, 'eventRegistration', $txn_id
et que je soumets une demande Paypal, la méta mise à jour est correcte.
Je suis un peu perdue, je dois rater quelque chose.
Toute aide serait très appréciée!
Merci!
Tre
J'ai fini par utiliser une sorte de bidouille. J'ai créé un champ masqué contenant l'ID utilisateur. J'ai ensuite utilisé cela pour mettre à jour les métas et ce qui ne fonctionne pas avec un IPN réussi ou avec un paiement réussi. C'est à dire:
add_filter("gform_Paypal_post_ipn", "update_order_status", 10, 4);
function update_order_status($ipn_post, $entry, $config, $cancel){
// if the IPN was canceled, don't process
if($cancel)
return;
$currUID = $entry["8"] // The Input # of your hidden ID field
update_user_meta($currUID, 'eventRegistration', 1);
return;
}
La base de données vérifiant le contenu du gabarit vérifiée dans la table wp_rg_lead
pour voir si l'utilisateur actuel dispose d'une entrée pour l'ID de formulaire approprié avec le statut de paiement 'En attente' ou 'Approuvé'. Si c'est le cas, indiquez qu'un achat a déjà été associé au compte et contactez le support technique en cas d'erreur. Le code SQL ressemble à quelque chose comme ça (pas sur le même ordinateur, alors ça me tombe sur la tête):
$trans_type = $wpdb->get_col( $wpdb->prepare(
"
SELECT wp_rg_lead.transaction_status
FROM wp_rg_lead
WHERE wp_rg_lead.form_id = 1 AND wp_rg_lead.created_by = %s
",
$txn_id
) );
Ensuite, mon IF/THEN était simplement quelque chose comme:
if ( $trans_type == 'Pending' || $trans_type == 'Approved' ) {
// If the user has a transaction pending or accepted do this
} else {
// If not, do this
}
J'espère que cela aide quelqu'un dans une situation similaire!