ホームページ >ウェブフロントエンド >jsチュートリアル >PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録

PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌オリジナル
2025-02-23 09:34:10459ブラウズ

PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録

PayPalの仕組み(IPNおよびPDTプロセス)を説明します。第1章 第3章

キーテイクアウト

  • チュートリアルでは、PayPalアカウントを設定し、実際のプロジェクトの登録フォームとデータベースと統合するプロセスをカバーしています。
  • プロジェクトには、登録フォームの作成、ユーザーの支払いのためにPayPalにリダイレクトされ、ユーザーがブラウザを閉じた場合のバックアッププランとしてPayPal IPNを実装することが含まれます。
  • チュートリアルでは、データベース構造とユーザーインターフェイスの設定、PayPalボタンの作成、PayPal Sandboxアカウントの設定、PDTおよびIPNハンドラーのコーディングに関する詳細な指示を提供します。
  • チュートリアルは、アカウントのセキュリティの確保、クレジットカードなしの登録、ビジネスアカウントの特典、米国外からの登録など、PayPalの登録に関するよくある質問にも回答します。
  • 第2章
  • この章では、PayPalアカウントのセットアップと登録フォームとデータベースとの統合をより適切に説明するために、最初から最後まで「支払い登録」という実際のプロジェクトを紹介します。
  • プロジェクトシナリオ

最初に、登録フォームがあります。

フォームを正しく完成した後(すべての検証が渡されます)、ユーザーは[登録]ボタンをクリックします。
    その後、PayPalにリダイレクトし、ユーザーは登録料を支払います。
  1. 支払後、PayPalは結果ページにリダイレクトし、10秒の自動リダイレクトを当社のWebサイトに戻し、PayPal PDTは支払い記録を処理します。
  2. しかし、ユーザーはブラウザを閉じる可能性があるため、バックアッププランにPayPal IPNを実装する必要があります。
  3. データベース構造
  4. e-rダイアグラム:
  5. temp_registerテーブル:一時的なストアのユーザーアカウントとユーザーパスワード、支払いを待ちます。支払われた場合、タプルは削除され、ユーザーテーブルに移動します。
支払いテーブル:UIDは、ユーザー情報と支払い情報を接続するために、ユーザーを参照する外部キーです。

ユーザーテーブル:ユーザー情報を保存し、トークンは確認メールで確認トークンです。ユーザーがユーザーアカウントを確認した場合、確認されたものは1として設定されます。

データベーススキーマ:

PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録
    ユーザーインターフェイス
  1. プロジェクトワークフロー
  2. フォームに記入すると、すべての入力が検証されます。

[登録]ボタンをクリックし、PayPalにリダイレクトします

PayPal Sandbox「Pay Now」:
<span>CREATE TABLE IF NOT EXISTS <span>`payment`</span> (
</span><span><span>`payId`</span> int(11) NOT NULL AUTO_INCREMENT,
</span><span><span>`timestamp`</span> bigint(20) DEFAULT NULL,
</span><span><span>`paid`</span> float DEFAULT NULL COMMENT 'user paid amount returned by paypal',
</span><span><span>`bankFee`</span> float DEFAULT NULL,
</span><span><span>`currency`</span> varchar(4) DEFAULT NULL,
</span><span><span>`txnId`</span> varchar(32) DEFAULT NULL COMMENT 'Transaction ID: specify single unique transaction from paypal. if this field is NOT NULL, means this payment has been process already. So if IPN returns to PHP, we can refuse to update our database.',
</span><span><span>`status`</span> varchar(16) DEFAULT NULL,
</span><span><span>`uid`</span> int(11) DEFAULT NULL COMMENT 'FK to users PK',
</span><span>PRIMARY KEY (<span>`payId`</span>),
</span><span>KEY <span>`uid`</span> (<span>`uid`</span>)
</span><span>) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
</span><span>CREATE TABLE IF NOT EXISTS <span>`temp_register`</span> (
</span><span><span>`tRegId`</span> int(11) NOT NULL AUTO_INCREMENT,
</span><span><span>`fullName`</span> varchar(255) DEFAULT NULL,
</span><span><span>`uAcc`</span> varchar(255) DEFAULT NULL,
</span><span><span>`uPwd`</span> varchar(32) DEFAULT NULL,
</span><span>PRIMARY KEY (<span>`tRegId`</span>)
</span><span>) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='prevent unpaid user take uAcc(UNIQUE) in our users table' AUTO_INCREMENT=1 ;
</span><span>CREATE TABLE IF NOT EXISTS <span>`users`</span> (
</span><span><span>`uid`</span> int(11) NOT NULL AUTO_INCREMENT,
</span><span><span>`fullName`</span> varchar(255) DEFAULT NULL,
</span><span><span>`uAcc`</span> varchar(255) NOT NULL,
</span><span><span>`uPwd`</span> varchar(32) NOT NULL,
</span><span><span>`token`</span> varchar(32) DEFAULT NULL,
</span><span><span>`verified`</span> tinyint(1) NOT NULL DEFAULT '0',
</span><span><span>`priviledge`</span> enum('delegate','admin','developer') NOT NULL DEFAULT 'delegate',
</span><span>PRIMARY KEY (<span>`uid`</span>)
</span><span>) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
</span><span>ALTER TABLE <span>`payment`</span>
</span><span>ADD CONSTRAINT <span>`payment_ibfk_1`</span> FOREIGN KEY (<span>`uid`</span>) REFERENCES <span>`users`</span> (<span>`uid`</span>);</span>

