前言

Paypal是全球在线支付的领导者,2002年被eBay收购,2015年又戏剧性的从eBay分离,以500亿美元市值反超eBay。创始人 Elon Musk 同时是Paypal、空间探索技术公司、以及特斯拉汽车三家公司的CEO,电影“钢铁侠”的人物原型就是这哥们。

海外支付:遍布全球的Paypal

海外支付:抵御信用卡欺诈的CyberSource

海外支付:南美的AstroPay

海外支付:俄罗斯的Yandex与WebMoney

概述

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
EMAIL 结账时输入的买家电子邮件。 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
EMAIL 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

国外支付(Paypal,Cybersource)相关推荐

  1. GlobalCash全球付万事达虚拟信用卡-可用于国外支付购物

    Via:http://www.freehao123.com/globalcash/ 前几天感恩节美国的主机域名商们都展开了一系列的优惠大降价活动,尤其是像Godaddy.Dreamhost.BlueH ...

  2. WoShop跨境电商国际支付Paypal支付商城全开源无加密商城源码

    WoShop跨境电商国际支付Paypal支付商城全开源无加密商城源码 现在的企业都喜欢直接用源码进行开发,特别是在跨境电商版块这一行,很多企业都是直接购买跨境电商系统源码再进行一个二次开发,从而给自己 ...

  3. android移动支付——PayPal支付

    前言 这里开篇讲解一系列的Android相关的移动支付.移动支付也称为手机支付,用户使用移动的设备,完成对所购买商品或者服务的支付功能.包括远程支付(网上支付.短信支付),近场支付(刷卡.滴卡.pos ...

  4. android移动支付——PayPal支付,2021我的Android路要怎么走

    程序中的支付流程中: 1.浏览商品 2.把要买的商品加入购物车 3.把购物车中的商品信息和用户信息和支付方式等信息发送到自己服务器,服务器处理商品信息生成订单,并返回"支付串"给客 ...

  5. php paypal订单号查询,PHP_php购物网站支付paypal使用方法,详细参考: https://cms.paypal.com/ - phpStudy...

    php购物网站支付paypal使用方法 详细参考: https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=deve ...

  6. php paypal订单号查询,关于php购物网站支付paypal的使用方法

    这篇文章主要介绍了关于php购物网站支付paypal的使用方法,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下 PayPal 快速.安全而又方便,是跨国交易的首选在线付款方式.现在Pay ...

  7. 基于ASP.NET/C#开发国外支付平台(Paypal)学习心得。

        最近一直在研究Paypal的支付平台,因为本人之前没有接触过接口这一块,新来一家公司比较不清楚流程就要求开发两个支付平台一个是支付宝(这边就不再这篇文章里面赘述了),但还是花了2-3天的时间通 ...

  8. 豪掷 5 亿美元,国外支付巨头 CEO 帮助斯坦福女友实现科研自由!

    来自亿万富翁的高级浪漫:爱她,便是帮她实现科研自由. 整理 | 苏宓 出品 | CSDN(ID:CSDNnews) 支付巨头,内有支付宝.微信支付,外就有 Stripe.今天想要分享的主人公便是来自 ...

  9. php线下支付,Paypal线下支付模块,附下载地址_PHP教程

    paypal线下支付模块 功能: 1,提供Paypal线下支付选项,提示客户填写paypal邮箱账户,以便提交订单后联系客户 2,订单提交成功后自动发送邮件(包含paypal收款账户)给客户,并提示客 ...

最新文章

  1. Oracle数据库设计规范
  2. CodeForces - 1208F Bits And Pieces(SOSdp+贪心)
  3. 美好生活从撸好代码开始
  4. 在多线程数据平面开发套件(DPDK)应用程序中优化内存使用
  5. LeetCode:Permutations, Permutations II(求全排列)
  6. 重构代码 —— 函数即变量(Replace temp with Query)
  7. 安装opcenccv-python以后仍然No module named ‘cv2‘
  8. 例2.10 查找学生信息 - 九度教程第18题(查找)
  9. BigGAN论文解读
  10. R语言基础数据分析——双因素方差分析
  11. matlab计算加减乘除,matlab计算矩阵的加减乘除以及逆
  12. getchar 使用
  13. 不可不会的「反转链表」问题
  14. H5弹出是否打开微信APP的方式
  15. STM32固件库点亮LED灯
  16. SDN相关组织——ONF
  17. 硬盘提示格式化的解决办法:
  18. vue导入及使用本地图片
  19. [从头读历史] 第278节 诗经 曹风
  20. 酒店管理系统 Java实战 毕业设计

热门文章

  1. yii mysql gii_Yii 框架使用Gii生成代码操作示例
  2. yii mysql gii_Yii整合mongodb和mysql 使用mongodb gii
  3. GIT常用命令for QA
  4. python读取日志匹配日志信息(二)
  5. OpenCV57:级联分类器的训练
  6. pdf太大怎么压缩大小?
  7. 网络上公开的华为一面、二面、三面、四面、五面过程的总结
  8. 全解Google(谷歌)基础设施架构安全设计
  9. 基因数据处理72之GATK安装成功
  10. 转载总结总结一些常用的页面小技巧