鑰匙要點
- >教程涵蓋了設置PayPal帳戶並將其與一個真實項目的註冊表和數據庫集成的過程。
- >該項目涉及創建註冊表格,將用戶重定向到PayPal付款,並實施PayPal IPN作為備份計劃,以防用戶關閉其瀏覽器。 >教程提供了有關設置數據庫結構和用戶界面,創建PayPal按鈕,設置PayPal Sandbox帳戶以及編碼PDT和IPN處理程序的詳細說明。
- > >該教程還回答了有關註冊PayPal的經常詢問的問題,包括確保帳戶安全,沒有信用卡的註冊,商務帳戶的福利以及從美國以外的人註冊。
- >第二章
>項目方案
首先,我們有一個註冊表格。
- >
- 正確填寫表單後(所有驗證通過)後,用戶單擊“註冊”按鈕。
- 然後重定向到貝寶(Paypal),用戶支付註冊費。
> 付費後,PayPal將重定向到結果頁面,並將10秒自動重定向回我們的網站,然後PayPal PDT將處理付款記錄。 - 但是,用戶可能會關閉瀏覽器,因此我們必須實現PayPal IPN以備備份計劃。
- >數據庫結構
- e-r圖:
temp_register表:臨時存儲用戶帳戶和用戶密碼,等待付款。如果付費,元組將被刪除,並移至用戶表。
>
- 用戶表:存儲用戶信息,令牌是確認電子郵件中的驗證令牌。如果用戶驗證了他們的用戶帳戶,則將驗證設置為1。
- >數據庫架構:
<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結果頁面。
-
等待重定向(PDT Works)顯示成功/失敗頁面或關閉瀏覽器(IPN Works)。
>設置貝寶沙盒
在開始編碼之前,我們需要先設置PayPal Sandbox帳戶。 假設您已經註冊了PayPal開發人員帳戶,並在Sandbox中創建了一個業務用戶帳戶和一個買方帳戶。


1。啟用PDT和設置
設置您的PDT處理程序函數調用URL。
2。啟用IPN和設置
設置您的IPN處理程序函數調用URL。
2。創建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中文網其他相關文章!

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SAP NetWeaver Server Adapter for Eclipse
將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3漢化版
中文版,非常好用

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。