首页 >web前端 >js教程 >在PayPal教程(2/3)中注册:带有PayPal项目的真实注册

在PayPal教程(2/3)中注册:带有PayPal项目的真实注册

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌原创
2025-02-23 09:34:10461浏览

在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