支付宝即时到帐接口的集成和使用数组
若是商户想在本身的网站上,集成支付宝的即时到帐接口,首先要申请该服务,申请地址:https://b.alipay.com/order/productDetail.htm?productId=2012051600355662安全
商户系统请求-支付宝响应交互模式,即支付宝接口集成及使用的工做原理:服务器
根据这个原理图,咱们能够把集成支付宝接口的步骤划分以下:网络
产品参考:http://www.jinhusns.com/Products/Download/?type=xcj异步
一. 请求函数
1. 构造请求数据post
商户根据支付宝提供的接口规则,经过程序生成获得签名结果及要传输给支付宝的数据集合。网站
Ø 选定参数加密
Ø 排序生成待签名字符串url
对参数数组里的每个值从a到z的顺序排序,若遇到相同首字母,则看第二个字母,以此类推。排序完成以后,再把全部数组值以“&”字符链接起来,
如:
_input_charset=gbk&out_trade_no=6741334835157966&partner=2088101568338364
&payment_type=1&return_url=http://www.test.com/alipay/return_url.asp&sell
er_email=alipay-test01@alipay.com&service=create_direct_pay_by_user&subje
ct=贝尔金护腕式&total_fee=100
须要注意的是,在请求参数列表中,除去sign、sign_type两个参数外,其余须要使用到的参皆是要签名的参数。(个别接口中参数sign_type也须要参与签名。)
(1)使用冒泡排序对参数数组进行排序:
(2)用“&”字符链接参数组合成待签名的字符串:
Ø 加密生成签名
有三种签名方式:MD5签名、DSA签名和RSA签名。
MD5签名: 须要把私钥直接拼接到待签名字符串后面,造成新的字符串,利用MD5的签名函数对这个新的字符串进行签名运算,从而获得32位签名结果字符串。
DSA、 RSA签名:把待签名字符串与客户的私钥一同放入DSA或RSA的签名函数中进行签名运算,从而获得签名结果字符串。
下面是用MD5签名的代码:
2. 发送请求数据
向支付宝发送请求数据有post和get两种方式,建议使用post 方式,相对比较安全。
二. 通知
支付宝对商户的请求数据处理完成后,会经过两种方式通知商户处理结果,一种是页面跳转同步通知(return_url),另外一种是服务器异步通知(notify_url) 。
服务器异步通知(notify_url)是支付宝服务器主动向商户发送的通知,只有当订单的交易状态改变时才会触发,能够防止因网络等缘由引发的丢单问题。对同步通知和异步通知结果的处理步骤大体相同,只是处理完成后的返回值不一样。
1. 验证签名
在通知返回参数列表中,除去sign、sign_type两个参数外,凡是通知返回回来的参数皆是要签名的参数,具体的签名步骤与请求时相同。
若是新获得的签名与支付宝返回的签名相同,则签名验证成功。
2. 判断是不是支付宝服务器发来的处理结果
为了防止某些人伪造支付宝发来的处理消息,还要验证消息的合法性,有如下三个方法:
3. 判断订单的交易状态及数据处理
当订单的交易状态为“TRADE_FINISHED”或者“TRADE_SUCCESS” ,即为交易成功,接下来就能够根据本身网站的实际状况,进行本身的处理了。在处理数据前必定要先判断订单状态,是否已经处理过,防止重复操做。
4. 返回数据
同步通知(return_url):对返回值没有要求,能够作任意操做。
异步通知(notify_url):程序处理成功后,该页面不能执行页面跳转,且页面上不能有任何字符,要返回“success”7个字符。不然,支付宝会重发处理结果的通知。