php源生curl对接paypal
php源生curl对接paypal
- 准备工作
- 网址
- 基本流程
- 正式接口地址和测试接口地址
- 1接口获取access_token
- 2接口预生成订单
- 3 跳转支付
- 4 支付后会跳回自己给的回调地址,再次调用接口确认支付完成
- 最后
前提
1 php代码
2 没有用SDK 用的是curl抓取接口 不过应该区别不大
3 基本是对照着英文文档做的 好多问题文档基本有写但是分散在很多地方
准备工作
1 有关注册账号的部分这里不详细写了 需要测试账号密码(买家和商家),生成项目
2 请参考其他人文档 了解怎么注册开发者账号密码 paypal会自动生成两个账号 此处不贴图了
3 Business是商家账号 Personal是买家账号 修改密码在后面的操作里 请自行摸索
4 生成一个项目 注意沙盒模式和线上模式可以切换 需要两个参数clientId clientSecret
网址
paypal网址: https://www.paypal.com/ .
paypal开发者网址: https://developer.paypal.com/developer/accounts/.
paypal测试账号登录网址: https://www.sandbox.paypal.com/ .
接口手册网址: https://developer.paypal.com/docs/api/orders/v2/ .
PHP SDK GIT地址: https://github.com/paypal/Checkout-PHP-SDK .
官方客服网址: https://www.paypal-support.com/s/?language=zh_CN .(这里登录用paypal正式账号,登录之后联系我们可以提问,回复很慢但是问题都会回答)
基本流程
这里大概叙述一下流程:
1 接口获取access_token,后续所有地址都需要这个参数 用clientId和clientSecret去获取
接口:/v1/oauth2/token
2 接口预生成订单,获取支付链接,这里注意参数一定要带回调地址 return_url
接口:/v2/checkout/orders
3 跳转支付
4 支付后会跳回自己给的回调地址,再次调用接口确认支付完成
接口:/v2/checkout/orders/{id}/capture
这个id是上一个生成订单接口返回的参数id,同时回调回来的url上参数token也是这个
5 处理自己的逻辑
正式接口地址和测试接口地址
//正式
$web = 'https://api-m.paypal.com';
$clientId = "";
$clientSecret = "";
//测试
$web = 'https://api-m.sandbox.paypal.com';
$clientId = "";
$clientSecret = "";
1接口获取access_token
接口:/v1/oauth2/token
后续所有地址都需要这个参数 用clientId和clientSecret去获取
//获取token
$url = $web."/v1/oauth2/token";
$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);
$nvpResArray = json_decode($result,true);
$access_token= $nvpResArray['access_token'];
这里得到$access_token
2接口预生成订单
接口:/v2/checkout/orders
获取支付链接,这里注意参数一定要带回调地址 return_url
这部分文档: https://developer.paypal.com/docs/api/orders/v2/#orders_create .
这里$postfilds就是所有的订单参数 注意需要json格式
这个地方我直接参考的SDK:
SDK地址: https://github.com/paypal/Checkout-PHP-SDK/blob/60d9b395e4a775097b005ff654e7b9e4009bdc99/samples/AuthorizeIntentExamples/CreateOrder.php .
参数这里直接copy过来修改成自己的数据就好,需要注意的点:
1 所有的商品单价加起来要等于总价 也就是item_total中的value
2 一定要带return_url 不然会出现支付跳转白屏不成功的情况
3 接口需要的是json格式 所以记得数组转一下json
$json = json_encode($arr);
$postfilds = $json;
$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);
3 跳转支付
上一个接口直接回调回来的数据
status == CREATED 就是成功了 不成功会有提示 成功之后会返回支付链接 跳转去支付就可以了
注意支付链接是approve这个
4 支付后会跳回自己给的回调地址,再次调用接口确认支付完成
接口:/v2/checkout/orders/{id}/capture
支付成功之后 paypal会根据你的return_url自动返回 并带上两个参数 (GET方式)
$Token 和 PayerId注意1这里的PayerId 注意 1 这里的PayerId注意1这里的Token 就是接口要传的id
2 需要一个参数$access_token 即第一个接口获取的那个参数
3 这里这个参数我也不清楚 照着文档直接放上了’PayPal-Request-Id: 7b92603e-77ed-4896-8e78-5dea2050476a’
这部分文档: https://developer.paypal.com/docs/api/orders/v2/#orders_capture .
$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 ' . $access_token,'Accept: application/json','Content-Type: application/json','PayPal-Request-Id: 7b92603e-77ed-4896-8e78-5dea2050476a'
));
curl_setopt ( $ch, CURLOPT_POSTFIELDS, $postfilds );
$result = curl_exec($ch);
curl_close($ch);
$result = json_decode($result);
这个接口会返回你的订单信息
如果判断status == COMPLETED 代表订单已经完成 可以去看一下测试账号的交易记录是否已经出现了
后续完成网站逻辑就可以了
最后
1 官网联系还是能解决很多问题的 可以多问一下
2 参数部分参考SDK就可以 自己写json格式很容易出错 文档上有没有示例 拿SDK代码来改是最方便的
php源生curl对接paypal相关推荐
- paypal html5 支付,uniapp 对接 paypal支付 (h5,app端)
由于工作需要,需要对接国外的PayPal支付,前端框架用的又是UNIAPP,众所周知UNIAPP国内的生态环境还可以,但是到了国外嘛 嘿嘿 懂得都懂. uniapp app对接Paypal支付 作 ...
- paypal tp 对接_php对接“paypal/Checkout-PHP-SDK“支付流程
前言 公司一个网站项目有国外的用户给我们发邮件希望能用paypal支付,于是交给了我,我们这个项目两年前是有对接paypal通道的,但是一直没有开放,测试测了并不能完成付款流程. 看paypal官方是 ...
- java对接PayPal实现自动续费功能
欢迎大家进群,一起探讨学习 微信公众号,每天给大家提供技术干货 博主技术笔记 博主网站地址1 博主网站地址2 博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star 由于同事对接PayPal ...
- java对接PayPal支付-自动续费功能
一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...
- java对接PayPal支付(v2)
java对接PayPal支付 我们公司最近开通了网上支付功能,国内选择对接支付宝和微信,国外选择对接paypal, 今天我先将paypal对接方式记录下来,后面会记录微信和支付宝(本人比较懒,微信和支 ...
- java 对接 paypal支付
码字不易,开源更不易,点赞收藏关注,多多支持 开源地址 paypal-demo: java 对接 paypal 的案例,下载项目,注册paypal账号,拿到秘钥,即可使用 效果图 准备环境 1.注册 ...
- PHP 对接paypal支付平台
对接paypal支付平台 [前言]:最近公司需要做一款海外股票的app,其中有需要购买会员权益的一个模块,这里需要国际类型的支付.支付宝及微信在国内比较活跃,国外的话可能不太理想,所以就用了paypa ...
- 对接paypal支付 利用v1版本vue-paypal-checkout
一.事前准备 1.注册:创建PayPal账户 - PayPal中国 注册好paypal账号. 2.进入 paypal 开发者中心 Developer Dashboard 并创建My ap ...
- woocommerce对接paypal如何进行沙盒测试?
很多朋友在设置电子商务后台Paypal收款时,经常看到Live和Sandbox这两个字眼.是否会产生疑惑:这是干什么的呢? 其实这里的LIVE模式是正常付款环境下的付款模式,Sandbox就是我们所说 ...
最新文章
- gprof + kprof + gprof2dot (性能 与 函数调用图)-
- Windows 2000/XP/2003超级工具
- 秒杀系统必须考虑的 3 个技术问题!
- php ajax取不到值,PHP没有从Ajax获取值
- figma下载_我关于Figma文件封面的故事
- flask 安装flask_resultful
- RuntimeError: Can‘t call numpy() on Variable that requires grad. Use var.detach().numpy()
- 特斯拉股价周五收盘下跌7.38% 此前公布第三季度交付量创新高
- 计算机演示文稿教学实例课件,计算机图形学的教学演示文稿ppt课件.ppt
- Is It A Tree?(hdu1325)
- 学习笔记-数据结构与算法之线性表
- bagging和时间序列预测_Simple RNN时间序列预测
- 数模竞赛必备参考书籍《算法竞赛入门经典(第2版)》PDF免费下载
- android studio深色模式,Xamarin 中的深色模式
- 五寸照片尺寸像素 5寸的照片是几比几的
- windows电脑打开jnlp文件设置
- Python_tkinter(标签Lebal)
- 细解网易宝系统架构之高可用篇
- 判断一个序列是否可由给定序列通过栈操作获得
- [管理篇]VMWare搭建Openstack——Cinder完成对云硬盘的扩容