PayPalの結果ページをリダイレクトします PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録リダイレクトを待つ(PDTワーク)成功/失敗ページを表示するか、ブラウザを閉じる(IPN Works)。

PayPal Sandboxのセットアップ

コーディングを開始する前に、最初にPayPal Sandboxアカウントをセットアップする必要があります。 PayPal Developerアカウントを登録し、Sandboxで1つのビジネスユーザーアカウントと1つのバイヤーアカウントを作成したとします。 次に、[ビジネスアカウント]を選択し、[サンドボックステストサイトの入力]ボタンをクリックします。 メインパネルポップアウトページを見ることができます: PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録 次に、すべての情報と販売設定設定を確認できます。 PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録 それでは、3つのオプションをすべて1つずつ順番にセットアップしましょう。 PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録 1。 PDTと設定を有効にします

PDTハンドラー関数をセットアップして、URLを呼び出します。

PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録 2。 IPNと設定を有効にします

URLを呼び出すIPNハンドラー関数をセットアップします。

PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録 2。 PayPalボタンとPayPalパラメーターの設定を作成します

PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録 変更を保存した後、PayPalボタンのソースコードを確認できます。 PayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録 ボタンが実際にはフォームであることを簡単に確認できるため、入力を使用してデータを投稿する必要があります。 「登録」ボタンを生成するとき、リダイレクトURLには、「&cmd = _s-xclick」と「&hosted_button_id = ha9dzbckxkcl2」を含める必要があります。 現在、PayPal Sandboxアカウントがセットアップされています。次に、PDTおよびIPNハンドラーのコーディングを開始します。
<span>CREATE TABLE IF NOT EXISTS <span>`payment`</span> (
</span><span><span>`payId`</span> int(11) NOT NULL AUTO_INCREMENT,
</span><span><span>`timestamp`</span> bigint(20) DEFAULT NULL,
</span><span><span>`paid`</span> float DEFAULT NULL COMMENT 'user paid amount returned by paypal',
</span><span><span>`bankFee`</span> float DEFAULT NULL,
</span><span><span>`currency`</span> varchar(4) DEFAULT NULL,
</span><span><span>`txnId`</span> varchar(32) DEFAULT NULL COMMENT 'Transaction ID: specify single unique transaction from paypal. if this field is NOT NULL, means this payment has been process already. So if IPN returns to PHP, we can refuse to update our database.',
</span><span><span>`status`</span> varchar(16) DEFAULT NULL,
</span><span><span>`uid`</span> int(11) DEFAULT NULL COMMENT 'FK to users PK',
</span><span>PRIMARY KEY (<span>`payId`</span>),
</span><span>KEY <span>`uid`</span> (<span>`uid`</span>)
</span><span>) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
</span><span>CREATE TABLE IF NOT EXISTS <span>`temp_register`</span> (
</span><span><span>`tRegId`</span> int(11) NOT NULL AUTO_INCREMENT,
</span><span><span>`fullName`</span> varchar(255) DEFAULT NULL,
</span><span><span>`uAcc`</span> varchar(255) DEFAULT NULL,
</span><span><span>`uPwd`</span> varchar(32) DEFAULT NULL,
</span><span>PRIMARY KEY (<span>`tRegId`</span>)
</span><span>) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='prevent unpaid user take uAcc(UNIQUE) in our users table' AUTO_INCREMENT=1 ;
</span><span>CREATE TABLE IF NOT EXISTS <span>`users`</span> (
</span><span><span>`uid`</span> int(11) NOT NULL AUTO_INCREMENT,
</span><span><span>`fullName`</span> varchar(255) DEFAULT NULL,
</span><span><span>`uAcc`</span> varchar(255) NOT NULL,
</span><span><span>`uPwd`</span> varchar(32) NOT NULL,
</span><span><span>`token`</span> varchar(32) DEFAULT NULL,
</span><span><span>`verified`</span> tinyint(1) NOT NULL DEFAULT '0',
</span><span><span>`priviledge`</span> enum('delegate','admin','developer') NOT NULL DEFAULT 'delegate',
</span><span>PRIMARY KEY (<span>`uid`</span>)
</span><span>) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
</span><span>ALTER TABLE <span>`payment`</span>
</span><span>ADD CONSTRAINT <span>`payment_ibfk_1`</span> FOREIGN KEY (<span>`uid`</span>) REFERENCES <span>`users`</span> (<span>`uid`</span>);</span>
pdtハンドラー関数

