海外支付:遍布全球的Paypal
海外支付:遍布全球的Paypal
吴剑 2015-11-26
原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian
吴剑 http://www.cnblogs.com/wu-jian
前言
Paypal是全球在线支付的领导者,2002年被eBay收购,2015年又戏剧性的从eBay分离,以500亿美元市值反超eBay。创始人 Elon Musk 同时是Paypal、空间探索技术公司、以及特斯拉汽车三家公司的CEO,电影“钢铁侠”的人物原型就是这哥们。

吴剑 http://www.cnblogs.com/wu-jian
概述
Paypal为商家提供了多种支付对接方式,其中Paypal Express Checkout最为常见、方便、以及自定义扩展性最强。下图是Paypal Express Checkout支付的一个标准时序图,注意这是一个纯技术层面的API调用流程,在此基础上,我们可以组合出三种Paypal通用的用户支付体验:
快捷支付,直接去Paypal付款并使用Paypal上存储的地址发货。很明显,Paypal希望把自己打造成一个用户中心,也花了血本来推广这种方式,具我所知,该方式也是海外用户使用占比最高的。
标准支付,就像我们国内的天猫淘宝一样,填好了收件地址,完了再去支付。
游客支付,或称之为信用卡支付。当然信用卡不是Paypal强项,Paypal跟支付宝一样充当的是银行与用户之间的中间人角色。在信用卡领域,VISA是老大,同时信用卡涉及到相当高的安全层面风险,具体请参考我的另一篇文章 海外支付:抵御信用卡欺诈的CyberSource 。
这三种支付方式都是基于下图中相同API,只是组合序顺或传递的参数稍有差异而以。

