微擎开发之微信支付payResult获取通知notify和return说明

在使用微擎作为开发框架进行微信相关的功能开发时,微信支付是经常用到的开发场景。

在微信支付成功后会通过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中对应方法处理方式

支付宝扫码打赏 微信扫码打赏

如果本文对你有帮助,欢迎打赏本站

喜欢 ()or分享
    匿名评论
  • 评论
人参与,条评论