ソースコード:

説明:

PayPalはpdthandler()関数を呼び出し、次にこのハンドラー関数プロセス_pdt()を呼び出します。ご覧のとおり、URL($ _GET)からPayPalが提供するパラメーターを受信します。そこで、TokenとTXをFSOCK SSLを介してPayPalに投稿します。その後、PayPalは支払い記録と支払い結果(成功/失敗)を返します。 _pdt()は、これらのデータを_validatepaypal()に渡し、データをデータベースに保存します。次に、返品に従ってページリダイレクトを行います。

IPNハンドラー関数

ソースコード:

<span>/**
</span><span>* PAYPAL: PDT HANDLER:
</span><span>* ====================
</span><span>* called by PayPal, send tokens back
</span><span>* get payment details and payment result
</span><span>* <span>@return $ret array contains result true/false, and user account or error message
</span></span><span>*/
</span><span>private function _PDT()
</span><span>{
</span><span>// some indexes can not be missing:
</span><span>$ruler = array(
</span><span>'tx', // token from paypal
</span><span>);
</span><span>if(count(array_diff($ruler, array_keys($_GET))))
</span><span>{
</span><span>return array('result' => false, 'error' => 'Index missing ... ', 'index' => $_GET, 'missing' => array_diff($ruler, array_keys($_GET)));
</span><span>}
</span><span>// read the post from PayPal system and add 'cmd'
</span><span>$req = 'cmd=_notify-synch';
</span><span>// get token and prepare request url (send back to paypal)
</span><span>$tx_token = $_GET['tx'];$auth_token = "_PJaHiwRfwMmWzW-9nuPuSguYxC-1d9KpxaasaNANtIvyOcmqY6jXNkRmxW";
</span><span>// $auth_token = "OxDenzKmrWPyEXU0YzIg2zs-VAe7ufCADyjbfxF_RpREL4rLEslZrSa21R4";
</span>
<span>$req .= "&tx=<span><span>$tx_token</span>&at=<span>$auth_token</span>"</span>;
</span>
<span>// post back to PayPal system to validate
</span>
<span>$header = "POST /cgi-bin/webscr HTTP/1.0rn";
</span>
<span>$header .= "Host: www.sandbox.paypal.comrn";
</span><span>// $header .= "Host: www.paypal.comrn";
</span>
<span>$header .= "Content-Type: application/x-www-form-urlencodedrn";
</span><span>$header .= "Content-Length: " . strlen($req) . "rnrn";
</span>
<span>$fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); // open socket
</span><span>// $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); // open socket
</span>
<span>if (!$fp)
</span><span>{
</span><span>// HTML FAIL
</span><span>return array('result' => false, 'error' => 'HTTP error ... ');
</span><span>}
</span><span>else
</span><span>{
</span><span>fputs ($fp, $header . $req);
</span><span>// read the body data
</span><span>$res = '';
</span><span>$headerdone = false;
</span><span>while (!feof($fp))
</span><span>{
</span><span>$line = fgets ($fp, 1024);
</span><span>if (strcmp($line, "rn") == 0)
</span><span>{
</span><span>$headerdone = true; // read the header
</span><span>}
</span><span>else if ($headerdone)
</span><span>{
</span><span>$res .= $line; // header has been read. now read the contents
</span><span>}
</span><span>}
</span>
<span>// parse the data
</span><span>$lines = explode("n", $res);
</span><span>$keyarray = array();
</span><span>if (strcmp ($lines[0], "SUCCESS") == 0)
</span><span>{
</span><span>for ($i=1; $i_validatePaypal($keyarray);
</span><span>}
</span><span>// log for manual investigation
</span><span>else if (strcmp ($lines[0], "FAIL") == 0)
</span><span>{
</span><span>// skipped
</span><span>return array('result' => false, 'error' => 'Transaction failed ... ');
</span><span>}
</span><span>}
</span><span>fclose ($fp);
</span><span>return $ret;
</span><span>}</span>
説明:

