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