一、paypal支付接口准备工作

首先去申请一个paypal账号,https://www.paypal.com/。
申请完毕并登录,进入https://developer.paypal.com/developer/accounts/。即可看到你申请账号自动配属的两个测试账号,账号类别分别是:BUSINESS和PERSONAL,PERSONAL的账号里面有$9999,测试费用,表激动。
下面去给两个账号设置密码,点击账号展开,然后点击Profile,会弹出账号信息框,里面可以设置密码等一堆属性。如果点击账号始终无法展开,请吐槽下paypal,然后F5再点。
下面进入https://developer.paypal.com/developer/applications/申请APP,点击REST API apps栏目下面的Create App按钮,写进一个APP名称,然后选择一个测试账户作为此APP绑定的账号,如果你在上一步没有申请新的测试账号,那么这里默认就是选择了BUSINESS账号。
然后打开创建的APP,可以看到APP的clientId和clientSecret。
paypal的测试环境域名为sandbox.paypal.com,正式域名为www.paypal.com。一下测试均为测试环境。

至此准备工作差不多了,开始动代码。

二、进入支付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', 'http://www.paydemo.com'); //网站url自//创建支付对象实例
$paypal = new \PayPal\Rest\ApiContext(new \PayPal\Auth\OAuthTokenCredential('你的Client ID''你的secret'));

表单中提交的处理文件 checkout.php。代码内容

<?php
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')->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}");

ckout.php通过表单提交上来的参数对支付具体细节和参数进行初始化和设置。这里只列出了常用的部分。paypal提供了很多参数设置。具体更丰富的可以自己参考paypal官方开发者文档。
checkout.php设置完参数之后。会生成一个支付链接。用header跳转到这个支付链接(就是paypal的支付页面)到这个支付页面上面就可以用你的sandbox提供的buyer账号去支付了。截图如下:

用buyer账号支付完成之后。去看看你的sandbox的商家账户余额吧。就会发现已经收到了扣除手续费外的钱了。
这里支付成功 或者 失败后还有一个回调的处理。回调处理的php文件再上面的checkout.php里面的setReturnUrl处设置。这里设置的是/pay.php?success=true
接下来我们来看看pay.php是怎么简单处理回调的。先贴上pay.php的代码:

<?phprequire '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);try{$result = $payment->execute($execute, $paypal);
}catch(Exception $e){die($e);
}
echo '支付成功!感谢支持!';

好了。到这里一个简单的paypal支付的demo其实已经走通了。懂得支付原理之后、想要再你自己的项目里面进行更丰富的扩展、就去paypal的官方文档查看更多具体的开发项设置。包括交易明细的获取等等都是可以实现的。这里就不具体讲下去了。

