zoukankan      html  css  js  c++  java
  • 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);
    	}
    

      

  • 相关阅读:
    Ibatis 使用心得
    java.net.ConnectException: Connection timed out
    ZK 最少限度加载页面js文件
    JAVA 获取网页流
    ZK 页面间参数传递
    删除 TOMCAT 上次关闭遗留下来的 SESSION 缓存
    Java 异常java.lang.IllegalArgumentException: Illegal group reference
    ZK textbox Constraint验证
    zk textbox 更改字体大小及高度
    通过http管理solrcore
  • 原文地址:https://www.cnblogs.com/ouruola863/p/10185619.html
Copyright © 2011-2022 走看看