PayPalはIPNHandler()関数を呼び出し、次にこのハンドラー関数プロセス_ IPN()を呼び出します。ご覧のとおり、Request($ _Post)からPayPalが提供するデータを受信します。そのため、支払いの詳細をPayPalに投稿して、Curlを介して、これが握手プロセスです。その後、PayPalは支払い結果(確認/無効)を返送します。検証されている場合、_ipn()はこれらのデータを_validatePaypal()に渡し、データベースにデータを保存します。

ZIPファイルには、テンプレート、JavaScriptファイル、CSS、ブートストラップ、jQuery、デバッグプラグイン、Smartyプラグイン、およびすべてのコアPHPソースコードが含まれています。プロジェクトをダウンロード(344kb)

PayPalの登録に関するよくある質問

登録中にPayPalアカウントが安全であることを確認するにはどうすればよいですか?

PayPalアカウントを設定する際のセキュリティは最優先事項です。アカウントが安全であることを確認するには、文字、数字、特殊文字の組み合わせを含む強力で一意のパスワードを使用してください。また、登録中に正確な個人情報を提供してください。 PayPalはこの情報を使用して身元を確認し、アカウントを不正な活動から保護します。

クレジットカードなしでPayPalアカウントに登録できますか?クレジットカード。登録プロセス中に、クレジットカードの代わりに銀行口座をリンクすることを選択できます。ただし、クレジットカードをリンクすると、追加の支払いオプションとセキュリティ機能が提供される可能性があります。

個人アカウントでPayPalビジネスアカウントに登録することの利点は何ですか?個人アカウントで。これらには、顧客からの支払いを受け入れる機能、ビジネスローンへのアクセスとキャッシュアドバンス、および請求書を作成および送信するオプションが含まれます。また、ビジネスアカウントでは、会社またはグループ名で運営することもできます。

米国外に住んでいる場合、PayPalアカウントに登録するにはどうすればよいですか?世界中の国と地域。米国外のPayPalアカウントに登録するには、特定の国または地域のPayPal Webサイトにアクセスしてください。登録プロセスは、米国のプロセスと同様です。

複数のPayPalアカウントに登録できますか? 1つのPayPalアカウント。ただし、各アカウントには、一意のメールアドレスと財務情報が必要です。 1つの個人アカウントと1つのビジネスアカウントを持つことができます。

登録中にPayPalのパスワードを忘れた場合はどうなりますか?

登録中にPayPalのパスワードを忘れた場合、クリックしてリセットできます。 「パスワードを忘れましたか?」ログインページにリンクします。その後、メールアドレスを入力するように求められ、PayPalはパスワードをリセットする方法に関する指示を含むメールを送信します。

PayPalの登録中に提供した情報を変更できますか?

​​

はい、PayPal登録中に提供された情報を変更できます。これを行うには、PayPalアカウントにログインしてプロフィールに移動し、変更する情報を選択してください。 PayPalアカウントに登録する料金はありません。ただし、PayPalは、商品やサービスの支払いを受けたり、他の国に送金したりするなど、特定の取引に対して料金を請求します。

以上がPayPalチュートリアルに登録(2/3):PayPalプロジェクトへの実際の登録の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。