php - 会话在 Laravel 中的支付网关回调时自动销毁
问题描述
我正在尝试将 CCavenue.com 支付网关集成到我的 Laravel 7 项目中。我面临的唯一问题是回调 url,在从支付网关获取发布数据后,活动会话会自动销毁。我还在中间件中添加了 CSRF 异常。
PayController(生成付款请求和 URL)
<?php
namespace App\Http\Controllers\user;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PayController extends Controller
{
public function __construct()
{
$this->middleware('auth:web');
}
public function index()
{
return view('user.addmoney');
}
public function addmoney(Request $request)
{
$validatedData = $request->validate([
'Amount' => 'required|numeric',
]);
$Amount = $validatedData['Amount'];
$working_key = '5dfsdfsdf3323423'; //Shared by CCAVENUES
$access_code = 'asdasdas234234'; //Shared by CCAVENUES
echo $merchant_data = 'merchant_id=555&order_id=123654789&amount=' . $Amount . '¤cy=AED&redirect_url=http://localhost:8000/addmoneyresponse&cancel_url=http://localhost:8000/addmoneyresponse&language=EN&billing_name=Charli&billing_address=Room no 1101, near Railway station Ambad&billing_city=Indore&billing_country=India&billing_tel=9595226054&billing_email=atul.kadam@avenues.info&promo_code=&customer_identifier=&integration_type=iframe_normal&';
$encrypted_data = $this->encrypt($merchant_data, $working_key); // Method for encrypting the data.
echo "<br>";
$production_url = 'https://secure.ccavenue.ae/transaction/transaction.do?command=initiateTransaction&encRequest=' . $encrypted_data . '&access_code=' . $access_code;
return redirect()->away($production_url);
//return view('user.addmoneyrequest', compact('production_url'));
}
function encrypt($plainText, $key)
{
$key = $this->hextobin(md5($key));
$initVector = pack("C*", 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
$openMode = openssl_encrypt($plainText, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $initVector);
$encryptedText = bin2hex($openMode);
return $encryptedText;
}
function decrypt($encryptedText, $key)
{
$key = $this->hextobin(md5($key));
$initVector = pack("C*", 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f);
$encryptedText = $this->hextobin($encryptedText);
$decryptedText = openssl_decrypt($encryptedText, 'AES-128-CBC', $key, OPENSSL_RAW_DATA, $initVector);
return $decryptedText;
}
//*********** Padding Function *********************
function pkcs5_pad($plainText, $blockSize)
{
$pad = $blockSize - (strlen($plainText) % $blockSize);
return $plainText . str_repeat(chr($pad), $pad);
}
//********** Hexadecimal to Binary function for php 4.0 version ********
function hextobin($hexString)
{
$length = strlen($hexString);
$binString = "";
$count = 0;
while ($count < $length) {
$subString = substr($hexString, $count, 2);
$packedString = pack("H*", $subString);
if ($count == 0) {
$binString = $packedString;
} else {
$binString .= $packedString;
}
$count += 2;
}
return $binString;
}
}
PayResponseController(流程回调)
<?php
namespace App\Http\Controllers\user;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PayResponseController extends Controller
{
public function addmoneyresponse(Request $request)
{
return $request->all();
//return view('user.dashboard');
}
}
解决方案
我遇到了这个问题,我为回调添加了一个 API 路由并在其中返回一个视图:
在routes
文件夹中,api.php
文件:
Route::post('/callback','callbackController@callback');
内部controller
:
public function callback(Request $request) {
// some code here
return view('callback');
}
并将此设置为回调:
http://yourdomain.com/api/callback
推荐阅读
- node.js - 创建 NodeJS API。使用 msnodesqlv8 时,无法将 heroku master 推送到 heroku 应用程序
- mysql - 已解决 - NodeJS Docker 容器无法连接到 MySQL(在主机上)
- angular - 如何在下拉角度中获取我选择的 id?
- swift - 具有两行和动态宽度的水平滚动 UICollectionView,单元格不向左对齐
- email - 如何在我的模拟 SMTP 中将域列入白名单以进行 UAT 电子邮件测试?
- flutter - 在 swipper 中显示 3 个项目
- php - 在php中使用pdo通过tls连接mysql服务器时是否需要指定证书颁发机构?
- python - 熊猫数据框
- javascript - Next.js + Strapi 博客:内容未更新
- java - Spring boot 如何正确使用@PostConstruct