国外支付(Paypal,Cybersource)

article/2025/11/6 12:43:04

前言

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接口版本号
METHODAPI名称,使用“SetExpressCheckout”即可
REQCONFIRMSHIPPING商家是否需要买家在PayPal账户中的邮寄地址是已经被确认的地址
PAYMENTREQUEST_{m}_PAYMENTACTION希望获取付款的方式
ALLOWNOTE允许买方在PayPal结账页面上输入了一条文本信息给商家
LOCALECODEPayPal付款页面显示语言的设置
RETURNURL客户选择通过PayPal付款后其浏览器将返回的URL
CANCELURL客户取消使用PayPal付款时返回的URL
EMAIL结账时输入的买家电子邮件。 PayPal使用该值预填PayPal登录页面的PayPal会员注册部分
PAYMENTREQUEST_{m}_CURRENCYCODEPayPal支持的交易币种中所列币种之一的三字符币种代码
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/ ,下面列出常用的响应参数:

参数名称参数说明
TOKENToken
PAYERIDPaypal用户ID
EMAILPaypal账号(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}_TRANSACTIONIDPaypal交易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://chatgpt.dhexx.cn/article/319idxEM.shtml

相关文章

第13章 管理身份和身份验证

13.1 控制对资产的访问 资产包括&#xff1a;信息&#xff0c;系统、设备、设施和人员。 •信息 组织的信息包括其所有数据。 数据可存储在服务器、计算机和较小设备上的简单文件中&#xff0c;还可存储在服务器场中的大型数据库中。 访问控制尝试阻止信息的未授权访问。 …

多视角人脸正面化生成综述:Multi-view Frontal Face Image Generation: A Survey

多视角人脸正面化生成综述&#xff1a;Multi-view Frontal Face Image Generation: A Survey 本文首发于极市平台 作者&#xff1a;宁欣1,2,3&#xff0c;南方哲2,3&#xff0c;许少辉2,3&#xff0c;于丽娜1&#xff0c;张丽萍1,2,3 单位信息&#xff1a;1、中国科学院半导体…

如何入门多视角人脸正面化生成?不得不看的超详细最新综述!

作者丨宁欣&#xff0c;南方哲&#xff0c;许少辉&#xff0c;于丽娜&#xff0c;张丽萍 审稿丨邓富城 编辑丨极市平台 导读 本文将重点对近些年来基于3D模型和深度学习模型的人脸正面化生成方法的主要进展和部分具有代表性的研究成果进行介绍&#xff0c;并通过实验对比和分析…

MYSQL错误:Error Code: 1175解决办法

MYSQL错误&#xff1a;Error Code: 1175解决办法 今天对视图进行更新&#xff0c;发现修改不了数据&#xff0c;报错如下&#xff1a; Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disabl…

关于error code 1175的成因和解决办法

事情起源于些课后习题p89页的操作 &#xff08;5&#xff09;在teacherinfo1表中&#xff0c;将性别为“男”的记录的家庭住址都改为“上海市浦东新区”。 update teacherinfo1 set tadress上海市浦东新区 where tcsex男; select *from teacherinfo1; 出现了以下截图的错误 …

洛谷P1175 表达式的转换(栈的应用)

洛谷 P1175 表达式的转换 链接. 难度&#xff1a;提高/省选- 标签&#xff1a;模拟&#xff0c;字符串&#xff0c;线性结构&#xff0c;栈 题意&#xff1a; 给定一个中缀表达式&#xff0c;让我们输出转化为后缀表达式后计算的每一步。 题解&#xff1a; 1.将中缀表达式…

如何解决MySQL Workbench中的错误Error Code: 1175

错误描述&#xff1a; 在MySQL Workbench8.0中练习SQL语句时&#xff0c;执行一条update语句&#xff0c;总是提示如下错误&#xff1a; Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY columnTo disab…

1175:除以13

1175&#xff1a;除以13 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 14671 通过数: 8802 【题目描述】 输入一个大于0的大整数N&#xff0c;长度不超过100位&#xff0c;要求输出其除以13得到的商和余数。 【输入】 一个大于0的大整数&#xff0c;长度不超过1…

MySQL报错Error Code:1175--删除/更新数据报错

Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect. 因为MySQL运行在safe-updates模式下&#xff0c;该…

