版本是 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))
);
}
}
跟手册里 version < 6.x 版本的处理办法有点区别!
https://workerman.net/doc/webman/components/wechat.html
->server->server()
提示
->server
为私有属性!不要
直接
哈哈,我看到它serve()里有后续的处理(看不明白)如果直接响应成功,会不会有隐患啊?
刚试了下,改成你这种办法就不回调了(收不到回调通知了)!
我照葫芦画瓢,写成
return new \support\Response(200, [], \strval(\json_encode(['code' => 'SUCCESS', 'message' => '成功'], JSON_UNESCAPED_UNICODE)));
也收不到业务回调通知了。return $server->serve()->getContent();
或
return response($server->serve()->getContent());
分别试下
是的,这个与v5.x的用法相似,试了一下,不照!估计是没有
->getContent()
此方法。根据腾讯官方的提示,临时找了一个办法,应急用一下。
成功的直接返回,失败的在做一下判断加上报文再返回。
不知道这种有没有什么未知的bug在后面。
还请各位大佬指导!!
大佬,easywechat6.x如何拿到回调数据啊?