程序员人生 网站导航

支付宝在线支付接口开发教程与总结

栏目:htmlcss时间:2016-11-22 08:52:07

1.甚么是第3方支付

  所谓第3方支付,就是1些和各大银行签约、并具有1定实力和信誉保障的第3方独立机构提供的交易支持平台。在通过第3方支付平台的交易中,买方选购商品后,使用第3方平台提供的账户进行货款支付,由第3方通知卖家货款到达。

  目条件供第3方支付的机构很多,常见的有支付宝、财付通、快钱、网银在线、易宝支付、云网等各大支付平台。网站如果需要实现第3方支付首先应当向第3方支付平台申请1个账号并签署协议,协议生效后第3方支付平台将为其开通在线支付功能,通进程序将接口集成到网站中。

  为何要使用第3方支付?由于第3方支付平台已与各大银行进行签约,网站主只需要在此平台申请1个账号便可支持几近所有的种类的银行卡信誉卡的交易。

  2.第3方支付原理

  以上扼要说明了支付进程,固然其中省略了1些步骤(比如购物车,定单等),我们重点来看支付流程。

  2.1用户向商城网站发起确认定单的要求

  2.2商城网站接收到要求保存定单数据到数据库或其他存储介质

  2.3返回定单确认页面,页面上应当显示定单金额等信息

  2.4用户确认支付,发起支付要求。注:支付要求是发送到支付网关(比如支付宝、网银在线)而不是发送到商城网站。

  2.5显示支付页面

  2.6用户填写认证信息(账号密码等)提交

  2.7这里有两个步骤1个是扣款成功后页面跳转到支付结果页面(展现给用户),另外一个是支付通知,这两步没有前后顺序可能同时履行,商城网站接收到支付通知后根据验证规则验证信息的有效性,并作出相应的更改操作(例:有效则更改定单为已付款状态,无效则记录非法要求信息)。

  以支付宝为例:如果实现在网站中集成支付宝接口,首先要有1个支付宝账号,接下来向支付宝申请在线支付业务,签署协议。协议生效后有支付宝1方会给网站方1个合作火伴ID,和安全校验码,有了这两样东西就能够依照支付宝接口文档开发支付宝接口了,在上图的几个步骤中只有4和7两个步骤在商城与支付网关之间有信息交互。在步骤4中指将数据发送到支付网关(支付宝),在步骤7中是的通知验证部份,验证网关要求网站某地址,网站按验证规则对信息进行验证记录并作出响应,我们几近在开发任何支付接口时,重点是这两部份的开发,明白支付接口原理,开发支付接口就不难了。

  3.支付宝接口开发

  3.1接口简介与测试

  支付宝目条件供了,担保交易、标准即时到帐、双功能等几种接口,只是在功能上有些差异,网站集成方式是1样的。以标准即时到帐接口为例,在与支付宝签署协议后,还需要几个步骤才能完成集成。

  选择“我要自助集成”接下来会看到的链接,点击下载技术文档。

  在下载后的文件中有标准支付宝交易服务接口、商家工具、接口集成指南等接文档,另外还有几种语言写的demo.我们可以根据接口文档按规则全新开发,也能够再demo基础上修改集成到网站,需要注意的是开发支付接口需要在公网(服务器必须可以通过外网访问)才可以完成全部调试进程,如果服务器在外网访问不到,则没法接收到支付通知。

  看1下demo中每一个文件的作用:

  这里已下载好了(见资源目录pay文件夹),为了便于调试增加修改了若干文件,并增加了1张数据表保存定单信息,我们修改1下配置文件完成1个测试进程。

  alipay_config.php是基础信息配置文件,我们需要将在支付宝后台获得的PID与Key写入到配置文件中。

  配置项:

  其中方框内的数据是我们需要重点修改的。支付通知地址与返回地址的区分,前面已提到,在步骤7中有两项:支付结果页面与支付通知信息,支付结果页面是用户支付完成后会自动跳转到这个地址这里是返回地址($return_url)。

  支付通知地址一样是用户支付完成后,支付宝会要求该地址($notify_url),但是支付通知是支付宝服务器直接要求,不会被用户看到。这两个地址必须是以http开头的完全路径格式为了完成测试进程,这里已将/pay/alipay/notify_url.php改写,将$notify_url设置为可访问到此文件的URL便可。这几项配置好后再根据数据库脚本(pay/orders.sql)创建1张数据表。并根据数据库的配置信息修改mysql_config.php.通过对支付宝提供的demo做简单修改就能够完成创建支付要求(步骤4)了,这里更改了支付首页等页面(见源码包pay目录)。我们先测试1下:

  数据库中增加了1条“定单信息”.

  如果点击“确认支付”按钮或确认支付 链接将会跳转到支付宝页面,点击按钮时通过表单POST方式将信息提交到支付网关,由于支付要求数据无需让用户看到,这里都写在隐藏域中了。确认支付 链接是通过URL传参,由于支付宝接口允许以POST或GET方式提交,所以两种方式都可以。把参数提交给支付网关后,页面跳转到到支付页面。我们看到以下图所示:

  我们看到支付宝为我们提供了两种支付方式,1种是通过支付宝账户支付,另外一种是通过银行卡支付。例如选择使用银行卡支付,填写邮箱或手机号跳转到以下页面:

  我们开单支付宝几近支持所有的银行卡支付,同时有信誉卡和网点方式付款,选择对应的银行下1步按提示付款便可。付款完成后页面会返回到我们在配置文件中配置的$return_url地址,同时“定单状态”也会产生改变。

  注:测试时如果没有在外网测试(即支付通知地址没法在外网访问)则支付通知没法被要求到,没法自动完成定单状态的修改。

  3.2支付宝接口规范与代码分析

  支付宝接口规范可参考/pay/doc/标准支付宝交易服务接口(专用于防钓渔网站)。Pdf,里面已有了比较详细的说明。

  3.2.1如何创建支付要求

  在前面的测试中我们点击了“确认支付”将信息将信息提交到了支付宝的支付网关,我们可以思考1下应当发送哪些参数给支付网关。关于要求参数列表可以参考标准支付宝交易服务接口(专用于防钓渔网站)。Pdf中的3.2.2.需要注意的是其实不是我们把这些参数原封不动的提交到支付宝就能够了,为了保证数据安全支付宝目前使用的是MD5签名避免数据篡改机制。

  在提交数据前需要将需要提交的数据以1定规则(见接口文档)组装成字符串,加上安全校验码(Key)组成1个新字符串,通过MD5生成1个32字节的签名,我们提交支付要求时还需要把这个签名也提交过去。看1下表单源码

  支付宝接收到参数后会进行验证要求参数的合法性,验证无误后将显示支付页面,否则提示毛病。

  3.2.2 如何验证支付通知

  在用户支付完成后,支付宝会要求网站支付通知地址(这个地址应在创建支付要求时作为参数传递过去)。返回参数列表参见标准支付宝交易服务接口(专用于防钓渔网站)。Pdf3.3.1.支付宝的返回数据中一样有1个签名串(采取和支付要求一样的签名方式),在支付通知文件中首先要对数据进行签名验证。除验证签名,还需要将参数中的notify_id提交到支付宝的验证网关支付宝系统这个通知的真实性,通知验证。支付宝系统判断通知是不是是自己发送,如果是以字符串格式返回 true,否则返回false,我们通过验证服务器返回的数据验证要求的真实性,如果都验证通过则可以进行更改定单数据、给用户发送邮件通知等操作。关于验证签名可以看1下通知文件中的源码。带demo中将参数中的notify_id提交到支付宝是通过POST方式提交并获得返回数据,代码片断:

  这里重点就是fsockopen函数,在发送电子邮件时我们已接触过,通过此函数打开套接字连接,类似于之前学过的fopen函数返回的是1个文件句柄,以后可使用文件函数( fgets()、fgetss()、fputs()、fclose() feof()等)对其进行操作,代码中使用了fputs()(同fwrite())函数,写入数据来摹拟表单以POST方式提交数据,最后通过fgets()函数获得返回的数据保存到数组中,最落后行验证,具体参照源码。

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