PHP对接PayPal支付接口

技术文章
2023-07-07 08:52:12
文章摘要

PayPal是一个第三方支付系统,类似于我国的支付宝。PayPal于1998年12月建立,总部在美国加利福尼亚州圣荷塞市。2002年,PayPal在纳斯达克首次上市,随后被eBay收购。

PayPal是一个第三方支付系统,类似于我国的支付宝。PayPal于1998年12月建立,总部在美国加利福尼亚州圣荷塞市。2002年,PayPal在纳斯达克首次上市,随后被eBay收购。

PayPal也和一些电子商务网站合作,成为它们的货款支付方式之一。但是用这种支付方式转账时,PayPal收取一定数额的手续费。

由于客户网站对国外用户也需要友好支持,所以需要支持国外的支付,选来选去最终确定了使用PAYPAL支付来接入。。下面就把我接入PAYPAL的流程和方法用流水账的方式记录一下吧。。

首先 在PAYPAL网站上注册了账号,然后不记得是怎么弄的了,就得到了一个客服邮箱,经过与客服不断的沟通客服最终确认回复如下。

居然回复用的都是中文,惊喜吧。。。很人性化吧。。。

通过这个邮件我们可以确认 REST API 是目前来说他们用的最新的接口,这个接口的流程就是

1.首先要获取TOKEN 2.然后根据TOKEN创建订单,response中会返回approve_link,以及后续调用capture接口的URL地址 3.使用浏览器(或者APP中的webview)打开approve_link,让买家登录PayPal账号并确认支付(之后可以通过在创建订单是指定的return URL参数跳转回您自己的页面进行后续流程) 4.在确认买家approve后,调用capture接口执行扣款(需要使用post方法调用),成功的话就表示交易完成并且资金已转入您的账户。

知道流程之后就好说了。。

接下来我们到官方网站看一下API的使用方法就好了。

https://developer.paypal.com/docs/api/overview/

文档里面说首先我们需要创建一个应用,创建了应用之后会有专属的 clientId 和 clientSecret 并且很人性化的提供了沙箱环境以便测试。。

应用创建页面

那些说使用沙箱环境的大神们我不知道他们怎么弄的,,但我用了沙箱之后慢的要死,根本没办法测试,所以最终直接使用真实环境完成对接测试。。

如果你也是国内网络 并且在使用沙箱的时候慢的要死,就直接别考虑了,用真实环境吧。我们点击那个 LIVE标签进入到真实环境 。

点击下面的 CREAT APP 按纽

给你的应用起个名字,然后下一步 你就会看到你需要的ID 和 SECRET。

把ID 和 SECRET 这两个参数保存起来,在调用接口中的时候会用到。。

从文档中我们可以看到,要调用REST API接口首先要获取TOKEN。

这个图截的大了一些,是为了让大家看到下面的代码,,一般情况下大多数人会认为下面的代码就是获取TOKEN的,但有的时候写API文档的人就是这么奇怪,你也不知道他是怎么想的。。本来获取API 一个CURL命令,写了说明之后应该跟上示例。但它这个还真就不是这样的,获取TOKEN的只给出一个链接,想要看示例的话就必须点进去看。。。没办法文档是人家写的就得按人家的方法来。。

点击上图中红框圈起来的链接进入到TOKEN说明文档。

https://developer.paypal.com/docs/api/get-an-access-token-curl/

可以看到这块就是获取TOKEN的方法。。。因为我是用PHP写的代码,所以直接用curl的方法 配合 两个参数去获取TOKEN。 具体代码如下:

$url = https://api.paypal.com/v1/oauth2/token;
$clientId = 你的ID;
$clientSecret = 你的密钥;
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_HEADER, false );
curl_setopt ( $ch, CURLOPT_HTTPHEADER, array(
Content-Type: application/json,
Accept-Language: en_US
));
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $ch, CURLOPT_POST, true );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt ( $ch, CURLOPT_USERPWD, $clientId . : . $clientSecret );
curl_setopt ( $ch, CURLOPT_POSTFIELDS, grant_type=client_credentials );
$result = curl_exec($ch);
curl_close($ch);
echo $result;
这样直接跑就可以,跑完之后得到的接果如下:

{scope:https://uri.paypal.com/services/invoicing https://uri.paypal.com/services/disputes/read-buyer https://uri.paypal.com/services/payments/realtimepayment https://uri.paypal.com/services/disputes/Update-seller https://uri.paypal.com/services/paypalhere openid https://uri.paypal.com/services/payments/payment/authcapture https://uri.paypal.com/services/disputes/read-seller https://uri.paypal.com/services/payments/refund https://uri.paypal.com/services/identity/activities https://api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/payments/.* https://uri.paypal.com/services/reporting/search/read https://uri.paypal.com/payments/payouts https://api.paypal.com/v1/vault/credit-card/.* https://uri.paypal.com/services/subscriptions https://uri.paypal.com/services/applications/webhooks https://api.paypal.com/v1/payments/refund https://api.paypal.com/v1/payments/sale/.*/refund,access_token:A21AAFoNkPzjPl9Kxuw-1rGgMSA4FY65N3qAgO8OKcqyfmrk6fO1QZN4j6l3V3rc5B2cpBFrAvYf0SbVqdeSsrfwVhxE17G_Q,token_type:Bearer,app_id:APP-80W284485P519543T,expires_in:32400,nonce:2020-08-12T05:39:26ZAwiJIywrfnIvhNxCYJDjNwufSAj47doGRsin47VPGFo}
这是一个JSON字符串,里面包含了TOKEN,通过转JSON的方式把TOKEN取出来就好。

至此我们就获取了使用 PAYPAL最初的入门卡,,接下来我们就可以按照一般流程来创建一个订单

$url = https://api.paypal.com/v2/checkout/orders;
$Token = '你的TOKEN';
$postfilds ='{
intent: CAPTURE,
purchase_units: [
{
amount: {
currency_code: HKD,
value: 1
},


description: purchase_units_Green XL,
custom_id:109,

}],
application_context:{
cancel_url:用户取消后你网站的地址,
return_url:用户确认后你网站的地址
}
}';
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_HEADER, false );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $ch, CURLOPT_POST, true );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer ' . $Token,
'Accept: application/json',
'Content-Type: application/json'
));
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postfilds );
$result = curl_exec($ch);
curl_close($ch);
echo $result;
这里面最重要的就是 application_context 这里面带的两个网址,一个是用户取消支付后需要跳转的,一个是用户登陆之后确认订单后要跳转的。

PAYPAL的订单流程是这样,先通过接口生成一个订单,成功创建订单后会返回几个链接,其中一个属性为approve 的链接地址就是用户确认订单流程 ,你通过跳转到这个网址后让用户登陆 确认订单。


用户确认订单之后会返回到你设置的 返回网址,并跟了两个参数 其中 token 就是订单的ID。这一步用户只是确认订单,并没有完成真正的付款。。

所以在你返回页面里面你还需要根据参数TOKEN来完成扣款,官方说明叫 “捕获订单”

$url = https://api.paypal.com/v2/checkout/orders/你获取的token/capture;
$Token = '你的TOKEN';
$ch = curl_init ();
curl_setopt ( $ch, CURLOPT_URL, $url );
curl_setopt ( $ch, CURLOPT_HEADER, false );
curl_setopt ( $ch, CURLOPT_SSL_VERIFYPEER, false );
curl_setopt ( $ch, CURLOPT_POST, true );
curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Authorization: Bearer ' . $Token,
'Content-Type: application/json'
));
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postfilds );
$result = curl_exec($ch);
curl_close($ch);
echo $result;
在返回网址里面执行 捕获订单的过程,这样才会完成扣款。

至止,PAYPAL的订单生成 确认 捕获并扣款流程才算走完。。

以上就是接入PAYPAL REST API 的最终成功方法。。

