官方文档
https://developer.paypal.com/docs/integration/direct/payments/paypal-payments/#create-paypal-payment
准备工作
先要在官网注册PayPal账号,然后打开沙箱账号管理。
能看到有自动创建的2个沙箱账号,选中PERSONAL账号点击Profile,设置自定义密码(记录该账号和密码)。
然后点击左边菜单栏DASHBOARD-My Apps & Credentials创建沙箱应用.
然后回到沙箱账号管理选中BUSSINESS账号,点击Profile,点击API Credentials,点击REST Apps里的App name。
进入应用页面后,记录下Client ID和Secret。
支付流程
payment相关接口的支付流程为:
1、获取accesstoken
2、商户根据订单填充订单信息(事例index.php中create_payment()相关操作)
3、填充完后将数据POST到'/v1/payments/payment'
接口(事例index.php中create_payment()相关操作)
4、根据返回值,跳转到返回值中links里的’rel’=‘approval_url’对应的地址中(事例index.php中create_payment()相关操作)
5、用户(登陆准备工作时记录的PERSONAL账号)在该网页完成付款确认点击继续则跳转到执行payment的链接(create_payment()中设置的’redirect_urls’中的’return_url’)并把payerid和paymentid设置在url的参数中
6、执行payment的链接中,商户需要获取到这2个参数后调用'/v1/payments/payment/{paymentid}/execute'
接口,完成支付流程。(事例index.php中excute()相关操作)
事例
下面是简单封装了一下的payment相关操作的接口调用。访问index.php,create_payment函数构造订单信息,授权成功跳转localhost?a=excute&PayerID=xxx&paymentid=xxx,excute函数调用paypal类的ExcutePayment方法完成付款。
Paypal.php类
<?php
class Paypal{
protected $appId;
protected $appSecret;
protected $baseUrl='https://api.sandbox.paypal.com';
/*构造函数,把实例化Paypal类时传进来的appId和appSecret保存起来
*
*
* */
function __construct($appId,$appSecret)
{
$this->appId = $appId;
$this->appSecret = $appSecret;
}
/*curl post
*param
* $extreUrl string 接口地址
* $data array 提交的数据 为空时为get请求
* $header array 请求头信息
* $Oauth bool 是否使用Oauth验证
* return array 响应信息
* */
protected function httpRequest($extreUrl,$data,$header,$Oauth=false)
{
$url=$this->baseUrl.$extreUrl;
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);