ThinkPHP5异步通知SDK详解
来源:互联网 发布:淘宝店铺购买平台 编辑:程序博客网 时间:2024/06/05 15:06
最近写了一个ThinkPHP5的微信支付SDK, 感觉微信官方SDK有很多值得学习的地方, 其中异步通知算是写的比较巧妙的, 下面就做一下分析:
首先看一下我写的SDK的使用方法:
$notify = new \wxpay\Notify();$notify->Handle();
由此, 我们需要去看一下 extend\wxpay\Notify.php, 我们看到
class Notify extends \WxPayNotify{ public function NotifyProcess($data, &$msg) { // 1.校检参数 ... // 2.微信服务器查询订单,判断订单真实性(可不需要) ... // 3.去本地服务器检查订单状态(强烈建议需要) ... // 4.检查订单状态 ... }}
这里我们继承了 WxPayNotify类 并写了一个主函数 NotifyProcess, 主函数中调用了很多方法, 对数据校检, 对订单处理等
那么, 我们回头看, notify->Hanle() 到底做了什么, 我们为什么要写 NotifyProcess() 方法??
打开 extend\wxpay\lib\WxPayNotify.php, 我们看到Handle方法
final public function Handle($needSign = false){ $msg = "OK"; //当返回false的时候,表示notify中调用NotifyCallBack回调失败获取签名校验失败,此时直接回复失败 $result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg); if($result == false){ $this->SetReturn_code("FAIL"); $this->SetReturn_msg($msg); $this->ReplyNotify(false); return; } else { //该分支在成功回调到NotifyCallBack方法,处理完成之后流程 $this->SetReturn_code("SUCCESS"); $this->SetReturn_msg("OK"); } $this->ReplyNotify($needSign);}
由此我们看到, 其主要是调用了 WxpayApi::notify() 并传递了回调函数, 如果返回结果是false, 则回复微信服务器失败, 如果是true, 则回复成功;
我们进入WxpayApi::notify() 看一下
public static function notify($callback, &$msg){ try { //获取通知的数据 $xml = $GLOBALS['HTTP_RAW_POST_DATA']; // 1.数据签名校检 // 2.转化为数组 $result = WxPayResults::Init($xml); } catch (WxPayException $e){ $msg = $e->errorMessage(); return false; } return call_user_func($callback, $result);}我们看到这段代码, 主要是获取了通知的数据, 并通过WxPayResults::Init()方法对数据进行了校检和转化为数组, 如果通过, 则将数据传递给回调函数
因此, 我们需要到回调函数 WxPayNotify类的NotifyCallBack()方法看一下
final public function NotifyCallBack($data){ $msg = "OK"; $result = $this->NotifyProcess($data, $msg); if($result == true){ $this->SetReturn_code("SUCCESS"); $this->SetReturn_msg("OK"); } else { $this->SetReturn_code("FAIL"); $this->SetReturn_msg($msg); } return $result;}我们看到, 其主要是调用了NotifyProcess()方法, 由此我们明白, 原来一切都在这个NotifyProcess()方法里, 所以我们才要继承WxPayNotify类,并重写了NotifyProcess()
呃...说到这里大家应该都明白了, 不知道是不是分析的到位, 如有问题请留言!
阅读全文
1 0
- ThinkPHP5异步通知SDK详解
- IOS 通知+异步通知详解
- thinkphp5引入sdk
- Linux的fasync驱动异步通知详解
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 异步通知
- 深度学习之基础模型-NIN
- JAVA Arrays.sort()和Collectons.sort() 原理分析
- web.xml的某些知识点以及在springmvc下的某些配置
- Minimum
- 1071. 小赌怡情(15) PAT
- ThinkPHP5异步通知SDK详解
- (五)面向对象高级编程
- MaximumAverageSubarray
- 梯度下降(Gradient Descent)小结
- 命令行小程序
- [建站日记]3day 回到命令行界面
- FPGA加载bit文件可以工作,加载mcs不能工作的原因
- 运算符的使用
- Windows Practice_Dll&Hook_消息钩子