支付宝网页支付(签名)

请求流程中,签名部分是重要的一部分。

也是初学者不容易理解的部分。

最终请求支付宝的链接为:

https://openapi.alipaydev.com/gateway.do?参数1=...&参数2=...&sign_type=RSA2&sign=mZsBK....(很长)

说简单点即是:支付宝网关?必要的参数&签名参数

那么,为什么加签名呢?

作用:确认数据完整性,防止数据传输中被拦截篡改数据。

原理:1/为了更好的说明,假设必要的参数为price=1&num=2;

2/如果只这么请求,就有半路拦截篡改数据的风险;

3/那么,我们把price=1&num=2按照一定规则,生成一个字符串'jifu2387',把这个字符串命名为sign,带进参数里。

4/变为www.zhifubao.com?a=1&b=2&sign='jifu2387'

5/支付宝收到请求后,提取出必要参数a=1&b=2,通过算法将a=1&b=2和sign='jifu2387',做验签(不用关心怎么验签的,总之那边拿到数据和签名,它就能验签),如果验签成功,才会发起交易操作。

6/那么疑问来了,我们通过a=1&b=2生成'jifu2387'的规则,和支付宝那边通过验签的规则,必然有一定的联系。

7/老版本是md5加密,我们和支付宝使用一样的规则即md5。但如果拦截数据,修改数据并使用MD5模仿我们发起请求,仍然有可能。

8/新版已废除md5,使用RSA加密(RSA,RSA2)只是生成方法不同,实质一样。

9/RSA分为公钥和私钥,我们通过官方下载的签名工具,同时生成公钥私钥,注意它俩之间有一定的对应关系。

10/私钥商户自己保留,别人包括支付宝也是不知道的。公钥要上传到支付宝。

11/回到最初的发送支付请求,生成sign签名,就需要使用我们的私钥了,这样生成一个别人无法揣测的字符串,因为私钥只有商家知道(而且还挺长2048个字符)。支付宝用我们上传的公钥,通过算法和我们的签名作比对。可以说签名的生成和验证过程相当复杂。

12/支付宝完成交易后,通知商户,分异步通知和同步通知,这里不多说,异步通知里,我们一样要对支付宝返回的参数(带有签名,这个签名是支付宝生成的),进行对参数的验证(防止返回途中被篡改),如同支付宝验证我们的参数一样。

13/商家请求支付宝,支付宝对商家的参数进行验证;支付宝请求商家,商家同样对支付宝的参数进行验证。

14/那么商家对支付宝发送的参数怎么验证呢?

15/商家上传公钥的时候,支付宝会自动给商家返回一个支付宝公钥,估计支付宝也同时生成了公钥和私钥,把公钥发送给我们,而私钥用来生成发送给我们的签名。

16/这样来看,无论是支付宝验证我们,还是我们验证支付宝,都是一摸一样的。

17/不难理解,我们要使用支付宝公钥,通过算法对返回的数据(剔除签名的数据)和签名进行验签。

end;

 

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值