第三方支付平台详解:支付宝、财付通等支付机构的功能与申请流程
文章来自:脚本之家

看文章前先说几句:群帖第三篇是小编分享的视频教程(视频+密码或者视频+朋友圈)。有需要的可以去看看。
1.什么是第三方支付?
所谓第三方支付,是指一些与各大银行签约、有一定实力和信誉保证的第三方独立机构提供的交易支持平台。在通过第三方支付平台进行的交易中,买家购买商品后,使用第三方平台提供的账户支付商品,第三方通知卖家商品到货。
目前有很多机构提供第三方支付。常见的有支付宝、财付通、快钱、网银、易宝支付、云网等各大支付平台。网站如需开展第三方支付,应首先向第三方支付平台申请账户并签订协议。协议生效后,第三方支付平台将开通在线支付功能,并通过程序将接口集成到网站中。
为什么要使用第三方支付?由于第三方支付平台与各大银行签订了合同,网站所有者只需在该平台申请一个账户即可支持几乎所有类型的银行卡和信用卡交易。
2.第三方支付原理
以上简单介绍了付款流程。当然,有些步骤(比如购物车、下单等)就省略了。让我们重点关注付款流程。
2.1 用户向商城网站发起订单确认请求
2.2 商城网站收到请求将订单数据保存到数据库或其他存储介质
2.3 返回订单确认页面。页面上应显示订单金额和其他信息。
2.4 用户确认付款并发起付款请求。注:支付请求发送至支付网关(如支付宝、网银)而非商城网站。
2.5 显示支付页面
2.6 用户填写认证信息(账户密码等)并提交
2.7 这里有两个步骤。一是扣款成功后跳转到支付结果页面(显示给用户),二是支付通知。这两个步骤可以同时执行,没有特定的顺序。商城网站收到付款通知后,将按照验证流程进行验证。规则验证信息的有效性并做出相应的更改操作(例如:如果有效,则将订单更改为已付款状态,如果无效,则记录非法请求信息)。
以支付宝为例:如果您想将支付宝接口集成到您的网站中,您首先必须拥有支付宝账户,然后向支付宝申请在线支付业务并签署协议。协议生效后,支付宝将给予网站合作伙伴ID和安全验证码。有了这两件事,就可以按照支付宝接口文档来开发支付宝接口了。上面的步骤只有4和7。每个步骤都涉及商城和支付网关之间的信息交换。第4步是发送数据到支付网关(支付宝),第7步是通知验证部分。验证网关请求网站的某个地址,网站根据验证规则对信息进行验证、记录并响应。我们在开发几乎任何支付接口的时候,重点都是这两部分的开发。如果了解了支付接口的原理,那么开发支付接口就不难了。
3.支付宝接口开发
3.1 接口介绍及测试
支付宝目前提供担保交易、标准即时支付、双重功能等多种接口。只是功能上有一些区别,但网站集成方法是一样的。以标准即时账户接口为例,与支付宝签订协议后,需要几个步骤才能完成集成。
选择您接下来将在“我想要自助服务集成”下看到的链接,然后单击下载技术文档。
下载的文件包含标准的支付宝交易服务接口、商户工具、接口集成指南等接口文档,以及多种语言编写的demo。我们可以根据接口文档按照规则开发新的,也可以根据demo修改。集成到网站时需要注意的是,支付接口需要在公网开发(服务器必须可以通过外网访问)才能完成整个调试过程。如果外网无法访问服务器,则无法收到支付通知。
看看demo中各个文件的作用:
这里已经下载了(参见资源目录中的pay文件夹)。为了方便调试,增加和修改了几个文件,并增加了一个数据表来保存订单信息。我们来修改一下配置文件来完成一个测试过程。
alipay_config.php 是基本信息配置文件。我们需要将支付宝后端获取到的PID和Key写入到配置文件中。
配置项:
框中的数据就是我们需要重点修改的。付款通知地址和退货地址的区别前面已经提到过。第7步有两项:支付结果页面和支付通知信息。用户完成支付后,支付结果页面会自动跳转到该地址。这是返回地址 ($return_url)。
支付通知地址也是用户完成支付后支付宝请求的地址($notify_url)。但支付通知是支付宝服务器直接请求的,用户不会看到。这两个地址必须是以http开头的完整路径格式。为了完成测试过程,这里重写了/pay/alipay/notify_url.php,并将$notify_url设置为可以访问该文件的URL。配置完这些项目后,根据数据库脚本(pay/orders.sql)创建数据表。并根据数据库的配置信息修改mysql_config.php。通过简单修改支付宝提供的demo,即可完成支付请求的创建(步骤4)。这里对支付首页及其他页面进行了更改(参见源码包的支付目录)。我们先来测试一下:
“订单信息”被添加到数据库中。
如果您点击“确认付款”按钮或确认付款链接,您将跳转到支付宝页面。当您点击按钮时,信息将通过POST形式提交到支付网关。由于支付请求数据不需要被用户看到,所以被写在隐藏字段中。 。确认支付链接是通过URL传递的。由于支付宝接口允许采用POST或GET方式提交,因此这两种方式都可以接受。向支付网关提交参数后,页面跳转至支付页面。我们看到如下图:
我们看到支付宝为我们提供了两种支付方式,一种是通过支付宝账户,一种是通过银行卡。例如选择银行卡支付,填写您的邮箱或手机号码,跳转到以下页面:
我们的计费支付宝支持几乎所有银行卡付款,以及信用卡和分行付款方式。选择对应的银行,按照提示进行支付。支付完成后,页面会返回到我们在配置文件中配置的$return_url地址,同时“订单状态”也会发生变化。
注意:如果测试时没有外网测试(即外网无法访问支付通知地址),则无法请求支付通知,也无法自动修改订单状态。
3.2 支付宝接口规范及代码分析
支付宝接口规范请参考/pay/doc/标准支付宝交易服务接口(反钓鱼网站专用)。 pdf,里面已经有比较详细的说明了。
3.2.1 如何创建付款请求
在之前的测试中,我们点击“确认付款”将信息提交到支付宝的支付网关。我们可以思考应该向支付网关发送哪些参数。请求参数列表请参考标准支付宝交易服务接口(反钓鱼网站专用)。 3.2.2 在 PDF 中。需要注意的是,我们并不只是需要将这些参数原封不动地提交给支付宝。为了保证数据安全,支付宝目前使用MD5签名来防止数据篡改。
在提交数据之前,需要将要提交的数据按照一定的规则组装成字符串(参见接口文档),添加安全校验码(Key)形成新的字符串,并通过MD5。我们提交 提出付款请求时也需要提交此签名。看一下表单源代码
支付宝收到参数后,会验证请求参数的合法性。验证通过后,会显示支付页面,否则会提示错误。
3.2.2 如何验证付款通知
用户支付完成后,支付宝会请求网站的支付通知地址(创建支付请求时应将此地址作为参数传递)。返回参数列表请参考标准支付宝交易服务接口(反钓鱼网站专用)。 PDF3.3.1。支付宝的返回数据中也有一个签名字符串(使用与支付请求相同的签名方式)。在付款通知文件中,数据必须首先经过签名和验证。除了验证签名之外,参数中的notify_id还需要提交给支付宝的验证网关支付宝系统,以验证通知的真实性和通知验证。支付宝系统判断该通知是否由支付宝系统自行发送。如果是字符串格式则返回true,否则返回false。我们通过验证服务器返回的数据来验证请求的真实性。如果两者都经过验证,我们可以更改订单数据并向用户发送电子邮件。通知和其他操作。关于验证签名,您可以查看通知文件中的源代码。 demo中将参数中的notify_id通过POST提交给支付宝,并获取返回数据。代码片段:
这里重点是fsockopen函数。我们在发送电子邮件时就已经接触过它。通过该函数打开套接字连接。与我们之前学过的fopen函数类似,它返回一个文件句柄。然后就可以使用文件函数(fgets()、fgetss()、fputs()、fclose() feof()等)对其进行操作,代码中使用fputs()(与fwrite()相同)函数来进行操作写入数据模拟POST方式的表单提交数据,最后通过fgets()函数获取返回的数据并保存到数组中,最后进行验证,具体请参考源码。