細かくソースや説明書くと大変長くなってしまうので簡単に書き留めておきます。
動機・やりたいこと・困っていたこと
WP Membershipの定期購読でオンラインスクールのお月謝をPaypal自動引き落としする。
↓
Paypalに入金されたことを検出し、Online Lesson Booking システムにチケットを付与する。
という単純なもの。だけどこれができるととっても便利。
設定・カスタマイズのメモ
初期設定・解決方法・対処方法
OLBとSWPMが有効化されていて、それぞれちゃんと動いていること。
スニペット対応・ファイル直接修正部分
実現するための仕組みはスニペットにソースを書き込むことで実現可能。wp_swpm_payments_tblにデータをINSで作って以下、流れをざっくり書きますと、
コードスニペット最初はadd_action
でheadへの書き込みにする。
add_action('wp_head', 'function01');
function function01(){
概要
定期購読の支払いが行われたとき、wp_swpm_payments_tblにデータがINSされる。これを利用して、特定IDの特定txn_idのデータがユニークであるかどうかで見分ける。チケット付与後に「付与したよ!」というデータを作りINSしてペアを作っておくと、ペアではないデータを検出することができる。
データはペアですか?ユニークですか?
- YES>まだチケットが付与されていない状態の支払済データ
- NO>すでにチケットを付与済
スニペットに書くソース
支払済を検出する仕組み
- ログイン判定(ログインしていない場合はなにもしない)
- ログインユーザーIDを確認(wp_get_current_userなどを使う)
- 特定のIDの場合なにもしない(管理者など)
- ユーザーIDを使って「wp_swpm_payments_tbl」にペアがなくユニークなデータのtxn_idを抽出。
SELECT `txn_id` FROM `wp_swpm_payments_tbl` WHERE `member_id` = $swpm_uid GROUP BY `txn_id` HAVING (Count(`txn_id`)) = 1 ORDER BY `id` ASC LIMIT 1
- 取得したtxn_idをもつレコードが何件あるか。1件の場合は処理実行
- ピンポイントでtxn_idをもつレコードをSELECT
- 変数に値を格納
wp_swpm_payments_tbl
の列を適当に使い、チケットを付与後のペアデータを作成〜INS。必須なのはmember_idとtxn_id
できれば処理日時やステータス=付与済 的なデータを格納しておくとパッと見たときわかりやすい。
チケットを付与に関するテーブル
- INS:wp_swpm_payments_tbl
- INS:wp_olb_logs
- UPD:wp_usermeta>meta_key(olbterm、olbticket)
シリアル化がめんどくさいけれど、配列に値を格納して「serialize( $data=配列 )」するだけ。
adminとなっているところを「paypal」にしてデータを登録すると、ショートコード 「[olb_ticket_logs]」でチケット付与履歴を確認したとき「(PayPal支払い)」という表示がつくことに気付いた。
以上。
終わりに
ざっくりと書いたけれど実現にあたって困ったことがあれば、わかる範囲で&簡単にで良ければいちおう相談に乗ります。ご連絡ください。
空間を開けてソースを組み立てて約300行くらい。そんなに長く書く必要はなかったです。
時間の表記(タイムスタンプ)に注意してください!日本時間ではなくなることがあるので。
では。