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,后续所有地址都需要这个参数 用clientIdclientSecret去获取
接口:/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

后续所有地址都需要这个参数 用clientIdclientSecret去获取

//获取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相关推荐

  1. paypal html5 支付,uniapp 对接 paypal支付 (h5,app端)

    由于工作需要,需要对接国外的PayPal支付,前端框架用的又是UNIAPP,众所周知UNIAPP国内的生态环境还可以,但是到了国外嘛  嘿嘿  懂得都懂. uniapp app对接Paypal支付 作 ...

  2. paypal tp 对接_php对接“paypal/Checkout-PHP-SDK“支付流程

    前言 公司一个网站项目有国外的用户给我们发邮件希望能用paypal支付,于是交给了我,我们这个项目两年前是有对接paypal通道的,但是一直没有开放,测试测了并不能完成付款流程. 看paypal官方是 ...

  3. java对接PayPal实现自动续费功能

    欢迎大家进群,一起探讨学习 微信公众号,每天给大家提供技术干货 博主技术笔记 博主网站地址1 博主网站地址2 博主开源微服架构前后端分离技术博客项目源码地址,欢迎各位star 由于同事对接PayPal ...

  4. java对接PayPal支付-自动续费功能

    一. java对接PayPal支付(v2). 讲了PayPal v2:checkout-sdk 的对接过程 二. java对接PayPal支付 (添加物流跟踪信息). 讲了PayPal添加物流信息 的 ...

  5. java对接PayPal支付(v2)

    java对接PayPal支付 我们公司最近开通了网上支付功能,国内选择对接支付宝和微信,国外选择对接paypal, 今天我先将paypal对接方式记录下来,后面会记录微信和支付宝(本人比较懒,微信和支 ...

  6. java 对接 paypal支付

    码字不易,开源更不易,点赞收藏关注,多多支持 开源地址  paypal-demo: java 对接 paypal 的案例,下载项目,注册paypal账号,拿到秘钥,即可使用 效果图 准备环境 1.注册 ...

  7. PHP 对接paypal支付平台

    对接paypal支付平台 [前言]:最近公司需要做一款海外股票的app,其中有需要购买会员权益的一个模块,这里需要国际类型的支付.支付宝及微信在国内比较活跃,国外的话可能不太理想,所以就用了paypa ...

  8. 对接paypal支付 利用v1版本vue-paypal-checkout

    一.事前准备 1.​​​​​​注册:创建PayPal账户 - PayPal中国 注册好paypal账号. 2.进入 paypal 开发者中心 Developer Dashboard  并创建My ap ...

  9. woocommerce对接paypal如何进行沙盒测试?

    很多朋友在设置电子商务后台Paypal收款时,经常看到Live和Sandbox这两个字眼.是否会产生疑惑:这是干什么的呢? 其实这里的LIVE模式是正常付款环境下的付款模式,Sandbox就是我们所说 ...

最新文章

  1. gprof + kprof + gprof2dot (性能 与 函数调用图)-
  2. Windows 2000/XP/2003超级工具
  3. 秒杀系统必须考虑的 3 个技术问题!
  4. php ajax取不到值,PHP没有从Ajax获取值
  5. figma下载_我关于Figma文件封面的故事
  6. flask 安装flask_resultful
  7. RuntimeError: Can‘t call numpy() on Variable that requires grad. Use var.detach().numpy()
  8. 特斯拉股价周五收盘下跌7.38% 此前公布第三季度交付量创新高
  9. 计算机演示文稿教学实例课件,计算机图形学的教学演示文稿ppt课件.ppt
  10. Is It A Tree?(hdu1325)
  11. 学习笔记-数据结构与算法之线性表
  12. bagging和时间序列预测_Simple RNN时间序列预测
  13. 数模竞赛必备参考书籍《算法竞赛入门经典(第2版)》PDF免费下载
  14. android studio深色模式,Xamarin 中的深色模式
  15. 五寸照片尺寸像素 5寸的照片是几比几的
  16. windows电脑打开jnlp文件设置
  17. Python_tkinter(标签Lebal)
  18. 细解网易宝系统架构之高可用篇
  19. 判断一个序列是否可由给定序列通过栈操作获得
  20. [管理篇]VMWare搭建Openstack——Cinder完成对云硬盘的扩容

热门文章

  1. C++day01 const和define之间的区别
  2. 肠道菌群代谢组学之粪便微生物移植治疗原发性硬化性胆管炎
  3. 面试谈工资的时候,对方问你的期望薪资,如果反问对方「根据自己的能力能给多少」,合适吗?
  4. 使用 Swoole 加速你的 CMS 系统
  5. 数据库-多步操作产生错误,请检查每一步的状态值
  6. 什么是蓝牙的核心协议层和产品类型?一文读懂BQB认证中两者的关联
  7. 孙辉老师《十年MFC经历认识的Microsoft技术》
  8. exchange 2013 批量启用AD域中已存账号的邮箱(转)
  9. 网易云爬虫-爬取单曲和歌单所有歌曲
  10. 资料分析之倍数与比值