在2018年的时候PayPal推出了新一代的支付接口,去年开始测试然后今年正式上线,接着就是市场推广,帮助老客户升级及推广新客户。新的接口版本是v2 checkout,名字叫smart payment button,简称spb。对比v1接口最大的区别主要集中在两点,一是简化了支付流程,更便捷。二是优化了信用卡通道,改变了过去信用卡复杂的方式。

这边接到任务需要开发机遇mangeto1.9和magento2的插件,以便于帮助老客户升级。于是就花了几天时间开始研究这个问题,具体过程如下:

1、官方文档演示及说明:https://developer.paypal.com/docs/checkout/,可以看到大体流程就是通过前台点击请求create api生成订单然后跳转登陆客户授权,授权成功后返回到api,通过capture获取交易详细信息并入库;

2、通过composer下载sdk,composer require paypal/paypal-checkout-sdk 1.0.0

github地址:https://github.com/paypal/Checkout-PHP-SDK,建议通过composer下载,下载后的文件夹是一个vendor,自带自动加载方法,而git里面clone下来的之后PayPal的文件夹。

3、v2 checkou api接口文档:https://developer.paypal.com/docs/api/orders/v2/

目前通过研究发现,大致流程基本上是三步,一创建订单,create order ,二、用户授权后capture订单,三、验证订单execute并获取详细信息写入数据库。

代码演示如下:

a、html页面,通过js sdk 创建订单并capture订单信息,传递orderId到后台程序:

<!DOCTYPE html>
<head><meta name="viewport" content="width=device-width, initial-scale=1"><meta http-equiv="X-UA-Compatible" content="IE=edge" /><scriptsrc="https://www.paypal.com/sdk/js?client-id=*****"></script></head>
<body><div id="paypal-button-container"></div><script>paypal.Buttons({createOrder: function(data, actions) {return actions.order.create({purchase_units: [{amount: {value: '0.01'}}]});},onApprove: function(data, actions) {return actions.order.capture().then(function(details) {alert('Transaction completed by ' + details.payer.name.given_name);// Call your server to save the transactionreturn fetch('execute.php', {method: 'post',headers: {'content-type': 'application/json'},body: JSON.stringify({orderID: data.orderID})});});}}).render('#paypal-button-container');
</script></body>

b、后台接收orderId,并验证订单信息获取订单信息写入数据库;

<?php
/*** Created by PhpStorm.* User: Administrator* Date: 2019/3/28* Time: 14:31*/
namespace Sample;require __DIR__ . '/vendor/autoload.php';
use PayPalCheckoutSdk\Orders\OrdersCaptureRequest;
use PayPalCheckoutSdk\Core\PayPalHttpClient;
use PayPalCheckoutSdk\Core\SandboxEnvironment;
// Here, OrdersCaptureRequest() creates a POST request to /v2/checkout/orders
// $response->result->id gives the orderId of the order created above
$clientId = "*****";
$clientSecret = "***********";$environment = new SandBoxEnvironment($clientId, $clientSecret);
$client = new PayPalHttpClient($environment);
$content=file_get_contents("php://input");
$json=json_decode($content,true);
$orderID=$json['orderID'];
file_put_contents("1.txt",$orderID,FILE_APPEND);
$request = new OrdersCaptureRequest($orderID);
$request->prefer('return=representation');
try {// Call API with your client and get a response for your call$response = $client->execute($request);// If call returns body in response, you can get the deserialized version from the result attribute of the responseprint_r($response);//验证通过获取到订单的详细信息可以写入到数据库
}catch (HttpException $ex) {echo $ex->statusCode;print_r($ex->getMessage());
}

通过以上步骤基本就走完了一个订单的流程。这里特别说明,前端js和后台程序打通的时候本地测试可能会报错,出现如下提示:

SSL certificate: unable to get local issuer certificate

解决办法:

到http://curl.haxx.se/ca/cacert.pem下载pem文件,并将文件拷贝到D:\phpStudy\PHPTutorial\cacert.pem

在php.ini
增加
curl.cainfo = "D:\phpStudy\PHPTutorial\cacert.pem"

通过测试发现,spb的主要功能是把create和capture方法通过js sdk的方式集成到了一起,这样前端可以直接生成订单,后续只需要进行验证即可。以上代码就是采用这种方式,其实还有另外两种方式,结合起来汇总如下:

A、create和capture全都通过js sdk实现,然后后端只需要execute并入库即可。

B、cteate通过ajax请求php实现并返回临时信息给js,前端接收信息后跳转登陆并授权,然后通过js检测授权后capture订单Id并传递给后端,后端根据Id execute入库。

C、不走前端,全部后端执行,先create,然后跳转网址授权,返回后capture,接着execute。

前端或者后端传递的订单组合参数列表:https://developer.paypal.com/docs/checkout/reference/server-integration/set-up-transaction/#on-the-server,但其中没有订单号。

现在依旧存在的几个问题如下:

1、订单号的参数怎么传递;
2、消息通知如何获取,状态变更;
3、特殊状态如预授权订单等设置及处理;

other|2019最新PayPal二代支付接口Smart Payment Buttons开发相关推荐

  1. Paypal 在线支付接口应用从零开始,第2节,[支付API原理及流程]

    今天看看Paypal支付流程和简单的认证原理,我画了一张图.应该能表达这两点意思了 我们的站点名字,为了好理解,暂且就定为西狐的网站吧. 点此查看清晰原图 恩,理论知识很重要哈,先把这图理解了,下一步 ...

  2. Android 最新版 Paypal 智能付款按钮 Paypal JavaScript SDK 集成:Smart Payment Buttons

    前言: 我们在2017年,在我们的业务中接入了paypal支付,当时使用的PayPal Android SDK,github地址  ,期间一切正常,最近paypal官方发来一封邮件,重要集成变更 在P ...

  3. Paypal 在线支付接口

    http://www.paypal-china.org/wangzhai/188.html 关于paypal在线支付的信息可以直接访问http://www.paypal.com.paypal作为国际在 ...

  4. PayPal 国际支付接口安全可行性平台(电子商务)集成解决方案

    IPN的原理很简单,就是当产生了一个交易之后,交易状态发生变化时,如用户已经付款.或者退款.撤销时,Paypal利用常用的HTTP POST方 式,将交易的一些变量提交给网站的某个页面(称之为IPN ...

  5. paypal php接口 下载,PayPal接口集成之:PHP集成PayPal标准支付接口

    1,在网站的结账页面,设置一个提交到PayPal网站的form,里面有一些金额,商品名称,商家收款账号.结账成功后返回URL等内容, 2,用户结账时,通过点击'使用PayPal结账'的按钮到达PayP ...

  6. 完全开源版可乐个人发卡网无授权完整运营版/整合最新免签约支付接口

    介绍: 前几天有用户给分享了这套源码,亲测了下发现后台和前台都有加密问题,于是花了好几十元找专业解密的给完全解密了,现在免费分享给会员下载. 可乐个人网目前网上用的最多的应该就是这一套了,但是很多地方 ...

  7. php威客网,最新带支付宝支付接口的PHP威客任务网站完整版源码破_界面漂亮整洁...

    源码介绍 这是一款基于PHP+MYSQL技术构架的威客系统 ,多年实践和对威客模式商业化运作的大量调查分析而精心策划研发,是您轻松搭建威客网站的首选利器.该系统针对威客任务模型进行了细致的分析,提供完 ...

  8. paypal 按钮支付对接及回调地址配置

    因为公司要接入 paypal 支付方式,自己捣鼓搞了好久,都没弄好. 本次使用的是最简单的按钮配置,支付方式配置其实支持有很多种. 账号注册 这个就不讲了可以参考:这篇最详细 如果不想现在过去就用鼠标 ...

  9. 中国工商银行网上银行新B2C在线支付接口文档下载地址

    本文档适用需要做工商银行网上银行支付接口的开发才,是最新B2C在线支付接口文档 适用于网站需要集成工商银行网上银行支付方式 如果您的网站需要开发这种支种方式或提供技术支持也可以联系本人 下载地址: 中 ...

  10. 西米支付:微信支付接口(申请与介绍)

    据统计,2022年微信全球用户数超12.8亿,其中微信支付使用人数达到6亿,而且微信支付在中国移动支付的市场份额超过40%,无论是在线上购物,还是线下收款,都能看到微信支付的身影,微信支付已经融入到我 ...

最新文章

  1. 英特尔将进行重大业务重组
  2. 兼容IE,chrome 等所有浏览器 回到顶部代码
  3. 电脑控制iphone_如何把苹果 iPhone/iPad 投屏到电脑
  4. Jerry Wang的SAP UI5源代码深入剖析系列文章
  5. wampserver的mysql启动与环境变量设置
  6. Java后端:10w行级别数据的Excel导入优化记录
  7. Silverlight:Downloader的使用(event篇)
  8. java中定时JOB的实现方式
  9. 李开复创业9年再看世界:中美科技成平行宇宙,VC也要+AI
  10. python pdf模块_用于将PDF转换为文本的Python模块
  11. 水晶报表2008部署
  12. 二、量子通信与量子加密
  13. 反激开关电源变压器设计实例讲解(定明芳)
  14. 方程自己解(1)——物理信息神经网络(PINN)
  15. 成都盛铭轩:产品主图提升转化率
  16. Linux随笔14-私有CA搭建并签发证书、ssh客户端和服务器端常用参数
  17. 【小5聊】代码管理工具之git等代码账号使用凭据管理器查看windows凭据
  18. 使用计算机打印资料时需要安装打印机驱动,详细教您如何在计算机上安装打印机驱动程序...
  19. 北京市市场主体发展情况报告 (zz)
  20. CentOS最新版本与历史版本下载

热门文章

  1. c语言日程报告闹钟,可以闹钟提醒的日程表,日程闹钟提醒怎么弄
  2. 第九届“图灵杯”NEUQ-ACM程序设计竞赛个人赛 L题 最小生成树
  3. Jlink接口引脚定义
  4. Netapp存储模拟器一战成功
  5. Mugeda(木疙瘩)H5案例课—模拟朋友圈-岑远科-专题视频课程
  6. Java常用开发工具有哪些?
  7. 斐讯路由器K2弹广告-刷机过程
  8. macOS调整分辨率与HiDPI
  9. TI单芯片毫米波雷达代码走读(十八)—— 多普勒维CA-CFAR检测之C代码实现
  10. java wsimport 调用_webService----wsimport调用方式