当客户发起支付,收到支付通知,咱为了安全,必须对数据进行验签。
不验签的话,万一哪个捣蛋鬼,自己编了条数据发给咱们,那损失可就大了。
结果可想而知,不然也就没有这篇文章了。
验签这个事儿,折腾了我整整一天,
当客户支付成功后,会按照return_url跳转到你设置的连接中,并返回响应的参数,什么app_id啦,trade_no啦等等等等等等。
如果咱要验签的话,大坑出现。
当时,给我个人感觉,这就应该是同步验签。
按照同步的方法,反复验签,永远返回一个false。
与阿里技术经过多轮的友好而又细致的会谈,技术经过多次失败的实验后,最终告诉我,应该用异步验签的方式验签。
参阅异步验签文档得知,需要将返回的字符串中的sign、sign_type剔除才可以
立刻将这俩参数干掉,再次验签。
当我看到验签返回位true的时候,顿时泪奔。
现在回想,估计是自己文档看的不够细致。
得亏阿里技术有耐心,最终问题是解决了。
重新说一下流程吧
收到数据后,先取出来sign参数值
再先他娘的干掉sign和sign_type这俩参数。
然后urldecode数据
再把数据按照abcd升序排序。
最后,准备好你的支付宝公钥,整理好的数据,sign值进行验签,只要你的验签函数没问题,百分比能验签通过。
还有,return_url,notify_url是不可以加参数的。