easywechat 6.x 回调拿不到数据
$server = $app->getServer();
$server->handlePaid(function (Message $message, \Closure $next) {
// $message->out_trade_no 获取商户订单号
// $message->payer['openid'] 获取支付者 openid
// 🚨🚨🚨 注意:推送信息不一定靠谱哈,请务必验证
// 建议是拿订单号调用微信支付查询接口,以查询到的订单状态为准
return $next($message);
});
// 默认返回 ['code' => 'SUCCESS', 'message' => '成功']
return $server->serve();
default.ERROR: Invalid request body. [] []
$app->setRequest($request);
有大佬遇到过这个问题吗?
use Symfony\Component\HttpFoundation\HeaderBag;
use Symfony\Component\HttpFoundation\Request as SymfonyRequest;
public function notify(Request $request)
{
$app = new Application(config('wx.config'));
$symfony_request = new SymfonyRequest($request->get(), $request->post(), [], $request->cookie(), [], [], $request->rawBody());
$symfony_request->headers = new HeaderBag($request->header());
$app->setRequestFromSymfonyRequest($symfony_request);
// $app 为你实例化的支付对象,此处省略实例化步骤
$server = $app->getServer();
// $response = $server->serve();
// 处理支付结果事件
$server->handlePaid(function (Message $message, \Closure $next) {
var_dump($message['out_trade_no']);
// $message 为微信推送的通知结果,详看微信官方文档
// 微信支付订单号 $message['transaction_id']
// 商户订单号 $message['out_trade_no']
// 商户号 $message['mchid']
// 具体看微信官方文档...
// 进行业务处理,如存数据库等...
return $next($message);
});
// 处理退款结果事件
$server->handleRefunded(function (Message $message, \Closure $next) {
// 同上,$message 详看微信官方文档
// 进行业务处理,如存数据库等...
return $next($message);
});
return $server->serve();
}
以上解决方案还有一些不完美,最完美的解决方案:https://www.workerman.net/a/1556
感谢大佬。 已解决
大佬,
$symfony_request->headers = new HeaderBag( $request->header() );
无法获取header,
报错
max(): Argument #1 ($value) must contain at least one element [] []
好像拿不到header信息
new HeaderBag( $request->header() );
参数必须是数组 你打印一下
是的返回的是数组 array(22) { }
报错信息:
报错位置:
你打印 header 是不是有key或者value是null的
max 前面 你加个 @ 试试
$request->header() 是返回数组, new HeaderBag($request->header())之后就变成了对象
max 是 vendor 里面的函数
感谢大佬,https://www.workerman.net/a/1556
参考webman手册 https://www.workerman.net/doc/webman/components/wechat.html
我用的是6版本不是5
已解决了,感谢