call_user_func函数

call_user_func函数的用法:
class WxPayNotify extends WxPayNotifyReply
{
   /**
    * 
    * 回调入口
    * @param bool $needSign  是否需要签名输出
    */
   final public function Handle($needSign = true)
   {
      //当返回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);
   }
   
   /**
    * 
    * 回调方法入口,子类可重写该方法
    * 注意:
    * 1、微信回调超时时间为2s,建议用户使用异步处理流程,确认成功之后立刻回复微信服务器
    * 2、微信服务器在调用失败或者接到回包为非确认包的时候,会发起重试,需确保你的回调是可以重入
    * @param array $data 回调解释出的参数
    * @param string $msg 如果回调处理失败,可以将错误信息输出到该方法
    * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调
    */
   public function NotifyProcess($data, &$msg)
   {
      //TODO 用户基础该类之后需要重写该方法,成功的时候返回true,失败返回false
      return true;
   }
   
   /**
    * 
    * notify回调方法,该方法中需要赋值需要输出的参数,不可重写
    * @param array $data
    * @return true回调出来完成不需要继续回调,false回调处理未完成需要继续回调
    */
   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;
   }
   
   /**
    * 
    * 回复通知
    * @param bool $needSign 是否需要签名输出
    */
   final private function ReplyNotify($needSign = true)
   {
      //如果需要签名
      if($needSign == true && 
         $this->GetReturn_code($return_code) == "SUCCESS")
      {
         $this->SetSign();
      }
      WxpayApi::replyNotify($this->ToXml());
   }
}
其中的静态方法:notify为下面的方法:
 
/**
    * 
    * 支付结果通用通知
    * @param function $callback
    * 直接回调函数使用方法: notify(you_function);
    * 回调类成员函数方法:notify(array($this, you_function));
    * $callback  原型为:function function_name($data){}
    */
public static function notify($callback, &$msg)
{
   //获取通知的数据
   $xml = file_get_contents('php://input');
   //如果返回成功则验证签名
   try {
      $result = WxPayResults::Init($xml);
   } catch (WxPayException $e){
      $msg = $e->errorMessage();
      return false;
   }
   
   return call_user_func($callback, $result);
}
其中的call_user_func($callback,$result)函数 把第一个参数作为回调函数调用;
而上面的类中的$result = WxpayApi::notify(array($this, 'NotifyCallBack'), $msg)中的
第一个参数为一个数组:array($this,'NotifyCallBack'),含义是:把当前的类中的方法
名为NotifyCalBack的方法作为回调函数来调用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值