1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 支付宝支付成功后要重新登录问题解决小记

支付宝支付成功后要重新登录问题解决小记

时间:2019-06-21 02:06:12

相关推荐

支付宝支付成功后要重新登录问题解决小记

问题:

项目A使用项目B的支付宝配置信息,支付成功后,进入到了回调地址中,回调地址中的业务处理代码页执行成功,但是在跳转到商户页面时,跳转到非指定页面(如登录页面)或跳转到指定页面但是要求登录。

原因:

session丢失

解决方法:

方法一:在蚂蚁开放平台给项目A创建单独的应用,并指定项目A自己的回调地址。

方法二:蚂蚁开放平台的项目B中不指定回调地址。

方法三:在回调地址中携带登录用户的session信息,然后在回调地址中接收登录用户的session信息,判断如果获取不到登录用户的session,则把携带过来的session信息赋值。

下面代码是在回调地址中加上登录用户的session信息,

$aop = new AopClient ();$aop->gatewayUrl = '/gateway.do';$aop->appId = 'your app_id';$aop->rsaPrivateKey = '请填写开发者私钥去头去尾去回车,一行字符串';$aop->alipayrsaPublicKey='请填写支付宝公钥,一行字符串';$aop->apiVersion = '1.0';$aop->signType = 'RSA2';$aop->postCharset='GBK';$aop->format='json';$request = new AlipayTradePagePayRequest ();//组织登录用户的session信息,作为参数传递给回调方法,returnUrl是通过get接收参数,所以传递的参数中不能包含=,因此使用urlencode方法和http_build_query方法处理登录用户的session信息$loginInfo = urlencode(http_build_query(session('login_user_auth')));//设置请求的异步和同步回调地址$request->setNotifyUrl('/index.php?s=/ModuleName/ControllerName/notifyUrl');//异步跳转地址$request->setReturnUrl('/index.php?s=/ModuleName/ControllerName/returnUrl/loginInfo/'.$loginInfo);//同步跳转地址$request->setBizContent("{" ."\"out_trade_no\":\"0320010101001\"," ."\"product_code\":\"FAST_INSTANT_TRADE_PAY\"," ."\"total_amount\":88.88," ."\"subject\":\"Iphone6 16G\"," ."\"body\":\"Iphone6 16G\"" ."}");$result = $aop->pageExecute ( $request); $responseNode = str_replace(".", "_", $request->getApiMethodName()) . "_response";$resultCode = $result->$responseNode->code;if(!empty($resultCode)&&$resultCode == 10000){echo "成功";} else {echo "失败";}

下面代码是在回调地址中对接收到的参数做处理,

/*** 支付宝支付成功的同步回调函数*/public function returnUrl(){//接收支付宝的通知返回参数$arr = $_GET;//获取到传递给回调方法中的登录用户的session信息parse_str(urldecode($arr['loginInfo']),$loginInfo);//销毁掉参数中多余的参数,支付宝验签时指定了需要的参数,其他的都是多余的参数,需要unset掉unset($arr['loginInfo']);Vendor('Alipay.service.AlipayTradeService');$alipaySevice = new \AlipayTradeService($config);$result = $alipaySevice->check($arr);#此处的$arr中不能有支付宝指定验签参数之外的其他参数,否则返回的$result为falseif($result) {//验证成功/**************商户的业务逻辑代码******************/...//判断登录用户的session是否还在$loginSession = session('login_user_auth');//如果不在了,则把传递的session信息赋值if(empty($loginSession)){session('login_user_auth', $loginInfo);}//业务处理完后,跳转到商户的页面$this->success('/ModuleName/ControllerName/ActionName');//$this->redirect('/ModuleName/ControllerName/ActionName');}else {//验证失败echo "fail";}}

如上处理后,就解决了回调方法后跳转到商户页面session丢失的问题。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。