PHP语⾔开发Paypal⽀付demo的具体实现
⼀、paypal⽀付接⼝准备⼯作
⾄此准备⼯作差不多了,开始动代码。
⼆、进⼊⽀付Demo开发
在本地根⽬录、先建⽴⼀个index.html⾥⾯就放⼀个简单的产品名称和产品价格两个input 项即可、代码和截图如下:
复制代码
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>⽀付页⾯</title>
</head>
<body>
<div>
<form action="checkout.php"method="post"autocomplete="off">
<label for="item">
产品名称
<input type="text"name="product">
</label>
<br>
<label for="amount">
价格
<input type="text"name="price">
</label>
<br>
<input type="submit"value="去付款">
</form>
</div>
</body>
</html>
复制代码
输⼊产品名称 和 价格。点击去付款就会到paypal的付款页⾯。⽤你的sandbox测试买家账号去付款。就会发现付款成功。然后登陆你的测试卖家账号。会发现卖家账号已经收到付款。当然这⾥会扣除paypal收取的⼿续费。⼿续费收的是卖家的。
下⾯来具体看看php是怎么实现的。⾸先先要把paypal提供的 php-sdk给弄到你的代码⽬录中来。这⾥介绍使⽤php的包管理器composer 来获取最新sdk、当然你可以可以从github等其他渠道获取最新的paypal php-sdk。
默认你的电脑已经安装composer了。如果没有⾃⼰请移步composer安装。
然后在你的代码根⽬录写⼀个composer.json⽂件来获取包内容。json⽂件代码如下:
{
"require" : {
"paypal/rest-api-sdk-php" : "1.5.1"
}
}
这⾥如果是 linux/unix系统就直接再根⽬录执⾏composer install来获取包内容。
安装好之后。根⽬录下⾯会产⽣⼀个vendor⽬录。⾥⾯有composer 和 paypal两个⼦⽬录。composer⾥
⾯实现了⾃动加载、paypal则是你的sdk内容。
接下来我们来写⼀个公共⽂件(这⾥默认⽤ app/start.php、你的项⽬中可以⾃定义)、其实⾥⾯就只是实现了 sdk的autoload.php⾃动加载 和 创建刚才上⾯的的client id 和 secret⽣成的paypal⽀付对象实例。start.php代码如下:
<?php
require"vendor/autoload.php"; //载⼊sdk的⾃动加载⽂件
define('SITE_URL', 'www.paydemo'); //⽹站url⾃⾏定义
//创建⽀付对象实例
$paypal = new \PayPal\Rest\ApiContext(
new \PayPal\Auth\OAuthTokenCredential(
'你的Client ID'
'你的secret'
)
);
接下来就来实现表单中提交的处理⽂件 checkout.php。代码内容如下:
<?php
/**
* @author xxxxxxxx
* @brief简介:
* @date 15/9/2
* @time下午5:00
*/
use \PayPal\Api\Payer;
use \PayPal\Api\Item;
use \PayPal\Api\ItemList;
use \PayPal\Api\Details;
use \PayPal\Api\Amount;
use \PayPal\Api\Transaction;
use \PayPal\Api\RedirectUrls;
use \PayPal\Api\Payment;
use \PayPal\Exception\PayPalConnectionException;
require"app/start.php";
if (!isset($_POST['product'], $_POST['price'])) {
die("lose some params");
}
$product = $_POST['product'];
$price = $_POST['price'];
$shipping = 2.00; //运费
$total = $price + $shipping;
$payer = new Payer();
$payer->setPaymentMethod('paypal');
$item = new Item();
$item->setName($product)
->setCurrency('USD')
->setQuantity(1)
-
>setPrice($price);
$itemList = new ItemList();
$itemList->setItems([$item]);
$details = new Details();
$details->setShipping($shipping)
->setSubtotal($price);
$amount = new Amount();
$amount->setCurrency('USD')
$amount->setCurrency('USD')
->setTotal($total)
->setDetails($details);
$transaction = new Transaction();
$transaction->setAmount($amount)
->setItemList($itemList)
->setDescription("⽀付描述内容")
->setInvoiceNumber(uniqid());
$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl(SITE_URL . '/pay.php?success=true')    ->setCancelUrl(SITE_URL . '/pay.php?success=false');
$payment = new Payment();
$payment->setIntent('sale')
->setPayer($payer)
->setRedirectUrls($redirectUrls)
->setTransactions([$transaction]);
try {
$payment->create($paypal);
} catch (PayPalConnectionException $e) {
echo$e->getData();
die();
}
$approvalUrl = $payment->getApprovalLink();
header("Location: {$approvalUrl}");
checkout.php通过表单提交上来的参数对⽀付具体细节和参数进⾏初始化和设置。这⾥只列出了常⽤的部分。paypal提供了很多参数设置。具体更丰富的可以⾃⼰参考paypal官⽅开发者⽂档。
checkout.php设置完参数之后。会⽣成⼀个⽀付链接。⽤header跳转到这个⽀付链接(就是paypal的⽀付页⾯)到这个⽀付页⾯上⾯就可以⽤你的sandbox提供的buyer账号去⽀付了。截图如下:
⽤buyer账号⽀付完成之后。去看看你的sandbox的商家账户余额吧。就会发现已经收到了扣除⼿续费外的钱了。
这⾥⽀付成功 或者 失败后还有⼀个回调的处理。回调处理的php⽂件再上⾯的checkout.php⾥⾯的setReturnUrl处设置。这⾥设置的
是/pay.php?success=true
接下来我们来看看pay.php是怎么简单处理回调的。先贴上pay.php的代码:
<?php
require'app/start.php';
use PayPal\Api\Payment;
use PayPal\Api\PaymentExecution;
if(!isset($_GET['success'], $_GET['paymentId'], $_GET['PayerID'])){
die();
}
if((bool)$_GET['success']=== 'false'){
echo'Transaction cancelled!';
die();
}
$paymentID = $_GET['paymentId'];
$payerId = $_GET['PayerID'];
$payment = Payment::get($paymentID, $paypal);
$execute = new PaymentExecution();
$execute->setPayerId($payerId);
php语言处理什么的try{
$result = $payment->execute($execute, $paypal);
}catch(Exception $e){
die($e);
}
echo'⽀付成功!感谢⽀持!';
好了。到这⾥⼀个简单的paypal⽀付的demo其实已经⾛通了。懂得⽀付原理之后、想要再你⾃⼰的项⽬⾥⾯进⾏更丰富的扩展、就去paypal的官⽅⽂档查看更多具体的开发项设置。包括交易明细的获取等等都是可以实现的。这⾥就不具体讲下去了。