paypal的rest api接入相关推荐

  1. 微信公众平台开发,API接入与推送事件(1)

    博客好久没有更新了,今天说说微信开发.微信开发的好多初学者都会又这样的迷惑,微信开发到底是什么?其实微信开发本质我和我们的网站开发没有太大的区别.我们常说的微信开发也就是公众号开,微信公众号分为三个类 ...

  2. Lambda钱包API接入教程

    钱包API接入文档说明 参考钱包版本: Wallet0.4.40 钱包账户信息文档文档: 钱包账户信息.签名.配置文件说明 主网的钱包服务地址: 39.107.247.86:13659 测试网的钱包服 ...

  3. 微信api接入验证的坑!!!

    最近在弄微信公众号开发,在微信api接入验证这块遇到了几个问题,记录一下踩坑之路. 一.这是官方文档的接入讲解 这儿前面第一步就不说了,配置自己的服务器,我这儿没有服务器,用的是ngrok内网穿透(问 ...

  4. 京东api接入的几个坑(宙斯) 转载

    ===== [ 京东api接入的几个坑(宙斯) 原创 2014年10月30日 17:43:51 8719 写这篇文章为了发下牢骚,鄙视下京东api上的不足, 怀念下下午的2个小时..... http: ...

  5. 转:彻底搞定期货穿透式CTP API接入

    中信期货看穿式监管认证操作指南(CTP系统) https://www.citicsf.com/static/download/soft/%E4%B8%AD%E4%BF%A1%E6%9C%9F%E8%B ...

  6. 【vn.py】期货穿透式CTP API接入

    文章目录 写在前面 一.申请穿透式接入 二.填表提交AppID 三.拿到AuthCode 四.仿真测试 五.期货公司校验 六.实盘接入 其他 REF 写在前面 由于6月14日当天,所有期货公司的柜台系 ...

  7. 恒生LIGHT云金融交易测试平台,支持股票、融资融券、股票期权、基金、期货等多市场,提供免费的实盘行情和便捷的API接入,满足多金融业务品种的高仿真实训环境,进行策略实盘回测!

    金融交易测试平台,是恒生LIGHT云为开发者提供的一套支持股票.融资融券.股票期权.基金.期货等多市场,多金融业务品种的高仿真实训环境. 开发者通过开放的接口接入金融交易测试平台,一方面可以验证自身产 ...

  8. ArcGIS Server Felx API接入E都市三维地图

    ArcGIS Server Felx API接入E都市三维地图 (本实例只是个人兴趣研究,如果想要应用到商业用途,请联系相关厂家) 通过HttpWatch工具查看E都市网站加载三维地图的方式及原理,能 ...

  9. ArcGIS Server Felx API接入E都市地图

    ArcGIS Server Felx API接入E都市地图 (本实例只是个人兴趣研究,如果想要应用到商业用途,请联系相关厂家) 通过HttpWatch工具查看E都市网站加载三维地图的方式及原理,能够观 ...

  10. 通知短信 API 接入全流程(超详细整理)

    随着移动互联网和智能手机的普及,短信成为了一种便捷.快速且有效的通信方式,尤其在向用户发送重要信息或提醒方面具有很大的优势. 本文将会深入探讨如何在程序中接入通知短信 API 实现短信通知功能,此外, ...

最新文章

  1. filter与servlet的比较
  2. 如何通过递归找父节点或子节点详解
  3. Unity中date相关问题
  4. 福利!Android官方网站出现中文版本!
  5. 同样可以建站,云服务器和虚拟主机的区别在哪?
  6. nginx access.log 忽略favicon.ico訪问记录的方法
  7. 左右极限相等的matlab,如何求左右极限
  8. MySQL数据库日志的查看
  9. Hibernate中Entity对象的重新加载refresh
  10. 关于Java String类的理解
  11. 银行机构的分类、特点及转型方向
  12. python数字替换 携程校招
  13. Minecraft mod制作简易教程(三)——创建一个物品
  14. react-hooks之useEffect
  15. 超详细,从零开始搭建阿里云服务器(centos7)第一章 远程连接
  16. 全网疯传!微信发原图暴露个人信息?微信高冷回应!真相来了...
  17. 如何在服务器搭建oa系统,如何在云主机搭建oa服务器
  18. 数据处理(10):SHP与JSON格式文件相互转换
  19. HBuilder安装与使用
  20. 阿里云轻量服务器使用一年使用体验(个人心得,仅供参考)

热门文章

  1. 如何预防网站被篡改,劫持
  2. 一文搞懂HTTPProxy丨含基础、高级路由、服务韧性
  3. JSP:JavaBean+EL函数+JSTL标签
  4. 符号_网名特殊符号在线制作
  5. 咱用AppDesigner开发复现了一款我国古老的桌游 —【升官图】
  6. 应届生web前端面试题_前端开发应届生面试指南(含各大公司具体指南及面试真题)...
  7. 人工神经网络心得体会_人工智能学习心得
  8. 何谓情比金坚——婚姻来源和相关说法
  9. 教你快速搭建个人网站
  10. 使用树莓派打造家庭监控系统