PayPal支付流程图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lk90Ar0V-1596707877480)(http://192.168.1.104:8080/server/…/Public/Uploads/2020-05-21/5ec6223b06567.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bohjx4lq-1596707877483)(http://192.168.1.104:8080/server/…/Public/Uploads/2020-05-21/5ec6224b8db20.png)]

更多流程相关的信息可以看这篇文章:跳转

IPN是什么?

IPN全称是Instant Payment Notification(即时付款通知),当客户向您付款或付款被退回或退款时,PayPal会通过您指定的URL向您的服务器发布通知。此通知中将包含您客户的所有付款信息(例如,客户名称,付款金额)以及一段加密代码。服务器收到通知后,它将把包括加密代码在内的信息发布回安全的PayPal URL。贝宝将对交易进行身份验证并将其有效性确认发送回您的服务器。

官方IPN文档

NVP和SOAP是什么?

PayPal提供了多个API接口供开发者使用。在使用API之前,你必zhidao须先申请一个高级个人账户或者企业账户,同时你必须获取API 凭证供每次调用API 时使用。

一旦你获取了API凭证,您就可以调用相关的API接口专了。目前,我们提供两种API接口方式,NVP和SOAP。一般来说我们推荐您使用 NVP 接口。

Name-Value Pair(NVP)接口 – 请求和响应都是使用简单的HTTP。该接口简单易实现,适合於初级开发者和需要快速完成集成的属人员;

SOAP接口 - 请求和响应都是通过SOAP来完成。该接口适合於面向对象工程的开发;

PayPal API:NVP(名称/值对)接口

通过NVP API接口, 您只需给PayPal发送一个HTTP请求,并通过“名称=值”的形式指定请求参数,即可充分利用PayPal的API功能。

NVP API 是 PayPal 的业务功能、风险管理和业务逻辑的简单接口。NVP API 最基本的使用方法是通过到 PayPal 服务器的 HTTPS 连接发送一个 NVP 字符串,然後处理响应(也是一个 NVP 字符串)。执行 NVP API 调用

相关官方文档

接入流程

假如现在有一个应用要接入PayPal

  1. 首先创建一个开发者账号(注册链接),注册登录完成之后创建沙盒账号(链接)(沙盒账号是PayPal提供给开发者开发调试的账号,不需要真正的支付)。
  2. 设置IPN,首先登录上Business的沙盒账号(登录链接),点击右上角的设置进入账户设置页面,然后点击通知 -> 即时付款通知 -> 更新
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mqH8uSWt-1596707877484)(http://192.168.1.104:8080/server/…/Public/Uploads/2020-05-21/5ec62b47b1e5d.png)]
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D47ptBev-1596707877486)(http://192.168.1.104:8080/server/…/Public/Uploads/2020-05-21/5ec62b98ad87d.png)]
  3. 开发回调处理代码,IPN处理流程见官方文档
  4. 开发cancel_url和return_url的处理,cancel_url是用户取消订单后跳转的链接,return_url是支付成功之后跳转的链接,一般都是跳转到后端的接口上,然后经过逻辑处理,重定向到指定的链接。

沙盒账号详解

创建沙盒账号时至少应该建立一个Business的和一个Personal的,这种账号注册方法和Paypal的流程一样,信息可以是假的,包括银行帐号、信用卡(其实Paypal Sandbox会自动生成一些随机的号码)。接下来需要激活Paypal Sandbox的虚拟帐号,注意,这里不管你在Paypal Sanbox注册时填什么邮件地址,有任何发送到虚拟帐号所填邮箱的邮件都存会在开发帐号的管理界面中的Email页(导航栏上有)中。登录Sandbox的虚拟Paypal环境,还需要验证虚拟帐号的银行,这里可以随便填,然后通过Add Funds来给账户充值(想填多少填多少)。

代码实现

以Laravel团队开发的srmklive/paypal为例子,如果框架是laravel,那配置paypal在config/paypal.php进行,如果不是,则需要在实例化对象时传入配置。文档,这个包所有跟paypal的接口交互方式都是NVP,该包已经全部封装好了,我们直接调用就可以了。

货币代码文档

https://developer.paypal.com/docs/api/reference/currency-codes/

国家代码文档

https://developer.paypal.com/docs/api/reference/country-codes/

州和省代码文档

https://developer.paypal.com/docs/api/reference/state-codes/

区域代码文档

https://developer.paypal.com/docs/api/reference/locale-codes/

沙盒环境下的APPID统一都是APP-80W284485P519543T

https://developer.paypal.com/docs/archive/nvp-soap-api/gs-PayPalAPIs/#the-components-of-an-api-request
详情看这个文档

NVP接口列表

https://developer.paypal.com/docs/archive/nvp-soap-api/#

下单NVP接口文档

https://developer.paypal.com/docs/archive/nvp-soap-api/merchant/set-express-checkout-nvp/

IPN校验结果判断处理文档

https://www.paypal.com/c2/cgi-bin/webscr?cmd=p/acc/ipn-info-outside

https://developer.paypal.com/docs/api-basics/notifications/ipn/IPNandPDTVariables/

cancel_url和return_url的处理调用到的NVP接口相关的文档

https://developer.paypal.com/docs/archive/nvp-soap-api/merchant/get-express-checkout-details-nvp/
https://developer.paypal.com/docs/archive/nvp-soap-api/merchant/do-express-checkout-payment-nvp/

paypal下单

$orderData['items'] = [['name'  => 'test',//商品名称'price' => 1,     //商品价格'qty'   => 1      //商品个数],
];
$orderData['invoice_id'] = 'xxxx'; //订单id
$orderData['invoice_description'] = 'xxxxx';//订单描述
$orderData['return_url'] = 'xxxxx';// 统一下单成功,跳转地址
$orderData['cancel_url'] = 'xxxxx';// 下单失败,跳转地址
$orderData['total'] = 1;// 订单总额
$express = new ExpressCheckout;
$provider->setCurrency('USD'); //设置paypal支付币种(可以使用config中的默认)
$res = $express->setExpressCheckout($orderData);//设置参数,获取paypal链接(及时支付)

IPN处理

$provider = new ExpressCheckout;
$request->merge(['cmd' => '_notify-validate']);
$post = $request->all();
$res = (string)$provider->verifyIPN($post);

对return_url和cancel_url回来的数据进行校验处理

$token = $request->input('token', '');
$provider = new ExpressCheckout;
$response = $provider->getExpressCheckoutDetails($token);
if (in_array(strtoupper($response['ACK']), ['SUCCESS', 'SUCCESSWITHWARNING'])) {if ($response['BILLINGAGREEMENTACCEPTEDSTATUS'] == 0) {// 用户取消订单} else {$payerId = $request->input('PayerID', ''); // 支付者paypalid$paymentStatus = $provider->doExpressCheckoutPayment($orderData, $token, $payerId);// 调用NVP接口完成Express Checkout交易$orderData['items'] = [['name'  => 'test',//商品名称'price' => 1,     //商品价格'qty'   => 1      //商品个数],];$orderData['invoice_id'] = 'xxxx'; //订单id$orderData['invoice_description'] = 'xxxxx';//订单描述$orderData['return_url'] = 'xxxxx';// 统一下单成功,跳转地址$orderData['cancel_url'] = 'xxxxx';// 下单失败,跳转地址$orderData['total'] = 1;// 订单总额// 完成Express Checkout交易$paymentStatus = $provider->doExpressCheckoutPayment($orderData, $token, $payerId);$status = $paymentStatus['PAYMENTINFO_0_PAYMENTSTATUS'];if (!strcasecmp($status, 'Completed') || !strcasecmp($status, 'Processed')) {// 订单成功} else {// 订单失败}}
}

PayPal支付流程相关推荐

  1. 聚合支付、单商户多商户支付、微信/支付宝/PayPal支付流程、支付政策法规

    目录 一.聚合支付 聚合支付的基本概念 如何选择合适的支付模式 政策相关 常见的聚合支付平台 二.多商户和单商户 多商户单商户区别 多商户入驻流程 多商户模式中常见的支付流程 普通支付 合单支付 留个 ...

  2. php集成paypal付款流程,在PHP中集成PayPal标准支付

    PayPal支付功能其实一直在更新文档和接口,这里说的是一个简单的支付功能大概流程如下 1,在网站的结账页面,设置一个提交到PayPal网站的form,里面有一些金额,商品名称,商家收款账号.结账成功 ...

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

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

  4. paypal 的支付流程

    paypal 的支付流程 https://www.paypal.com/cn/cgi-bin/webscr?cmd=_wp-standard-overview-outside

  5. Android下集成Paypal支付

    近期项目需要研究paypal支付,官网上的指导写的过于复杂,可能是老外的思维和中国人不一样吧.难得是发现下面这篇文章: http://www.androidhive.info/2015/02/andr ...

  6. PayPal支付集成到自己Web网站

    PayPal如何集成到B2C网站? 因为网上实在找不到集成教程,我习惯性的google了一下相关资料,发现关于paypal接口的中文文档并不多,也不详细,只好自己研究,还好paypal上的资料非常齐全 ...

  7. uni-app:实现PayPal支付功能

    一.相关文档或网址 1.uni-app官方文档地址:开通 | uni-app官网 2.paypal开发者中心:Applications - PayPal Developer 二.开发流程 1.开发前配 ...

  8. java集成paypal支付,含Android,服务端代码

    支付流程 1. 前端选择商品,调用paypal支付 2. 支付完成,paypal会返回payment信息,将payment的id返回给自己服务端 3. 服务端根据paymentId,调paypal,查 ...

  9. Android PayPal支付的接入和SDK支付过程解析

    Android PayPal支付的接入和SDK支付过程解析 根据产品需求,要接入PayPal支付,在研究了几天支付后,总结下内容给新手使用,本篇文章如果与官方文档有差异的话,一切以官方为准.转载请注明 ...

  10. Asp.net core MVC paypal支付、回调——app支付

    最近刚加入了一家跨境物联网公司,刚来接到的需求就是微信支付和paypal支付,微信支付做的人很多了,没什么大的难点,之前的随笔提到过,今天主要来谈谈paypal支付. 首先应该申请一个沙箱环境的支付账 ...

最新文章

  1. 病虫害模型算法_基于深度学习的目标检测算法综述
  2. c++将小数化为二进制_C++版进制转换(十进制,二进制,十六进制整数和小数)
  3. 读入excel中的数据到数据库中
  4. mysql indentify by_测试工作中常用到的sql命令!!!
  5. minihomepage.exe 百度视频迷你主页
  6. QT连接多种数据库f方法及测试
  7. 在ie6下remove包含iframe的table所在的容器,会导致页面控件的焦点诡异丢失。
  8. 【十六】Jmeter:目录介绍
  9. ASP.NET运行模式
  10. 如何使用Arduino开发板和ADXL345加速度计跟踪方向
  11. Java代码计算2019新个税
  12. 手机linux发短信的命令,用AT指令操作短信猫发短信
  13. js切换图片会闪动_js图片闪动特效可以控制间隔时间如几分钟闪动一下
  14. 企业微信开发,嵌入自定义项目,及JS-SDK的引用
  15. 解决Linux vim 打开文件乱码问题
  16. 远程入侵原装乘用车(上)
  17. dubbo(5) Dubbo源码解析之服务调用过程
  18. send和sendto的区别
  19. Python创建文件名为0000—nnnn的txt文件
  20. 集合类超级无敌史无前例的超详细总结

热门文章

  1. 宝马「试水」神经形态芯片
  2. 5分钟在大米云上基于WordPress搭建一个博客
  3. cjson构建_cJSON结构体构建
  4. 扫二维码登录的实现原理
  5. 2015计算机二级office真题,2015年计算机二级office题库及答案
  6. Tomcat9一介绍与部署
  7. JS打开新页面的两种方式:当前页面打开和新页面打开
  8. 【贪心算法】哈夫曼编码问题
  9. 贪心算法之哈夫曼编码问题
  10. iOS 模拟器下载与安装