<图1.Paypal Express Checkout API接口>
吴剑 http://www.cnblogs.com/wu-jian
SetExpressCheckout
这是一个同步的API接口,将交易相关的所有数据首先通过SetExpressCheckout传递给Paypal,然后Paypal响应一个Token用于后续支付步骤,Token有效时间为3小时。
从接口前缀Set可以看出该接口是一个预交易步骤,好比我们去银行提大额现金,需要提前一天给银行通知,一来有助于银行备齐现金,二来也有助于交易安全,银行有充分时间评估交易的可靠性。后来在架构多平台的支付中心时,我也参考和使用了Paypal的这个结构。
SetExpressCheckout的参数很多,具体可参见Paypal官方文档:https://developer.paypal.com/docs/classic/api/merchant/SetExpressCheckout_API_Operation_NVP/ ,下面列出一些常用参数:
| 参数名称 | 参数说明 |
|---|---|
| VERSION | 接口版本号 |
| METHOD | API名称,使用“SetExpressCheckout”即可 |
| REQCONFIRMSHIPPING | 商家是否需要买家在PayPal账户中的邮寄地址是已经被确认的地址 |
| PAYMENTREQUEST_{m}_PAYMENTACTION | 希望获取付款的方式 |
| ALLOWNOTE | 允许买方在PayPal结账页面上输入了一条文本信息给商家 |
| LOCALECODE | PayPal付款页面显示语言的设置 |
| RETURNURL | 客户选择通过PayPal付款后其浏览器将返回的URL |
| CANCELURL | 客户取消使用PayPal付款时返回的URL |
| 结账时输入的买家电子邮件。 PayPal使用该值预填PayPal登录页面的PayPal会员注册部分 | |
| PAYMENTREQUEST_{m}_CURRENCYCODE | PayPal支持的交易币种中所列币种之一的三字符币种代码 |
| PAYMENTREQUEST_{m}_AMT | 交易总费用 |
| PAYMENTREQUEST_{m}_ITEMAMT | 订单所有物品的价格 |
| PAYMENTREQUEST_{m}_SHIPPINGAMT | 邮费总额 |
| NOSHIPPING | 是否不在PayPal付款页面展示邮寄地址 |
| LANDINGPAGE | 付款页面展示类型 |
| SOLUTIONTYPE | 结账流程的类型 |
| HDRIMG | 付款页面左上角显示的图片的URL |
| HDRBACKCOLOR | 付款页面标题的背景色 |
| PAYFLOWCOLOR | 付款页面设置背景色 |
| HDRBORDERCOLOR | 付款页面标题边框颜色 |
| L_PAYMENTREQUEST_{m}_NUMBER{n} | 商品编号 |
| L_PAYMENTREQUEST_{m}_NAME{n} | 商品名称 |
| L_PAYMENTREQUEST_{m}_QTY{n} | 商品数量 |
| L_PAYMENTREQUEST_{m}_AMT{n} | 商品单价 |
| PAYMENTREQUEST_{m}_INVNUM | 商家订单编号 |
吴剑 http://www.cnblogs.com/wu-jian
GetExpressCheckoutDetails
如图1所示,在通过SetExpressCheckout接口获取到Token后,就需要跳转页面去Paypal了。用户在Paypal站点登录,确认支付信息,完成支付,最后Paypal将URL重定向回商家页面。
此时,我们可以获取用户在Paypal的相关信息。接口的详细参数可参见Paypal官方文档:https://developer.paypal.com/docs/classic/api/merchant/GetExpressCheckoutDetails_API_Operation_NVP/ ,下面列出常用的响应参数:
| 参数名称 | 参数说明 |
|---|---|
| TOKEN | Token |
| PAYERID | Paypal用户ID |
| Paypal账号(Email) | |
| PAYMENTREQUEST_{n}_SHIPTONAME | 货运地址姓名 |
| PHONENUM | 货运地址电话 |
| PAYMENTREQUEST_{n}_SHIPTOCOUNTRYCODE | 货运地址国家ID |
| PAYMENTREQUEST_{n}_SHIPTOSTATE | 货运地址省份 |
| PAYMENTREQUEST_{n}_SHIPTOCITY | 货运地址城市 |
| PAYMENTREQUEST_{n}_SHIPTOZIP | 货运地址邮编 |
| PAYMENTREQUEST_{n}_SHIPTOSTREET | 货运地址街道1 |
| PAYMENTREQUEST_{n}_SHIPTOSTREET2 | 货运地址街道2 |
在此需要提一下的是,Paypal的接口非常灵活,它最大限度让商家可以使用相同的API来组合不同的支付逻辑以提高用户体验。比如在标准支付时,用户在商家网站填写并存储了邮寄地址,因此邮寄地址不需要与Paypal交互;而在快捷支付时,则可以通过GetExpressCheckoutDetails接口获取用户存储在Paypal上的地址信息并且在商家页面上显示给用户确认。
吴剑 http://www.cnblogs.com/wu-jian
DoExpressCheckoutDetails
DoExpressCheckoutDetails是Paypal实时交易的最后一步,它告诉并向Paypal确认最终的支付信息,当完成对它的调用,就代表了Paypal实时支付的完成,也代表Money从用户账户到了商家账户。详细官方API文档请参考:https://developer.paypal.com/webapps/developer/docs/classic/api/merchant/DoExpressCheckoutPayment_API_Operation_NVP/ ,如下列出了接口响应结果:
| 参数名称 | 参数说明 |
|---|---|
| PAYMENTINFO_{n}_PAYMENTSTATUS | 付款结果状态 |
| PAYMENTINFO_{n}_CURRENCYCODE | 成功币种 |
| PAYMENTINFO_{n}_AMT | 成功金额 |
| PAYMENTINFO_{n}_TRANSACTIONID | Paypal交易ID |
在快捷支付时,因为用户的邮寄地址存放在Paypal中,因此在GetExpressCheckoutDetails前,我们无法知道用户是哪个国家,也就不能计算出运费金额。所以通常在快捷支付时,我们会在GetExpressCheckoutDetails中获取用户邮寄地址来计算运费,在DoExpressCheckoutDetails中更新运费并确认最终金额。
吴剑 http://www.cnblogs.com/wu-jian
异步IPN通知
IPN全称为 Instant Payment Notification,在每笔交易完成后,Paypal可提供通知服务,即商家提供一个URL,Paypal向这个URL发送交易结果。这个过程是异步的,比如因为网络繁忙或你的服务器故障,IPN会在连续4天内最大15次持续发送结果,直到你收到为止。Paypal不建议在实时的支付流程中使用IPN,但我们可以使用IPN作为交易安全辅助或交易提醒等用途。
IPN开发概要:https://developer.paypal.com/webapps/developer/docs/classic/ipn/integration-guide/IPNIntro/
IPN详细参数:https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNandPDTVariables/
在Paypal商户后台中开启IPN:用户信息 -> 即时付款通知

IPN基于HTTP的POST规范,当成功接收到IPN结果后响应HTTP 200即可:

附录:Paypal商户后台API设置截图