挺早之前我就走过一次它的流程,因为当时用的是沙箱环境,速度慢的要死,一次都没成功过,后来就放弃了。。现在有需求没办法,必须走通。所以直接使用了LIVE环境来完成接口对接。。

扫码关注我们
小程序二维码

查看演示

微信公众号二维码

关注微信公众号

你觉得这篇文章怎么样?

关于小二CMS

高端定制网站领域著名服务商

我们立足合肥,业务覆盖安徽、全国及全球市场。我们凭借一支经验丰富、创意独特、协作无间的专业技术团队,专注于将最优技术通过高效简捷的途径呈现给客户,量身打造最佳解决方案。我们致力于通过持续努力,成为客户在信息化领域值得托付、共创价值的长期战略合作伙伴,协助客户在新经济时代敏锐捕捉商机,拓展发展空间,构筑强大竞争力。

小程序开发
公众号开发
高端网站开发
系统开发
商城开发
外贸网站建设
网站优化推广
安全运维

扫描二维码与小二CMS创始人沟通

7×24小时专业技术支持

高端网站定制
系统开发(OA、CRM)
商城开发
外贸网站建设
公众号/小程序
安全运维
创始人微信二维码

扫一扫添加微信

关于我们

超讯兴网络科技一家专注于高端网站建设、微信小程序开发、移动端应用研发及企业数字化转型服务的技术驱动型企业。我们致力于通过前沿技术研发实力与匠心独运的创意设计,为客户提供从策划、设计到开发、部署运维的一站式数字化解决方案。

自2013年成立以来,我们已成功交付3000+个精品项目,服务客户遍布金融、零售、制造、教育、医疗、互联网等多个行业领域。我们拥有资深的技术团队与丰富的实战经验,擅长复杂业务逻辑梳理与建模、高性能系统架构设计、跨平台应用开发、用户体验(UX/UI)深度优化及企业级系统安全保障。

我们相信,每一个成功的项目都源于对客户需求的深刻理解与极致追求。选择超讯兴网络科技,就是选择一个懂技术、懂设计、更懂您业务痛点的数字化成长伙伴,让我们携手将您的品牌愿景与市场机遇转化为可落地的数字现实,共同驱动业务增长与品牌价值升级。

致力于通过数字化技术赋能企业,帮助客户实现业务增长与品牌升级,成为您值得信赖的技术合作伙伴。

我们的优势
01

七年专注高端网站建设

02

服务上千企业积淀厚口碑

03

资深策划洞悉行业与用户

04

前沿技术栈紧跟时代发展

05

前端代码深度优化SEO友好

06

千家成功案例品质可信赖

07

精英团队高效协同创精品

08

多重防护保障数据安全

09

独家源码出售握牢自主权

10

完善售后体系全程护无忧

11

快速响应需求变更迭代

12

架构灵活支持二次开发

13

云服务器部署稳定可靠

14

免费提供一年技术支持

15

项目按期交付信誉保障

16

数据定期备份安全无忧

我们的不同

我们是一支年轻而充满激情的团队,痴迷代码,沉醉设计,坚信设计与编程不仅是工作,更是生活的信仰——"非设计,不生活;无兄弟,不编程!"

团队成员来自国内外顶尖设计公司与软件企业,精通网站设计与开发,已成功交付数百个项目,涵盖品牌官网、电商平台、小程序及移动端应用。

使命 以技术之力,助力改变命运
宗旨 客户第一,品质至上
信念 客户的成功,才是我们真正的成功

产品演示

产品演示二维码

请使用微信扫描二维码

查看产品演示

QQ客服

扫码添加好友,随时为您解答

QQ二维码

扫描二维码添加客服

QQ号:460623785
或保存二维码在QQ中识别

微信客服

扫码添加好友,随时为您解答

微信二维码

扫描二维码添加客服

微信号:
或保存二维码在微信中识别

微信咨询
QQ咨询
电话咨询
在线客服
回到顶部