[微信] PHP 官方支付 sdk 在 PHP7 下回调异常及解决方法

我司有两台服务器,在其中一台升级php7后支付回调就时好时坏,经过排查后发现是官方的SDK的坑

public static function notify($callback, &$msg)
    {
        //获取通知的数据
        $xml = $GLOBALS['HTTP_RAW_POST_DATA']

        //如果返回成功则验证签名
        try {
            $result = WxPayResults::Init($xml);
        } catch (WxPayException $e){
            $msg = $e->errorMessage();
            return false;
        }

        return call_user_func($callback, $result);
    }

官方的获取通知使用的是HTTP_RAW_POST_DATA这个全局常量,然而php7中已经将这个移除了,所有回调就会报异常这个未定义从而不能向下执行。

public static function notify($callback, &$msg)
    {
        //获取通知的数据
        //$xml = isset($GLOBALS['HTTP_RAW_POST_DATA']) ? $GLOBALS['HTTP_RAW_POST_DATA'] : file_get_contents( 'php://input' );
        $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);
    }

查看php官方文档建议使用 file_get_contents( 'php://input' ); 就可解决了!

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 5

php7移除的原因是什么呢?

7年前 评论

标题建议加上“微信”

7年前 评论

官方文档已经fixed并且更新,欢迎再次使用!感谢您对我们问题的反馈,谢谢!

6年前 评论

找了一下午的原因,就是没找到问题,最后想起来换服务器的时候,用了php7.0,也是一个坑吧

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!