• PHP7放弃大礼包(微信支付回调签名错误)


    php7不再支持HTTP_RAW_POST_DATA,微信支付$GLOBALS[‘HTTP_RAW_POST_DATA’]获取不到数据

      php7不再支持HTTP_RAW_POST_DATA
      原来系统一些地方,
      使用$GLOBALS[‘HTTP_RAW_POST_DATA’]来获取数据,
      在php7里无法获取了。
      解决的方法也很简单,
      只要使用php://input来代替就行。
      比如
      $data = $GLOBALS['HTTP_RAW_POST_DATA'];
      改为
      $data = file_get_contents('php://input');

    最直接的后果就是微信支付回调时的签名验证失败,在WxPay.php中的:

     	/**
     	 * 
     	 * 支付结果通用通知
     	 * @param function $callback
     	 * 直接回调函数使用方法: notify(you_function);
     	 * 回调类成员函数方法:notify(array($this, you_function));
     	 * $callback  原型为:function function_name($data){}
     	 */
    	public static function notify($config, $callback, &$msg)
    	{
    
    		if (!isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
    			# 如果没有数据,直接返回失败
    			return false;
    		}
    		//如果返回成功则验证签名
    		try {
    			//获取通知的数据
    			$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
    			$result = WxPayNotifyResults::Init($config, $xml);
    		} catch (WxPayException $e){
    			$msg = $e->errorMessage();
    			return false;
    		}
    		
    		return call_user_func($callback, $result);
    	}
    

      

    $GLOBALS['HTTP_RAW_POST_DATA']将获取不到值,因此会直接返回,用file_get_contents('php://input');代替即可,修改后的内容如下:
     	/**
     	 * 
     	 * 支付结果通用通知
     	 * @param function $callback
     	 * 直接回调函数使用方法: notify(you_function);
     	 * 回调类成员函数方法:notify(array($this, you_function));
     	 * $callback  原型为:function function_name($data){}
     	 */
    	public static function notify($config, $callback, &$msg)
    	{
    		if (!isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
    			$GLOBALS['HTTP_RAW_POST_DATA'] = file_get_contents("php://input");//这里在php7下不能获取数据,使用 php://input 代替
    		}
    		if (!isset($GLOBALS['HTTP_RAW_POST_DATA'])) {
    			# 如果没有数据,直接返回失败
    			return false;
    		}
    		//如果返回成功则验证签名
    		try {
    			//获取通知的数据
    			$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
    			$result = WxPayNotifyResults::Init($config, $xml);
    		} catch (WxPayException $e){
    			$msg = $e->errorMessage();
    			return false;
    		}
    		
    		return call_user_func($callback, $result);
    	}
    

      

  • 相关阅读:
    POJ 1631 Bridging signals
    POJ 1451 T9
    企业应用架构模式阅读笔记3
    论面向服务架构设计及其应用
    软件质量属性-可测试性
    企业应用架构模式阅读笔记2
    企业应用架构模式阅读笔记1
    QTP安装与破解
    Android studio打不开,双击没有反应,已解决
    hibernate框架的基本原理及实例
  • 原文地址:https://www.cnblogs.com/ouruola863/p/10185619.html
Copyright © 2020-2023  润新知