crmeb微信小程序支付回调失败Cannot modify header information - headers already sent by...

使用crmeb小程序微信支付时发现回调失败,查看日志显示

Cannot modify header information - headers already sent by...

按网上说法在程序开始前使用了 ob_start();

设置了php.ini里面的output_buffering=on;

问题仍未解决

手动模拟微信回调请求发现响应信息中包含了请求头

HTTP/1.0 200 OK
Cache-Control: no-cache, private
Date: Thu, 06 Jul 2023 06:17:31 GMT

<xml>
	<return_code>
		<![CDATA[SUCCESS]]>
	</return_code>
	<return_msg>
		<![CDATA[OK]]>
	</return_msg>
</xml>

查看代码发现回调方法中未使用getContent()方法,添加后请求正常

回调方法是app/api/controller/v1/PayController.php中的notify方法

 public function notify(string $type)
    {
        switch (urldecode($type)) {
            case 'alipay':
                /** @var Pay $pay */
                $pay = app()->make(Pay::class, ['ali_pay']);
                return $pay->handleNotify();
            case 'v3wechat':
                return app()->make(Pay::class, ['v3_wechat_pay'])->handleNotify()->getContent();
            case 'routine':
                //其他方法都调用了getContent();不知道这个为什么没调用
                //return MiniProgramService::handleNotify();
                //添加后运行正常
                return MiniProgramService::handleNotify()->getContent();
            case 'wechat':
                if (sys_config('pay_wechat_type')) {
                    /** @var Pay $pay */
                    $pay = app()->make(Pay::class, ['v3_wechat_pay']);
                } else {
                    /** @var Pay $pay */
                    $pay = app()->make(Pay::class);
                }
                return $pay->handleNotify()->getContent();
            default:
                if (strstr($type, 'allin') !== false) {
                    /** @var Pay $pay */
                    $pay = app()->make(Pay::class, ['allin_pay']);
                    return $pay->handleNotify($type);
                }
        }
    }

另 crmeb\services\app\MiniProgramService.php的handleNotify执行成功没有写return,导致会走最下面的return false导致回调数据已经写入成功,但是回调返回结果是失败

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值