1.开发前的准备https://img.ydisp.cn/news/20220913/lcfzgmiboxf在paypal官方开发者网站注册开发者账号。账号登录后,点击导航上方的dashboard,进入dashboard面板。以下截图及后续操作均在此面板中进行。在上面的截图中,您可以在菜单沙盒下的账户中看到您的沙盒测试的买家账户和卖家账户。两个测试账户都有一个配置文件选项,其中有changepassword来设置虚拟账户的密码。上面截图中菜单Sandbox下的Transactions就是你的交易记录。点击截图页面右上角的CreateApp按钮。创建一个应用程序。创建后,您将获得一个客户端ID和密码。这两个可以配置成php常量,后面开发的时候会用到。2、进入支付demo开发,在本地创建开发代码根目录。首先,创建一个index.html并在其中放置一个简单的产品名称和产品价格。代码和截图如下:DOCTYPEhtml>支付页面title>head>产品名称标签
价格label>
form>div>body>html>输入产品名称和价格。点击支付,会进入paypal的支付页面。使用您的沙盒测试买家帐户进行支付。你会发现支付成功了。然后登录到您的测试卖家帐户。您会发现卖家账户已经收到货款。当然这里要扣Paypal收取的手续费。手续费由卖家收取。我们来看看PHP是如何实现的。首先把paypal提供的php-sdk放到你的代码目录下。这里介绍使用PHP的包管理器composer获取***sdk。当然你可以从github等渠道获取***paypalphp-sdk。默认情况下,Composer已安装在您的计算机上。如果没有,就去度娘或者google安装composer。然后在你的代码根目录下写一个composer.json文件来获取包内容。json文件的代码如下:{"require":{"paypal/rest-api-sdk-php":"1.5.1"}}这里如果是linux/unix系统直接执行composerinstall在根目录下获取包内容。安装后。根目录下会生成vendor目录。有两个子目录,composer和paypal。Composer实现自动加载,paypal就是你的sdk内容。接下来我们写一个public文件(这里默认使用app/start.php,可以在你的项目中自定义),其实就是实现了sdk的autoload.php自动加载创建clientid和secret就在上面生成的paypal支付对象实例。start.php代码如下:phprequire"vendor/autoload.php";//加载sdk自动加载文件define('SITE_URL','http://www.paydemo.com');//自己定义网站url//创建支付对象实例$paypal=new\PayPal\Rest\ApiContext(new\PayPal\Auth\OAuthTokenCredential('yourClientID''yoursecret'));接下来,我们将实现以.php形式提交的处理文件checkout。代码内容如下:php/***@authorxxxxxxxx*@brief简介:*@date15/9/2*@time下午5:00*/use\PayPal\Api\Payer;use\PayPal\Api\Item;使用\PayPal\Api\ItemList;使用\PayPal\Api\Details;使用\PayPal\Api\Amount;使用\PayPal\Api\Transaction;使用\PayPal\Api\RedirectUrls;使用\PayPal\Api\Payment;使用\PayPal\Exception\PayPalConnectionException;需要“app/start.php”;if(!isset($_POST['product'],$_POST['price'])){die("丢失一些参数");}$product=$_POST['product'];$price=$_POST['价格'];$运费=2.00;//运费$total=$price+$shipping;$付款人=新付款人();$payer->setPaymentMethod('paypal');$项目=新项目();$item->setName($product)->setCurrency('USD')->setQuantity(1)->setPrice($price);$itemList=newItemList();$itemList->setItems([$item]);$细节=新细节();$details->setShipping($shipping)->setSubtotal($price);$金额=新金额();$amount->setCurrency('USD')->setTotal($total)->setDetails($details);$交易=新交易();$transaction->setAmount($amount)->setItemList($itemList)->setDescription("付款说明")->setInvoiceNumber(uniqid());$redirectUrls=newRedirectUrls();$redirectUrls->setReturnUrl(SITE_URL.'/pay.php?success=true')->setCancelUrl(SITE_URL.'/pay.php?success=false');$付款=新付款();$payment->setIntent('sale')->setPayer($payer)->setRedirectUrls($redirectUrls)->setTransactions([$transaction]);试试{$payment->create($paypal);}catch(PayPalConnectionException$e){echo$e->getData();死();$approvalUrl=$payment->getApprovalLink();标题(“位置:{$approvalUrl}”);checkout.php通过表单中提交的参数初始化和设置支付明细和参数。这里只列出常用的部分。Paypal提供了很多参数设置。更具体的细节可以参考paypal官方开发者文档。checkout.php设置参数后。将生成付款链接。使用header跳转到这个支付链接(也就是paypal的支付页面)到这个支付页面,然后就可以使用你沙盒提供的买家账号进行支付了。截图如下:使用买家账号完成支付后。去检查您的沙盒商家帐户余额。你会发现你收到的钱是减去手续费的。这里还有支付成功或失败后的回调处理。回调处理的php文件设置在上面checkout.php中的setReturnUrl。这里的设置是/pay.php?success=true接下来我们看看pay.php是如何简单处理回调的。先贴上pay.php的代码:phprequire'app/start.php';usePayPal\Api\Payment;usePayPal\Api\PaymentExecution;if(!isset($_GET['success'],$_GET['paymentId'],$_GET['PayerID'])){die();}if((bool)$_GET['success']==='false'){echo'交易取消!';die();}$paymentID=$_GET['paymentId'];$payerId=$_GET['PayerID'];$payment=Payment::get($paymentID,$paypal);$execute=newPaymentExecution();$execute->setPayerId($payerId);try{$result=$payment->execute($execute,$paypal);}catch(Exception$e){die($e);}echo'支付成功!感谢您的支持!';到此为止,一个简单的paypal支付demo其实就走完了。了解支付原理后,如果想在自己的项目中做更丰富的扩展,可以去paypal官方文档查看更具体的开发项设置。包括收购交易明细等都是可以实现的。这里我就不细说了。