2011-09-30 6 views
9

PayPal IPNファイルをセットアップしました。ユーザーがサイトにいて、サブミットを押すと、トランザクションに関する詳細がdbにアップロードされます。関連するIDは、カスタムフィールドとしてPayPalを介して送信されます。支払いが完了すると、idに基づいて完了したトランザクションとしてDBを更新するためにIPNが使用されました。PayPal IPNカスタムフィールドの受け渡しと解析

すべては問題ありません。

しかし、これはトリッキーなビットです。私はまた別のテーブルを更新する必要があります - 割引/クーポンコードdb。更新は、入力されたコードとコードがまだ使用できる回数に基づいています。基本的にそれが50回だった場合、一度使用された後、dbは49で更新されます。コードを渡す必要があり、残りの使用は許可されているので、code = XXXX(新しい値49などを更新します)

カスタムフィールドでこれらの値をすべて渡す方法はありますが、再度解析する方法はありませんか?それらを分けることについて読む:etc。しかし、前にやった人から助言が必要です。

これは、IPNは、現在詳細戻ってくる方法です:

$カスタム= $ _POST [ 'カスタム'];

ありがとうございます。

+0

コードのこのビットを介して来た.. – user718359

+0

$ temp = $ _POST ['custom']; // &IP&visitorId&attributionInfo リスト($ 、$ 、$ custIP、$ visitorId、$ attributionInfo)=(、 "&" $の一時、5)爆発します。 – user718359

答えて

13

私はちょうど最近これをしました。
あなたのペイパルのカスタムフィールドをデータに分割して、そのカスタムフィールドの中にセパレータを使用してデータを分割します。 以下の例では、値が "|"で分割されています。文字セットで使用できる任意の文字を使用できます。

$member_id = 1; 
$some_other_id = 2; 
<input type="hidden" name="custom" value="<?php echo $member_id.'|'.$some_other_id ?>"/> 

これが出力されます:あなたはペイパルからの情報(IPN応答)そうのようなプロセス、それを取得すると

<input type="hidden" name="custom" value="1|2"/> 

は:だから、基本的に

$ids = explode('|', $_POST['custom']); // Split up our string by '|' 
// Now $ids is an array containing your 2 values in the order you put them. 
$member_id = $ids[0]; // Our member id was the first value in the hidden custom field 
$some_other_ud = $ids[1]; // some_other_id was the second value in our string. 

を、私たちはして文字列を送信私たちがpaypalを選択するカスタム区切り文字、paypalはそれをIPN応答で私たちに返します。次に、それを分割して(explode()関数を使用して)必要な処理を行う必要があります。あなたは、データベースから、それは通常の方法を使用して、あなたの選択をあなたの値を取得すると

、そしてちょうど使用して1で、それをデクリメント:

$val_from_db--; // Thats it!, Takes the current number, and minus 1 from it. 
+0

ありがとうございます。今すぐ試してみよう... – user718359

+0

このビットは正しいですか?それは-1でなければならない。むしろその後 - ;?? $ val_from_db--; – user718359

+0

完璧に動作します! ($ val_from_dbセクションを除いて、私はまだテストしていないか、まだソートしていません。それを今作業しています.. – user718359

10

これはJustAnilのソリューションを拡張したものです。

HTML:

<input type="hidden" name="custom" value="some-id=1&some-type=2&some-thing=xyz"/> 

とこのようになり、あなたのIPNスクリプトは:

<?php 
    parse_str($_POST['custom'],$_CUSTOMPOST); 

    echo $_CUSTOMPOST['some-id']; 
    echo $_CUSTOMPOST['some-type']; 
    echo $_CUSTOMPOST['some-price']; 
?> 

あなたはparse_strは、配列要素を結果にurldecodeを行い、ダブルチェックすることをお勧めします。ここで

+0

これは、 "&custom = some-id = 1&some-type = 2&some-thing = xyz"として返されるNVP値をブレークします。 –

+0

使用する方が良いでしょうカスタムフィールド内の|や、などの別の区切り文字を使用してから、配列を返すためにexplodeを使用します。 –

+0

非常にエレガントなソリューション。 – MrD

0

JSONを使った例です:

<?php 
    $arr = array($member_id, $coupon); 
    $data = json_encode($arr); 
?> 
<input type="hidden" name="custom" value="<?= $data ?>"/> 

その後、他の側に:

$custom = json_decode($_POST['custom'], true); 
$member_id = $custom[0]; 
$coupon = $custom[1]; 

あなたは、あまりにも連想配列を解析することができます

<?php 
    $arr = array('id' => $member_id, 'coupon' => $coupon); 
    $data = json_encode($arr); 
?> 
<input type="hidden" name="custom" value="<?= $data ?>"/> 

をその後、他に側:

$custom = json_decode($_POST['custom'], true); 
$member_id = $custom['id']; 
$coupon = $custom['coupon']; 

JSONを使用してデータを解析すると、素晴らしい対称性があります。