PHPPHP5.1.6でカード決済(paypal)販売サイトを作っています。



(1)ユーザーがログインする。(自サイト)
(2)商品ページで決済ボタンを押す。(自サイト)
(3)Paypalの決済画面に移る。(Paypal画面)
(4)ユーザーが決済を行う。(Paypal画面)
(5)Paypalから支払い情報が指定の自サイトURLへポストバックされる。(画面なし)
(6)自サイトのバックエンドでDB更新処理を行いexitで抜ける。(画面なし)


(1)でログインしたユーザーのIDを(6)に引き継ぎたいのですが、具体的な方法がわかりません。
上記の場合、$_SESSIONではクライアントが切り替わるので使えないと別な質問で指摘されました。
言われて見れば当然です。
また調べたかぎりでPaypalは、(2)の決済ボタンに任意の変数(引数?)を埋め込み、ポストバックで返してもらうという都合のいいことはできないようです。


(1)のユーザーIDを(6)で引き継ぐ方法を具体的に教えてください。
他のサイトに移動して帰ってくるなんて初めてチャレンジしますので、手法や関数の見当がサッパリつきません。
よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2011/02/28 17:03:59
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:taroe No.1

回答回数1099ベストアンサー獲得回数132

ポイント35pt

②の時にnotify_url を指定すると思います。

https://xxxx.com/xxxx.phpに戻ってきたときの処理を書いたPHPがあるとします。

このときに

https://xxxx.com/xxxx.php?user_id=2345

のようにユーザー毎にURLの後ろにパラメータを付与しておけば

⑥でコールされたときにGetパラメーターとしてuser_idを取得可能です。

このようにして、引き継ぐことが可能です。

ほかにも同期をとる方法はあるとは思いますが、質問にはこれが一番近いのでは?

id:seadwell

すったもんだの揚句にやっとできました。

notify_urlは、支払いボタン作成時の『高度な変数』項目のオプションでしか指定できないものと思っていました。

どうやってID渡すんだろ~・・・と散々頭を悩ませましたが、HTMLでnotify_urlを指定すればよかったのですね。

解決の糸口を頂きまして感謝します。

2011/02/28 16:42:03
id:Galapagos No.2

回答回数963ベストアンサー獲得回数89

ポイント35pt

CookieにユーザーIDを登録してはどうでしょうか。


参考「Cookieの読み書き

id:seadwell

Cookieでもファイル出力でもそうですが、どうやって(5)の支払い情報と紐付けするのですか?

具体的な回答を希望します。

2011/02/27 02:52:54
  • id:taroe
    ⑥でコール

    ⑤でコール
    の間違いです
  • id:tdoi
    Paypalの決済サービスの仕様を見てないので確認ですが、

    1.Paypalのサービスでは【3】の遷移の際に戻りURL(【5】に相当)を指定できない
    2.【5】の時点では、決済に関する一切の情報(決済番号、決済内容、決済結果など)を取得できない。

    ということでしょうか?
    上記のような仕組みだとすると、【3】に遷移して決済して【5】に戻ってくる場合と、【3】に遷移して決済せずに、意図的に【5】にアクセスする場合との区別がつかないので、このような仕組みにはなっていないとは思うので、何か見落としていらっしゃる気はします。
    まずは、何か渡せるものがないか再度確認をおススメします。
    以前の質問の回答であげられていた仕様や、マーチャントとして契約しているんのであれば、もう少し細かい仕様書があるのではないかと思います。

    前者が可能なら戻りURLにユーザIDを特定できる何かを埋め込めばいいです。
    後者が可能なら決済番号のようなものとユーザIDを関連付けておくものを【2】の時点で記録しておけばよいでしょう。
    推測にはなりますが、購入商品などの確認は【3】の時点で行っているはずなので、その画面に何か渡せるはずです。そして、その渡した何かが【6】のリクエストにも含まれるはずです。
    すると、【2】のときの情報からユーザを認識できます。


    また、確認してどうしてもそんなことはできないということであっても、関連付け自体はできなくはないと思います。
    ただ、Webシステムとして見ていたのですが、「クライアントが切り替わる」という表現が気になります。
    IEで自社サイトを見て、戻ってくるときはChromeとかを想定していないですよね?この

    携帯サイトであれば、個体識別子とユーザIDの関連付けを持っておけばいいでしょう。
    携帯サイトでなければ、Cookieが有効であることが条件にはなりますが、【2】の時点で決済番号をCookieにでもセットしておけば、【6】が【2】と同じドメインであれば、その時点でそれを取得することができます。仮に違うドメインなのであれば、【6】のURLを【2】のドメインと同じものに1つ用意して、そのページから本来【6】の処理をさせたいページにリダイレクトさせればよいでしょう。
    まぁ、Cookieが使えれば、セッションIDもCookieで管理するでしょうから、セッションも有効なのですが。


    あまり言うのもなんですが、asuka645さんとpretaroeさんの言っていることをまだ理解されていない気がします。
    この件で直接使わなくとも、Cookieやセッションの仕組みは勉強されることをお勧めします。
  • id:seadwell
    > 1.Paypalのサービスでは【3】の遷移の際に戻りURL(【5】に相当)を指定できない
    > 2.【5】の時点では、決済に関する一切の情報(決済番号、決済内容、決済結果など)を取得できない。

    そういう意味ではありません。
    質問の表現が紛らわしく失礼しました。

    > あまり言うのもなんですが、asuka645さんとpretaroeさんの言っていることをまだ理解されていない気がします。
    おっしゃる通りです。
    思い込みや下調べ不足で質問が見当違いの場合もありますが、今回はそれに当てはまると思います。
    しかし、いったんはまってしまうと、理解不足も手伝い1人ではなかなか抜け出せなくなってしまいます。
  • id:tdoi
    終了されたようなので、解決したのかもしれませんが、適当に検索しただけで適切とは言いかねる部分もありますが、

    http://www.phppro.jp/school/phpschool/vol8/1

    の2ページ目とかを読まれると概要は分かると思います。
    asuka645さんやpretaroeさんがおっしゃっていたのは、【2】で保存したセッション情報を、【6】で復元できているか確認してみてくださいという提案をしていると思います。復元することはできないという主張をしているのではありません。

    状況から察すると復元できていないのだと思いますが、先ほどあげた内容をもう少し具体的な設定例としては次のリンク先にありました。

    http://www.yc.tcu.ac.jp/~yamada/doc/php/0802.html

    これを踏まえて、セッションIDはどのように引き渡されているか?をまず調べて見てください。
    Cookieで渡しているはずなのに、【6】で復元できていいないのであれば、ブラウザ側がCookieを無効にしてないかなどを確認する必要があるでしょう。パラメタ中にセッションIDをつけて引きまわしているのであれば、【5】でポストバックされるURLにもセッションIDを付加しておく必要があるでしょう。

    まずはここから確認されてはいかがでしょうか?

    > 1.Paypalのサービスでは【3】の遷移の際に戻りURL(【5】に相当)を指定できない
    > 2.【5】の時点では、決済に関する一切の情報(決済番号、決済内容、決済結果など)を取得できない。

    これらができるのであれば、セッションに持たずとも情報は引き継げるとは思いますが。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません