EasyWechat V6.x支付回调不停息

liziyu

版本是 EasyWechat V6.x最新版的,结合是webman1.3.x版本。

其中支付环节没有问题,回调也可以正常拿到数据,但回调通知一直不停通知。

// 处理支付结果事件
            $server->handlePaid(function ($message) {
                // $message 为微信推送的通知结果,详看微信官方文档
                file_put_contents(__DIR__ . '/notify_result.txt',
                    date('Y-m-d H:i:s') . ':' . var_export($message, true));
                echo '3'."\n";
                // 微信支付订单号 $message['transaction_id']
                // 商户订单号 $message['out_trade_no']
                // 商户号 $message['mchid']
                // 具体看微信官方文档...
                // 进行业务处理,如存数据库等...
            });

            return $server->serve();

隐约感觉问题出在 $server->serve(); 这里对回调的响应上。应该是 webman的Response与之不兼容问题,由于水平所限不知从何下手修改,还请大佬出的帮忙!

下面附上 EasyWechat 的serve()的代码!

    /**
     * @throws \EasyWeChat\Kernel\Exceptions\InvalidArgumentException
     * @throws \EasyWeChat\Kernel\Exceptions\RuntimeException
     */
    public function serve(): ResponseInterface
    {
        $message = $this->getRequestMessage();

        try {
            $defaultResponse = new Response(200, [], \strval(\json_encode(['code' => 'SUCCESS', 'message' => '成功'], JSON_UNESCAPED_UNICODE)));
            $response = $this->handle($defaultResponse, $message);

            if (!($response instanceof ResponseInterface)) {
                $response = $defaultResponse;
            }

            return ServerResponse::make($response);
        } catch (\Exception $e) {
            return new Response(
                500,
                [],
                \strval(\json_encode(['code' => 'ERROR', 'message' => $e->getMessage()], JSON_UNESCAPED_UNICODE))
            );
        }
    }
2600 6 3
6个回答

liziyu

跟手册里 version < 6.x 版本的处理办法有点区别!
https://workerman.net/doc/webman/components/wechat.html

  • 暂无评论
admin

->server->server()

  • liziyu 2022-04-12

    提示 ->server为私有属性!

nitron

不要

return $server->serve();

直接

return new Response(200, [], 'success');
  • liziyu 2022-04-13

    哈哈,我看到它serve()里有后续的处理(看不明白)如果直接响应成功,会不会有隐患啊?

  • liziyu 2022-04-13

    刚试了下,改成你这种办法就不回调了(收不到回调通知了)!
    我照葫芦画瓢,写成return new \support\Response(200, [], \strval(\json_encode(['code' => 'SUCCESS', 'message' => '成功'], JSON_UNESCAPED_UNICODE))); 也收不到业务回调通知了。

banro512

return $server->serve()->getContent();

return response($server->serve()->getContent());

分别试下

  • liziyu 2022-04-13

    是的,这个与v5.x的用法相似,试了一下,不照!估计是没有->getContent()此方法。

liziyu

根据腾讯官方的提示,临时找了一个办法,应急用一下。

$server->serve();
 return response();

成功的直接返回,失败的在做一下判断加上报文再返回。
不知道这种有没有什么未知的bug在后面。
还请各位大佬指导!!

  • 暂无评论
test

大佬,easywechat6.x如何拿到回调数据啊?

  • 暂无评论
年代过于久远,无法发表回答
🔝