paypal的rest api接入
一、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接入相关推荐
- 微信公众平台开发,API接入与推送事件(1)
博客好久没有更新了,今天说说微信开发.微信开发的好多初学者都会又这样的迷惑,微信开发到底是什么?其实微信开发本质我和我们的网站开发没有太大的区别.我们常说的微信开发也就是公众号开,微信公众号分为三个类 ...
- Lambda钱包API接入教程
钱包API接入文档说明 参考钱包版本: Wallet0.4.40 钱包账户信息文档文档: 钱包账户信息.签名.配置文件说明 主网的钱包服务地址: 39.107.247.86:13659 测试网的钱包服 ...
- 微信api接入验证的坑!!!
最近在弄微信公众号开发,在微信api接入验证这块遇到了几个问题,记录一下踩坑之路. 一.这是官方文档的接入讲解 这儿前面第一步就不说了,配置自己的服务器,我这儿没有服务器,用的是ngrok内网穿透(问 ...
- 京东api接入的几个坑(宙斯) 转载
===== [ 京东api接入的几个坑(宙斯) 原创 2014年10月30日 17:43:51 8719 写这篇文章为了发下牢骚,鄙视下京东api上的不足, 怀念下下午的2个小时..... http: ...
- 转:彻底搞定期货穿透式CTP API接入
中信期货看穿式监管认证操作指南(CTP系统) https://www.citicsf.com/static/download/soft/%E4%B8%AD%E4%BF%A1%E6%9C%9F%E8%B ...
- 【vn.py】期货穿透式CTP API接入
文章目录 写在前面 一.申请穿透式接入 二.填表提交AppID 三.拿到AuthCode 四.仿真测试 五.期货公司校验 六.实盘接入 其他 REF 写在前面 由于6月14日当天,所有期货公司的柜台系 ...
- 恒生LIGHT云金融交易测试平台,支持股票、融资融券、股票期权、基金、期货等多市场,提供免费的实盘行情和便捷的API接入,满足多金融业务品种的高仿真实训环境,进行策略实盘回测!
金融交易测试平台,是恒生LIGHT云为开发者提供的一套支持股票.融资融券.股票期权.基金.期货等多市场,多金融业务品种的高仿真实训环境. 开发者通过开放的接口接入金融交易测试平台,一方面可以验证自身产 ...
- ArcGIS Server Felx API接入E都市三维地图
ArcGIS Server Felx API接入E都市三维地图 (本实例只是个人兴趣研究,如果想要应用到商业用途,请联系相关厂家) 通过HttpWatch工具查看E都市网站加载三维地图的方式及原理,能 ...
- ArcGIS Server Felx API接入E都市地图
ArcGIS Server Felx API接入E都市地图 (本实例只是个人兴趣研究,如果想要应用到商业用途,请联系相关厂家) 通过HttpWatch工具查看E都市网站加载三维地图的方式及原理,能够观 ...
- 通知短信 API 接入全流程(超详细整理)
随着移动互联网和智能手机的普及,短信成为了一种便捷.快速且有效的通信方式,尤其在向用户发送重要信息或提醒方面具有很大的优势. 本文将会深入探讨如何在程序中接入通知短信 API 实现短信通知功能,此外, ...
最新文章
- filter与servlet的比较
- 如何通过递归找父节点或子节点详解
- Unity中date相关问题
- 福利!Android官方网站出现中文版本!
- 同样可以建站,云服务器和虚拟主机的区别在哪?
- nginx access.log 忽略favicon.ico訪问记录的方法
- 左右极限相等的matlab,如何求左右极限
- MySQL数据库日志的查看
- Hibernate中Entity对象的重新加载refresh
- 关于Java String类的理解
- 银行机构的分类、特点及转型方向
- python数字替换 携程校招
- Minecraft mod制作简易教程(三)——创建一个物品
- react-hooks之useEffect
- 超详细,从零开始搭建阿里云服务器(centos7)第一章 远程连接
- 全网疯传!微信发原图暴露个人信息?微信高冷回应!真相来了...
- 如何在服务器搭建oa系统,如何在云主机搭建oa服务器
- 数据处理(10):SHP与JSON格式文件相互转换
- HBuilder安装与使用
- 阿里云轻量服务器使用一年使用体验(个人心得,仅供参考)