首頁 >web前端 >js教程 >在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊

在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原創
2025-02-23 09:34:10463瀏覽

在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊

說明PayPal的工作原理(IPN和PDT流程)。第一章 第三章

鑰匙要點

  • >教程涵蓋了設置PayPal帳戶並將其與一個真實項目的註冊表和數據庫集成的過程。
  • >該項目涉及創建註冊表格,將用戶重定向到PayPal付款,並實施PayPal IPN作為備份計劃,以防用戶關閉其瀏覽器。
  • >教程提供了有關設置數據庫結構和用戶界面,創建PayPal按鈕,設置PayPal Sandbox帳戶以及編碼PDT和IPN處理程序的詳細說明。
  • >
  • >該教程還回答了有關註冊PayPal的經常詢問的問題,包括確保帳戶安全,沒有信用卡的註冊,商務帳戶的福利以及從美國以外的人註冊。
  • >第二章
本章介紹了一個真實的項目:從頭到尾,“與付款的註冊”,以更好地解釋PayPal帳戶的設置以及與寄存器表單和數據庫的集成。

>項目方案

首先,我們有一個註冊表格。
    >
  1. 正確填寫表單後(所有驗證通過)後,用戶單擊“註冊”按鈕。
  2. 然後重定向到貝寶(Paypal),用戶支付註冊費。 >
  3. 付費後,PayPal將重定向到結果頁面,並將10秒自動重定向回我們的網站,然後PayPal PDT將處理付款記錄。 >
  4. 但是,用戶可能會關閉瀏覽器,因此我們必須實現PayPal IPN以備備份計劃。
  5. >數據庫結構
  6. e-r圖:

temp_register表:臨時存儲用戶帳戶和用戶密碼,等待付款。如果付費,元組將被刪除,並移至用戶表。

> 在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊付款表:UID是引用用戶的外國密鑰,連接用戶信息和付款信息。
  1. 用戶表:存儲用戶信息,令牌是確認電子郵件中的驗證令牌。如果用戶驗證了他們的用戶帳戶,則將驗證設置為1。
  2. >數據庫架構:
>用戶界面

<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教程(2/3)中註冊:帶有PayPal項目的真實註冊填充表格,所有輸入均已驗證。

>

單擊註冊按鈕,重定向到貝寶。
  1. >貝寶沙盒“立即付款”:
  2. >重定向PayPal結果頁面。
  3. 在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊等待重定向(PDT Works)顯示成功/失敗頁面或關閉瀏覽器(IPN Works)。

>設置貝寶沙盒

在開始編碼之前,我們需要先設置PayPal Sandbox帳戶。 假設您已經註冊了PayPal開發人員帳戶,並在Sandbox中創建了一個業務用戶帳戶和一個買方帳戶。 在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊 然後選擇業務帳戶,然後單擊“輸入沙箱測試站點”按鈕。 您可以看到主面板彈出頁面: 在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊 然後,您可以查看所有信息並銷售首選項設置。 在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊 因此,讓我們按順序設置所有三個選項。

1。啟用PDT和設置

設置您的PDT處理程序函數調用URL。 在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊

2。啟用IPN和設置

設置您的IPN處理程序函數調用URL。 在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊

2。創建PayPal按鈕和PayPal參數設置

在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊 在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊 保存更改後,您可以看到PayPal按鈕的源代碼:
<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>
很容易發現該按鈕實際上是一種表單,因此我們需要使用其輸入來發布數據。 當我們生成“寄存器”按鈕時,重定向URL應包含“&cmd = _s-xClick”和“&hosted_button_id = ha9dzbckxkcl2”。 現在,已設置了PayPal Sandbox帳戶。然後開始編碼您的PDT和IPN處理程序。 PDT處理程序函數

源代碼:

>說明:

PayPal調用pdthandler()函數,然後是此處理程序功能過程_pdt()。如您所見,它從URL($ _GET)接收由PayPal提供的參數。因此,我們通過FSOCK SSL將令牌和TX發布回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()。如您所見,它從請求($ _POST)接收由PayPal提供的數據。因此,我們將付款詳細信息發布回PayPal,通過Curl,這是握手過程。然後,PayPal寄回付款結果(已驗證/無效)。如果已驗證,_ipn()將這些數據傳遞到_validatePaypal(),將數據保存到數據庫中。

>在zip文件中,它包含模板,JavaScript文件,CSS,Bootstrap,jQuery,debug插件和Smarty插件,以及所有核心PHP源代碼。下載項目(344KB)

經常詢問有關註冊PayPal

的問題

>如何確保在註冊期間我的PayPal帳戶安全?為確保您的帳戶安全,請使用強大的獨特密碼,其中包括字母,數字和特殊字符的混合。另外,請確保在註冊過程中提供準確的個人信息。貝寶(PayPal信用卡。在註冊過程中,您可以選擇鏈接銀行帳戶而不是信用卡。但是,鏈接信用卡可以提供其他付款選項和安全功能。

>

> paypal業務帳戶與個人帳戶相比,有什麼好處通過個人帳戶。其中包括接受從客戶付款,獲得業務貸款和現金預付款的能力,以及創建和發送發票的選項。企業帳戶還允許您根據公司或組名稱運營。

>如果我居住在美國以外的情況下,我該如何註冊PayPal帳戶? PayPal可在200多個以上可用世界各地的國家和地區。要註冊美國以外的PayPal帳戶,請訪問您的特定國家或地區的PayPal網站。註冊過程類似於美國的註冊過程。

>

在註冊PayPal帳戶時需要提供什麼信息?

>

>在註冊PayPal帳戶時,您將需要提供您的法定名稱,地址,電話號碼和電子郵件地址。您還需要創建密碼並選擇兩個安全問題來幫助保護您的帳戶。

>註冊PayPal帳戶需要多長時間?快速簡便。通常只需要幾分鐘才能完成。但是,PayPal可能需要幾天的時間才能驗證您的銀行帳戶或信用卡信息。

>我可以註冊一個以上的PayPal帳戶嗎?一個貝寶帳戶。但是,每個帳戶必須具有唯一的電子郵件地址和財務信息。您可以擁有一個個人帳戶和一個業務帳戶。

>

>如果我在註冊期間忘記我的PayPal密碼會發生什麼?

>

如果您在註冊期間忘記了PayPal密碼,則可以通過單擊單擊將其重置“忘記密碼?”登錄頁面上的鏈接。然後,您將提示您輸入您的電子郵件地址,PayPal將向您發送一封電子郵件,其中包含有關如何重置密碼的說明。

>我可以更改PayPal註冊期間提供的信息嗎?為此,請登錄您的PayPal帳戶,轉到您的個人資料,然後選擇您要更改的信息。

>是否需要註冊PayPal帳戶的費用?沒有收取PayPal帳戶的費用。但是,PayPal確實為某些交易收取費用,例如收到商品和服務付款或向另一個國家匯款。

以上是在PayPal教程(2/3)中註冊:帶有PayPal項目的真實註冊的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn