在线支付接口详解

当咱们在商城购物时,可能会用到在线支付,你会发现不管你是哪一个银行的银行卡接口中都会支持,在作项目开 发时,也常常会用到支付接口,咱们固然但愿支持全部的网银,但这须要咱们针对每一个银行开发一套接口吗?不是不能够而是不必,使用第三方的支付接口就能够 知足,第三方支付平台已经与各大银行进行签约,网站主只须要在此平台申请一个帐号便可支持几乎全部的种类的银行卡信用卡的交易,固然是可能支付少许的手续 费的。什么是第三方支付呢?php

 

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

    目前提供第三方支付的机构不少,常见的有支付宝、财付通、快钱、网银在线、易宝支付、云网等各大支付平台。网站若是须要实现第三方支付首先应该向 第三方支付平台申请一个帐号并签署协议,协议生效后第三方支付平台将为其开通在线支付功能,经过程序将接口集成到网站中。

第三方支付原理图:
在线支付原理图
以上简要说明了支付过程,固然其中省略了一些步骤(好比购物车,订单等),咱们重点来看支付流程。

1用户向商城网站发起确认订单的请求

2商城网站接收到请求保存订单数据到数据库或其余存储介质

3返回订单确认页面,页面上应该显示订单金额等信息

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

5显示支付页面

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

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

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

    支付宝目前提供了,担保交易、标准即时到账、双功能等几种接口,只是在功能上有些差别,网站集成方式是同样的。以标准即时到账接口为例,在与支付宝签署协议后,还须要几个步骤才能完成集成。
支付宝接口集成步骤
进入支付宝后台在商家服务菜单下有两个连接:
支付宝商家服务
分别能够查询到PID和Key,依次点击个人产品,技术服务将会显示:
自助集成支付宝
选择“我要自助集成”接下来会看到下载技术文档的连接,点击下载技术文档。

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

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

  ├alipay_notify.php┈┈┈┈支付宝通知处理类文件

  ├alipay_service.php ┈┈┈支付宝请求处理类文件

  ├alipay_config.php┈┈┈┈┈┈基础信息配置文件

  ├index.php┈┈┈┈┈┈┈┈┈┈快速付款入口模板文件

  ├notify_url.php ┈┈┈┈┈┈┈服务器异步通知页面文件

  ├return_url.php ┈┈┈┈┈┈┈页面跳转同步通知文件

这里已经下载好了(会附加在本文附件中),为了便于调试增长修改了若干文件,并增长了一张数据表保存订单信息(见附件),咱们修改一下配置文件完成一个测试过程。

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)了,这里更改了支付首页等 页面(见附件pay目录)。咱们先测试一下:

下订单页面
点击“下订单”按钮

确认订单页面
根据上图的流程如今已经走到了步骤3,此时已经生成了订单号(为了便于测试使用了时间戳做为订单号),而且将订单信息写入到数据库。咱们看一下数据库:
订单页面
数据库中增长了一条“订单信息”。

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

支付宝支付页面

咱们看到支付宝为咱们提供了两种支付方式,一种是经过支付宝帐户支付,另外一种是经过银行卡支付。例如选择使用银行卡支付,填写邮箱或手机号便可跳转到下一 个页面进行选择银行,支付宝几乎支持全部的银行卡支付,同时有信用卡和网点方式付款,选择对应的银行下一步按提示付款便可。付款完成后页面会返回到咱们在 配置文件中配置的$return_url地址,同时“订单状态”也会发生改变。

付款成功后订单状态

注:测试时若是没有在外网测试(即支付通知地址没法在外网访问)则支付通知没法被请求到,没法自动完成订单状态的修改。
      也有的开发者在浏览器的跳转页面作订单状态的更改(不推荐这样作,由于浏览器端服务器没法控制,好比忽然断网,浏览器关闭等)

支付宝接口规范可参考附件和示例文件,里面已经有了比较详细的说明,好比要对支付通知进行响应等。

如何建立支付请求?

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

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

支付宝支付表单

支付宝接收到参数后会进行验证请求参数的合法性,验证无误后将显示支付页面,不然提示错误。

如何验证支付通知?

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

支付宝处理支付通知代码

mysql

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

 支付宝接口示例与文档数据库

相关文章
相关标签/搜索