easywechat 6.x 回調(diào)拿不到數(shù)據(jù)
$server = $app->getServer();
$server->handlePaid(function (Message $message, \Closure $next) {
// $message->out_trade_no 獲取商戶訂單號
// $message->payer['openid'] 獲取支付者 openid
// ?????? 注意:推送信息不一定靠譜哈,請務(wù)必驗證
// 建議是拿訂單號調(diào)用微信支付查詢接口,以查詢到的訂單狀態(tài)為準
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();
// 處理支付結(jié)果事件
$server->handlePaid(function (Message $message, \Closure $next) {
var_dump($message['out_trade_no']);
// $message 為微信推送的通知結(jié)果,詳看微信官方文檔
// 微信支付訂單號 $message['transaction_id']
// 商戶訂單號 $message['out_trade_no']
// 商戶號 $message['mchid']
// 具體看微信官方文檔...
// 進行業(yè)務(wù)處理,如存數(shù)據(jù)庫等...
return $next($message);
});
// 處理退款結(jié)果事件
$server->handleRefunded(function (Message $message, \Closure $next) {
// 同上,$message 詳看微信官方文檔
// 進行業(yè)務(wù)處理,如存數(shù)據(jù)庫等...
return $next($message);
});
return $server->serve();
}
以上解決方案還有一些不完美,最完美的解決方案:http://m.wtbis.cn/a/1556
$app = new Application( $config );
$symfony_request = new SymfonyRequest( $request->get(),$request->post(),[],$request->cookie(),[],[],$request->rawBody() );
$symfony_request->headers = new HeaderBag( $request->header() );
$app->setRequestFromSymfonyRequest( $symfony_request );
$server = $app->getServer();
$response = $server->serve();
大佬,
$symfony_request->headers = new HeaderBag( $request->header() );
無法獲取header,
報錯
max(): Argument #1 ($value) must contain at least one element [] []
好像拿不到header信息
是的返回的是數(shù)組 array(22) { }
報錯信息:
ValueError: max(): Argument #1 ($value) must contain at least one element in /vendor/w7corp/easywechat/src/Kernel/ServerResponse.php(193): max()
default.ERROR: max(): Argument #1 ($value) must contain at least one element [] []
報錯位置:
public function __toString(): string
{
$headers = $this->getHeaders();
ksort($headers);
$max = max(array_map('strlen', array_keys($headers))) + 1;
$headersString = '';
foreach ($headers as $name => $values) {
$name = ucwords($name, '-');
foreach ($values as $value) {
$headersString .= sprintf("%-{$max}s %s\r\n", $name.':', $value);
}
}
return sprintf(
'HTTP/%s %s %s',
$this->getProtocolVersion(),
$this->getStatusCode(),
$this->getReasonPhrase()
)."\r\n".
$headersString."\r\n".
$this->getBody();
}