我正在将姆比萨集成到我的Laravel应用程序中。我模拟了一个交易,用户可以成功地支付。付款后,我希望通过回调URL将支付细节存储在数据库中。我已经创建了一个API路由,它调用了在DB中编码和保存数据的函数。我使用ngrok将本地主机隧道到回调URL。每当我在postman中执行该函数并成功支付时,我就会在ngrok "POST /api/mpesa/callbackurl 502坏网关“上出错。我已经研究并发现它是一个服务器错误,但是我已经很好地在ngrok..how中引导了本地主机,我能修复这个问题吗?
这是我的stkpush函数
public function stkpush(Request $request)
{
$url='https://sandbox.safaricom.co.ke/mpesa/stkpush/v1/processrequest';
$curl_post_data=[
'BusinessShortCode'=>174379,
'Password'=>$this->lipanampesapassword(),
'Timestamp'=>Carbon::rawParse('now')->format('YmdHms'),
'TransactionType'=> "CustomerPayBillOnline",
'Amount'=>1,
'PartyA'=>254712345678,
'PartyB'=>174379,
'PhoneNumber'=>254712345678,
'CallBackURL'=>'https://89af-196-202-210-53.eu.ngrok.io/api/mpesa/callbackurl',
'AccountReference'=>'Waweru Enterprises',
'TransactionDesc'=>'Paying for Products Bought'
];
$data_string=json_encode($curl_post_data);
$curl=curl_init();
curl_setopt($curl,CURLOPT_URL,$url);
curl_setopt($curl,CURLOPT_HTTPHEADER,array('Content-Type:application/json','Authorization:Bearer '.$this->newaccesstoken()));
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curl,CURLOPT_POST,true);
curl_setopt($curl,CURLOPT_POSTFIELDS,$data_string);
$curl_response=curl_exec($curl);
return $curl_response;
}api.php中的回调url路由
路线:post(‘/mpesa/callbackurl’,MpesatransactionController::class,'mpesaresponse')->name('mpesaresponse');
mpesa响应函数
public function mpesaresponse(Request $request)
{
$response=$request->getContent();
$transaction=new mpesatransaction;
$transaction->response=json_encode($response);
$transaction->save();
}ngrok面板

发布于 2022-07-21 09:05:13
你在ngrok终端输入了错误的地址。您从上传的图像中输入ngrok http 127.0.0.1:8000:80。
正确的语法应该是没有ngrok http 127.0.0.1:8000端口的:80。
发布于 2022-08-03 06:53:53
尝试将函数中的回调URL更改为如下所示:
public function stkpush(Request $request)
{
$url='https://sandbox.safaricom.co.ke/mpesa/stkpush/v1/processrequest';
$curl_post_data=[
...
'CallBackURL'=>'https://89af-196-202-210-53.eu.ngrok.io/api/mpesaresponse',
...
]
}https://stackoverflow.com/questions/72300328
复制相似问题