支付宝即时到账接口的集成和使用
如果商户想在自己的网站上,集成支付宝的即时到账接口,首先要申请该服务,申请地址:https://b.alipay.com/order/productDetail.htm?productId=2012051600355662
商户系统请求-支付宝响应交互模式,即支付宝接口集成及使用的工作原理:
根据这个原理图,我们可以把集成支付宝接口的步骤划分如下:
产品参考:http://www.jinhusns.com/Products/Download/?type=xcj
一. 请求
1. 构造请求数据
商户根据支付宝提供的接口规则,通过程序生成得到签名结果及要传输给支付宝的数据集合。
Ø 选定参数
Ø 排序生成待签名字符串
对参数数组里的每一个值从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个字符。否则,支付宝会重发处理结果的通知。