吴剑 http://www.cnblogs.com/wu-jian
结束语
本文对Paypal支付流程和API进行了概要性描述,并未涉及到具体代码细节,有了清晰的思路再编码是事半功倍的事,希望对从业的开发人员有所帮助。也希望中国的产品有朝一日不再是廉价和仿冒的代名词,希望中国的海外卖家能把我们的创新展现给世界人民,希望更多的站点能够崛起和打破阿里的垄断。
最后友情提示,在海外大多数国家,对侵权的打击还是相当严厉的。Paypal是一家美国公司,遵守的是美国司法体系,如果你的站点销售侵权产品,通常Paypal会给你警告,据我所知他们也有专门的巡查部门。但如果一旦你被海外用户取证和诉讼并且事实成立,你的资金就有可能被Paypal冻结。
吴剑 http://www.cnblogs.com/wu-jian
<全文完>
吴剑 http://www.cnblogs.com/wu-jian
![]() |
如果您觉得本文对您有所帮助,可用微信扫描左侧二维码向作者捐赠。您的支持是原创的源动力!
作者:吴剑 |
海外支付:遍布全球的Paypal的更多相关文章
- 海外支付:抵御信用卡欺诈的CyberSource
海外支付:抵御信用卡欺诈的CyberSource 吴剑 2014-06-04 原创文章,转载必需注明出处:http://www.cnblogs.com/wu-jian 吴剑 http://www.cn ...
- Paypal、Stripe、Braintree,跨境电商金流第三方支付该用哪家?
在台湾做跨境电子商务生意,电商网站的金流肯定是一个最大的麻烦,Paypal或是Stripe和Braintree则是国际上大家最常用的金流整合第三方支付服务商.这些金流服务大幅简化网站付费过程,都让消费 ...
- Python3+Django2集成PayPal(贝宝)跨境支付三方接口以及订单查询和退款业务
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_157 如果您所在的公司涉及外贸或者跨境支付业务,那一定听说过大名鼎鼎的PayPal,总的来说,PayPal在跨国贸易里的优势还是比 ...
- PayPal支付对接
开发时间:2019-04-30 我的目标:在我们公司的海外网站上,接入PayPal支付,美国用户在线完成付款. 准备: (1)准备:公司注册信息(执照,注册号,法人等),法人信息(身份证,住址等) ( ...
- 网页集成paypal支付
在网站中集成paypal支付有两种方式: 1.通过paypal账户的按钮创建工具 进入paypal 商户账号,选择创建按钮工具,有包括添加到购物车.购买.租用三类按钮. 之后会生成一段代码,直接将代码 ...
- 国外支付PayPal
PayPal官网https://www.paypal.com/ PayPal沙箱https://www.sandbox.paypal.com/signin?country.x=US&local ...
- PHP语言开发Paypal支付demo的具体实现
如果我们的应用是面向国际的.那么支付的时候通常会考虑使用paypal.以下为个人写的一个paypal支付示例,已亲测可行.paypal有个很不错的地方就是为开发者提供了sandbox(沙箱)测试功能. ...
- 跨境网上收款 找PayPal没错(php如何实现paypal支付)
开发前准备 在我的博客中 有介绍如何获取ID 和 secret : 好了 在上一篇博客中详细介绍了也不少: 跨境网上收款 找PayPal没错(如何获取ID 和 secret) http://blog. ...
- PayPal支付-Reaact框架
前情提要 之前用React框架做过一个网站的开发,客户是国外的公司,所以为迎合受众,支付模块添加了我国不常用但国外常用的Paypal.最近在整理文档,就把当时写的这篇经验总结再整合以下发布. payp ...
随机推荐
- [linux] linux下编译安装zlib
zlib官方网站:http://www.zlib.net上下载源码来安装zlib软件包. 目前最新版本zlib是zlib1.2.8,安装开始:$wget http://www.zlib.net/zli ...
- RDO部署openstack(2)
配置ML2和VXLAN 1. 安装和配置Neutron ML2 框架 (1) 安装在控制节点上(运行Neutron-server的节点) service neutron-server stop y ...
- CentOS6.8安装Redis3.2.5
1.下载Redis3.2.5安装包 wget http://download.redis.io/releases/redis-3.2.5.tar.gz 2.解压.编译.安装redi ...
- Zabbix agent on Microsoft Windows
1.在Windows上创建目录: C:\Windows\zabbix\ 2.下载安装包并解压到新建的目录 3.下载地址:http://www.zabbix.com/downloads/3.0.0/za ...
- FastReport使用总结三——条码简介
FastReport Desinger中支持的Barcode类型如下图所示: 设置其Barcode属性可以实现支持不同的条码类型. 注意: 支持的条码类型说明如下: 总结: 1.通过设置Barcode ...
- 【转】SQLServer XML类型
SQL Server从2005起开始支持xml类型,这个数据类型对于后期的改变非常有用.一对多的关系在后期变成了多对多的关系,XML类型就是一个不错的选择. 1.创建测试数据 创建表 --创建表,包含 ...
- Bellman-Ford & SPFA 算法——求解单源点最短路径问题
Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题.Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好 ...
- Android三-AsyncTask
基础介绍:http://blog.csdn.net/liuhe688/article/details/6532519 扩展知识:http://blog.csdn.net/pipisky2006/art ...
- 黄聪:WordPress 多站点建站教程(六):使用WP_Query、switch_to_blog函数实现获取子站点分类中的文章
首先在你使用主题的funtions.php里面添加下代码: //根据时间显示最新的分类文章内容,每个站点显示一篇内容 //$blog_id 子站点ID //$catid 分类ID wp_reset_q ...
- (C/C++ interview) Static 详解
C Static http://stackoverflow.com/questions/572547/what-does-static-mean-in-a-c-program Static could ...
