支付宝沙箱关于执行异步回调时session域中的信息丢失,与解决办法

声明:本人小白起步,大学刚毕业,慢慢摸索,不对的地方,希望大佬指正,杠精勿喷,感谢感谢;

最近在做一个网上商城的时候,选择支付宝支付,但是在支付宝成功后,会进行异步回调,处理支付成功结果时候,会发现session失效,本来在session域中的值都为空;在网上看了一下;个人理解为是因为这个session对象是从支付宝那边发送过来的,不是从你浏览器里面发过来的,这个时候session是为空的,所以你根本收不到你原本代码中设置过来的session对象的信息,以至于session对象中取不出来你想要的信息

解决办法:
我查看了一下支付宝的Api接口说明:如图所示
网址:https://opendocs.alipay.com/open/270/105900
支付宝沙箱关于执行异步回调时session域中的信息丢失,与解决办法_第1张图片
进入这个api说明
下拉会看到这个参数
passback_params
支付宝沙箱关于执行异步回调时session域中的信息丢失,与解决办法_第2张图片
参数描述:
公用回传参数,如果请求时传递了该参数,则返回给商户时会回传该参数。支付宝会在异步通知时将该参数原样返回。本参数必须进行UrlEncode之后才可以发送给支付宝。

仔细阅读不难发现,这个参数可以解决异步通知的的时候传入值的问题,
所以以下讲一下如何将session中的值传递到异步通知的里面的步骤

,在第一步:官方下载Java版本的SDK文件中的pay.jsp文件中
支付宝沙箱关于执行异步回调时session域中的信息丢失,与解决办法_第3张图片
如图所示,前面获取浏览器中的session对象中什么值的无所谓,根据自己需求进行获取,拿到想要的值以后,必须要对该值字符串进行URLEncode编码,否则传值错误,上面已经解释的很详细了,再看不懂我也没招了

第二步:回到notify_url.jsp中

支付宝沙箱关于执行异步回调时session域中的信息丢失,与解决办法_第4张图片
获取刚刚设置的参数passback_params的值,然后在进行解码,解码获得到的参数就是你刚刚设置的参数的值,
注意:最多传输512位,超了的话,可以只取其中一个值,然后去数据库中获取这些数据,
问题差不多就解决完了,在异步回调就可以获取到session参数了,

另外补充一下,notify_url.jsp异步回调中不能重定向任何页面,后来问客服才知道这个问题的答案

不会的东西多问,多看,不要着急,慢慢来
,希望对刚接触支付宝的小白有所帮助,感谢!

你可能感兴趣的:(java,支付宝沙箱异步回调,java,session,接口)