JAVA的技术方向

我大致把 JAVA 的复习分为如下几个方向。 JVM&#xff1b; 排序算法和 Java 集合&工具类&#xff1b; 多线程和并发包&#xff1b; 存储相关&#xff1a;Redis 、Elastic Search、MySQL&#xff1b; 框架&#xff1a;Spring&#xff0c;SpringMVC&#xff0c;Spring Bo…

【求职】好未来Java 方向面经

Java 方向面经 一面 2018/9/20 1、项目相关 2、接口和抽象类 3、spring aop ioc 4、场景题 5、手写二叉树镜像 6、Redis 7、数据库高负载怎么办 8、天池大数据比赛 二面 1、项目相关 2、手写两个出现两次的数 3、手写两个出现一次的数 4、想不想转大数据 一面 2…

学Java方向的学生如何找实习的工作?

是这个大三的学生,是学Java方向的,我想知道,实习的工作好找吗?应该会什么?目前会SE、EE,数据库MySQL、 sqlserver。sql语句也会,C语言,c++也会一点。可以用框架做增删改查。这样够了吗? 不好找。 某种意义上来讲,找实习比找工作还要难。 为什么? 你就会一点增删…

推荐10个Java方向最热门的开源项目(8月)

1. JCSprout&#xff08;Java核心知识库&#xff09; Github地址&#xff1a; https://github.com/crossoverJie/JCSproutstar: 12k介绍&#xff1a; 处于萌芽阶段的 Java 核心知识库。 2. Java-Guide &#xff08;Java学习指南&#xff09; Github地址&#xff1a; https:/…

2017 JAVA方向实习要求汇总

微软 阿里巴巴 腾讯 WEB开发 后台开发 百度 软件研发 基础平台研发 JAVA研发 360 企业安全-服务端 手机OS-JAVA CVTE 后台研发 滴滴 软件开发 欢聚时代 Java开发 今日头条 京东 美图 JAVA服务端 JAVA开发 美团点评 后台研发 蘑…

Java有哪些从业方向?分享这9个

现在Java非常热&#xff0c;是因为通过学习Java能够快速的找到工作。那么&#xff0c;Java有哪些从业方向&#xff1f;下面&#xff0c;跟随小千的脚步一起来看看吧。 Java从业方向一&#xff1a;Web开发 Web前端开发工程师是一个很新的职业&#xff0c;是从事Web前端开发工…

Java都有哪些方向可以选择?分享这三个

大家报班学Java一般都是为了找份Java相关的工作&#xff0c;但是在学习完之后很多人都会比较迷茫不知道自己可以找什么样的工作&#xff0c;有哪些岗位是自己可以选择的。所以今天小千就来给大家讲讲Java都有哪些方向可以选择&#xff1f; 学员在学完Java后能够选择的Java岗位…

java方向大数据面试题整理

1.String 和StringBuffer的区别 JAVA平台提供了两个类:String和StringBuffer&#xff0c;它们可以储存和操作字符串&#xff0c;即包含多个字符的字符数据这个String类提供了数值不可改变字符串而这个StringBuffer类提供的字符串进行修改当你知道字符数据要改变的时候你就可以使…

Java研发方向

很多同学在学完Java基本语法后不知道后面要学些什么&#xff0c;也不知道要到底参加哪些的科技竞赛。在这里为大家分析一下Java开发方向到底要学哪些课程。 1、面向对象编程语言Java基础 Java开发方向那么Java语言是必要不可少的一部分&#xff0c;JavaSE&#xff08;Java St…

2022年Java就业方向有哪些?

达到全部需求量的50%以上。而且&#xff0c;Java工程师的薪水相对较高。通常来说&#xff0c;具有3~5年开发经验的工程师&#xff0c;年薪20万是很正常的一个工资。一些重点院校的优秀毕业生能够进入国内一流的IT企业(百度、腾讯、阿里巴巴等)&#xff0c;年薪一般在20万左右&a…

java的工作方向

首先&#xff0c;比较常见的一种是做网站开发。Java语言具有安全性的特点&#xff0c;它的存储分配模型是它防御恶意代码的主要方法之一。基于这一特性&#xff0c;即使Java开发网站的成本比较高也有很多公司会选择用Java语言开发网站。 第二&#xff0c;企业级应用开发。由于J…