<ol
class
=
"dp-c"
>
<li
class
=
"alt"
><span><span>DOCTYPE html> </span></span></li>
<li>
<span>
"en"
</span><span>> </span>
</li>
<li
class
=
"alt"
><span> </span></li>
<li>
<span> <meta
class
=
"string"
>
"utf-8"
</span><span>> </span>
</li>
<li
class
=
"alt"
><span> <title>支付页面title> </title></span></li>
<li><span> head> </span></li>
<li
class
=
"alt"
><span> </span></li>
<li><span> <div> <li
class
=
"alt"
>
<span> <form
class
=
"string"
>
"checkout.php"
</form></span><span> method=</span><span
class
=
"string"
>
"post"
</span><span> autocomplete=</span><span
class
=
"string"
>
"off"
</span><span>> </span>
</li>
<li>
<span> <label
class
=
"keyword"
>
for
</label></span><span>=</span><span
class
=
"string"
>
"item"
</span><span>> </span>
</li>
<li
class
=
"alt"
><span> 产品名称 </span></li>
<li>
<span> <input
class
=
"string"
>
"text"
</span><span> name=</span><span
class
=
"string"
>
"product"
</span><span>> </span>
</li>
<li
class
=
"alt"
><span> label> </span></li>
<li><span> <br> </span></li>
<li
class
=
"alt"
>
<span> <label
class
=
"keyword"
>
for
</label></span><span>=</span><span
class
=
"string"
>
"amount"
</span><span>> </span>
</li>
<li><span> 价格 </span></li>
<li
class
=
"alt"
>
<span> <input
class
=
"string"
>
"text"
</span><span> name=</span><span
class
=
"string"
>
"price"
</span><span>> </span>
</li>
<li><span> label> </span></li>
<li
class
=
"alt"
><span> <br> </span></li>
<li>
<span> <input
class
=
"string"
>
"submit"
</span><span> value=</span><span
class
=
"string"
>
"去付款"
</span><span>> </span>
</li>
<li
class
=
"alt"
><span> form> </span></li>
<li><span> div> </span></li>
<li
class
=
"alt"
><span> body> </span></li>
<li><span>html> </span></li>
<p style=
"text-align: center;"
></p>
<p>输入产品名称 和 价格。点击去付款就会到paypal的付款页面。用你的sandbox测试买家账号去付款。就会发现付款成功。然后登陆你的测试卖家账号。会发现卖家账号已经收到付款。当然这里会扣除paypal收取的手续费。手续费收的是卖家的。</p>
<p>下面来具体看看php是怎么实现的。首先先要把paypal提供的 php-sdk给弄到你的代码目录中来。这里介绍使用php的包管理器composer来获取最新sdk、当然你可以可以从github等其他渠道获取最新的paypal php-sdk。</p>
<p>默认你的电脑已经安装composer了。如果没有自己去度娘或者google下composer安装。</p>
<p>然后在你的代码根目录写一个composer.json文件来获取包内容。json文件代码如下: </p>
<p><span style=
"line-height: 1.5 !important;"
>{<br>
</span>
"require"
:<span style=
"line-height: 1.5 !important;"
> { </span>
"paypal/rest-api-sdk-php"
:
"1.5.1"
<span style=
"line-height: 1.5 !important;"
><br>
}<br>
}</span></p>
<p>这里如果是 linux/unix系统就直接再根目录执行composer install来获取包内容。</p>
<p>安装好之后。根目录下面会产生一个vendor目录。里面有composer 和 paypal两个子目录。composer里面实现了自动加载、paypal则是你的sdk内容。</p>
<p>接 下来我们来写一个公共文件这里默认用 app/start.php、你的项目中可以自定义)、其实里面就只是实现了 sdk的autoload.php自动加载 和 创建刚才上面的的client id 和 secret生成的paypal支付对象实例。start.php代码如下:</p>
php<br>
<p><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
require
</span>
"vendor/autoload.php"
; <span style=
"color: rgb(0, 128, 0); line-height: 1.5 !important;"
>
)<br>
);</span><span
class
=
"cnblogs_code_copy"
style=
"padding-right: 5px; line-height: 1.5 !important;"
><br type=
"_moz"
>
</span></p>
<p>接下来就来实现表单中提交的处理文件 checkout.php。代码内容如下:</p>
php
<p><span style=
"color: rgb(0, 128, 0); line-height: 1.5 !important;"
>
</span><br>
<span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> \PayPal\Api\Payer;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> \PayPal\Api\Item;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> \PayPal\Api\ItemList;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> \PayPal\Api\Details;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> \PayPal\Api\Amount;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> \PayPal\Api\Transaction;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> \PayPal\Api\RedirectUrls;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> \PayPal\Api\Payment;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span> \PayPal\<span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>Exception</span><span style=
"line-height: 1.5 !important;"
>\PayPalConnectionException;<br>
<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
require
</span>
"app/start.php"
<span style=
"line-height: 1.5 !important;"
>; </span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
if
</span> (!<span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>isset</span>(<span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_POST
</span>[
'product'
], <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_POST
</span>[
'price'
<span style=
"line-height: 1.5 !important;"
>])) { </span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
die
</span>(
"lose some params"
<span style=
"line-height: 1.5 !important;"
>); } </span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$product
</span> = <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_POST
</span>[
'product'
<span style=
"line-height: 1.5 !important;"
>]; </span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$price
</span> = <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_POST
</span>[
'price'
<span style=
"line-height: 1.5 !important;"
>]; </span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$shipping
</span> = 2.00; <span style=
"color: rgb(0, 128, 0); line-height: 1.5 !important;"
>
</span></p>
<p>checkout.php通过表单提交上来的参数对支付具体细节和参数进行初始化和设置。这里只列出了常用的部分。paypal提供了很多参数设置。具体更丰富的可以自己参考paypal官方开发者文档。</p>
<p>checkout.php设置完参数之后。会生成一个支付链接。用header跳转到这个支付链接就是paypal的支付页面)到这个支付页面上面就可以用你的sandbox提供的buyer账号去支付了。截图如下:</p>
<p style=
"text-align: center;"
></p>
<p>用buyer账号支付完成之后。去看看你的sandbox的商家账户余额吧。就会发现已经收到了扣除手续费外的钱了。</p>
<p>这里支付成功 或者 失败后还有一个回调的处理。回调处理的php文件再上面的checkout.php里面的setReturnUrl处设置。这里设置的是/pay.php?success=true </p>
<p>接下来我们来看看pay.php是怎么简单处理回调的。先贴上pay.php的代码:</p>
<p>php</p>
<p><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
require
</span>
'app/start.php'
<span style=
"line-height: 1.5 !important;"
>;<br>
<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> PayPal\Api\Payment;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
use
</span><span style=
"line-height: 1.5 !important;"
> PayPal\Api\PaymentExecution;<br>
<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
if
</span>(!<span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>isset</span>(<span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_GET
</span>[
'success'
], <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_GET
</span>[
'paymentId'
], <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_GET
</span>[
'PayerID'
<span style=
"line-height: 1.5 !important;"
>])){<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
die
</span><span style=
"line-height: 1.5 !important;"
>();<br>
}<br>
<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
if
</span>((bool)<span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_GET
</span>[
'success'
]===
'false'
<span style=
"line-height: 1.5 !important;"
>){<br>
<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
echo
</span>
'Transaction cancelled!'
<span style=
"line-height: 1.5 !important;"
>;<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
die
</span><span style=
"line-height: 1.5 !important;"
>();<br>
}<br>
<br>
</span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$paymentID
</span> = <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_GET
</span>[
'paymentId'
<span style=
"line-height: 1.5 !important;"
>];<br>
</span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$payerId
</span> = <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$_GET
</span>[
'PayerID'
<span style=
"line-height: 1.5 !important;"
>];<br>
<br>
</span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$payment
</span> = Payment::get(<span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$paymentID
</span>, <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$paypal
</span><span style=
"line-height: 1.5 !important;"
>);<br>
<br>
</span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$execute
</span> = <span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
new
</span><span style=
"line-height: 1.5 !important;"
> PaymentExecution();<br>
</span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$execute
</span>->setPayerId(<span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$payerId
</span><span style=
"line-height: 1.5 !important;"
>);<br>
<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
try
</span><span style=
"line-height: 1.5 !important;"
>{<br>
</span><span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$result
</span> = <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$payment
</span>->execute(<span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$execute
</span>, <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$paypal
</span><span style=
"line-height: 1.5 !important;"
>);<br>
}</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
catch
</span>(<span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>Exception</span> <span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$e
</span><span style=
"line-height: 1.5 !important;"
>){<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
die
</span>(<span style=
"color: rgb(128, 0, 128); line-height: 1.5 !important;"
>
$e
</span><span style=
"line-height: 1.5 !important;"
>);<br>
}<br>
</span><span style=
"color: rgb(0, 0, 255); line-height: 1.5 !important;"
>
echo
</span>
'支付成功!感谢支持!'
;<span
class
=
"cnblogs_code_copy"
style=
"padding-right: 5px; line-height: 1.5 !important;"
><br type=
"_moz"
>
</span></p>
<p>好了。到这里一个简单的paypal支付的demo其实已经走通了。懂得支付原理之后、想要再你自己的项目里面进行更丰富的扩展、就去paypal的官方文档查看更多具体的开发项设置。包括交易明细的获取等等都是可以实现的。这里就不具体讲下去了。</p>
<p
class
=
"blank10"
></p>
<p
class
=
"blank1"
></p>
<hr style=
"border-top: #555555 1px solid; height: 1px; border-right: medium none; border-bottom: medium none; border-left: medium none"
>
<hr style=
"border-top: #555555 1px solid; height: 1px; border-right: medium none; border-bottom: medium none; border-left: medium none"
>
</div></span></li>
</ol>