私は私のWordpressサイトにPaypal標準を統合しようとしています、そして私が1つの簡単なことをしたいと思うまですべてはうまくいっていました:
私はこれはかなり簡単であると思いました、しかし私がポストIPNフックのためにこれを私のfunctions.php
に加えるならば:
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;
}
絶対に何も起こりません。私の考えでは、IPNはオフサイトから跳ね返っているので、ユーザーIDは利用できないのでしょうか。それとも私はここで間違っていますか?
ユーザーIDが有効ではないことが正しいと考えて、ユーザーIDを取得する別の方法を考えていました。私はPaypalアドオンと共に重力フォームを使っているので、提出されたすべてのフォームはデータベーステーブルwp_rg_lead
とwp_rg_Paypal_transaction
に格納されます。すべてのIPNがトランザクションIDを投稿するので、Paypalから送信されたトランザクションIDを使用して2つのテーブル間でJOINを実行できると考えました。
だから私は試してみました:
$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
;);
これは、トランザクションIDに関連したユーザーIDを戻しました。私は自分自身に考えた、素晴らしい!これはうまくいくでしょう!
しかし、これらすべてを自分のfunctions.php
に組み込もうとすると、その全体がうまくいくようには見えません。
この:
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)
}
有用なものは何も生成されませんでした。
SQLクエリを削除し、update_user_metaを1, 'eventRegistration', $txn_id
に変更してPaypalリクエストを送信すると言った場合、メタは正常に更新されます。
私は迷っているようなものです、私は何かが足りないはずです。
任意の助けは大歓迎です!
ありがとうございます。
トレ
私は一種のハックを使用することになりました。ユーザーIDを入力した隠しフィールドを作りました。それから私はこれを使ってメタを更新し、IPNや支払いが成功しなかったことを更新しました。すなわち:
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;
}
データベースチェックでは、wp_rg_lead
テーブルをチェックして、現在のユーザーに、支払いステータスが 'Pending'または 'Approved'の適切なフォームIDのエントリがあるかどうかを確認することで、テンプレートレベルで処理しました。そうであれば、そのアカウントにすでに関連付けられている購入があったことを表示し、エラーがあった場合はサポートに連絡する。 SQLは次のようになります(同じコンピューター上ではないので、頭の上からはみ出します)。
$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
) );
それなら私のIF/THENは単にこんな感じでした:
if ( $trans_type == 'Pending' || $trans_type == 'Approved' ) {
// If the user has a transaction pending or accepted do this
} else {
// If not, do this
}
私はこれが同じような状況で誰かを助けるのを願っています!