在使用微擎作为开发框架进行微信相关的功能开发时,微信支付是经常用到的开发场景。
在微信支付成功后会通过site.php的payResult方法获取支付返回信息。
以下是返回信息的内容:
Array ( [weid] => 1 [uniacid] => 1 [result] => success [type] => wechat [from] => return [tid] => 120190307100444169206 [uniontid] => 2019030710044600001464806621 [user] => opMGP1hN3nQzmnwYkGNtAiSrWDCI [fee] => 0.01 [tag] => Array ( [acid] => 1 [uid] => 1 [transaction_id] => 4200000280201903076920367458 ) [is_usecard] => 0 [card_type] => 0 [card_fee] => 0.01 [card_id] => 0 )
文档里面给出了范例文档:
//该代码片断在/framework/builtin/recharge/site.php中 public function payResult($params) { //一些业务代码 //根据参数params中的result来判断支付是否成功 if ($params['result'] == 'success' && $params['from'] == 'notify') { //此处会处理一些支付成功的业务代码 } //因为支付完成通知有两种方式 notify,return,notify为后台通知,return为前台通知,需要给用户展示提示信息 //return做为通知是不稳定的,用户很可能直接关闭页面,所以状态变更以notify为准 //如果消息是用户直接返回(非通知),则提示一个付款成功 //如果是JS版的支付此处的跳转则没有意义 if ($params['from'] == 'return') { if ($params['result'] == 'success') { message('支付成功!', '../../app/' . url('mc/home'), 'success'); } else { message('支付失败!', '../../app/' . url('mc/home'), 'error'); } } }
但是对于其中$params[‘from’]信息通知的来源类型没有说的很详细,我们单就通知print_r($params),获取到的信息,实际看到的都是return。其实,在我看到到return之前系统已经进行过一次后台通知,也是通过payResult方法获取。
下面通过一个方法来验证,我们写了个方法来截取$params[‘from’]。
pdo_insert('aiunv_log',array('info'=>$params['from']));
当我们支付完成的,系统便在后端进行了notify通知。
停留在上面的页面,我们去数据库中看记录到了notify的值:
当我们点击完成,返回到场景界面时,系统又会推送一个前端通知。这时记录到的便是return了。
这也就是为什么我们如果完成返回看到的都是return的原因,notify为后台通知,return为前台通知,需要给用户展示提示信息,return做为通知是不稳定的,用户很可能直接关闭页面,所以状态变更以notify为准,如果消息是用户直接返回(非通知),则提示一个付款成功,这样的好处就是不用担心用户意外关闭界面。
来源:https://www.aiunv.com/news/experience/112.html
其实模块中的public function payResult方法的处理方式完全可以参考/framework/builtin/recharge/site.php中对应方法处理方式
如果本文对你有帮助,欢迎打赏本站