我正在做 cakephp 项目。而且我已经快完成cashfree的支付整合了。
从无现金支付网关返回时,我在 cakephp 应用程序中遇到 csrf 令牌问题。
我在cakephp代码中使用了$_POST。请帮我修复它。
遵循无现金文档
@mohit 对于 Cashfree 的最新支付集成,请确保您的回调方法是 GET 调用,而不是 POST 调用。此外,请记住在回调方法中验证订单详细信息。下面是一个示例 CakePHP 控制器和视图以及示例代码:
这是控制器
<?php
// src/Controller/ArticlesController.php
namespace App\Controller;
use Cashfree\Model\CreateOrderRequest;
use Cashfree\Model\CustomerDetails;
use Cashfree\Model\OrderMeta;
use Illuminate\Http\Request;
use Cashfree\Cashfree;
class PaymentsController extends AppController
{
public function index()
{
Cashfree::$XClientId = "XXXXXXXXX_Client_ID";
Cashfree::$XClientSecret = "XXXXXXX_Client_Secret_Key";
Cashfree::$XEnvironment = Cashfree::$SANDBOX;
$cashfree = new Cashfree();
$x_api_version = "2022-09-01";
$orderAmount = "10.00"; //Amount should be pass here
$customerName = "Test Customer";
$customerEmail = "[email protected]";
$customerId = "customerId";
$customerPhone = "9999999999";
$returnUrl = 'http://localhost/payments/callback?order_id={order_id}'; // Ensure the return URL is correct. I have created a callback get method below this method
$create_orders_request = new CreateOrderRequest();
$create_orders_request->setOrderAmount($orderAmount);
$create_orders_request->setOrderCurrency("INR");
$customer_details = new CustomerDetails();
$customer_details->setCustomerName($customerName);
$customer_details->setCustomerId($customerId);
$customer_details->setCustomerEmail($customerEmail);
$customer_details->setCustomerPhone($customerPhone);
$create_orders_request->setCustomerDetails($customer_details);
$order_meta = new OrderMeta();
$order_meta->setReturnUrl($returnUrl);
$create_orders_request->setOrderMeta($order_meta);
try {
$result = $cashfree->PGCreateOrder($x_api_version, $create_orders_request);
} catch (Exception $e) {
echo 'Exception when calling PGCreateOrder: ', $e->getMessage(), PHP_EOL;
}
$payment_session_id = $result[0]['payment_session_id'];
$data = [
'payment_session_id' => $payment_session_id,
'environment' => 'sandbox',
];
$this->set($data);
}
public function callback()
{
echo '<pre>';
print_r($_REQUEST);
die();
}
}
这是放置在 /Users/yourusername/your_workplace_dir/cakephp/templates/Payments/index.php 中的视图模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Cashfree Checkout Integration</title>
<script src="https://sdk.cashfree.com/js/v3/cashfree.js"></script>
</head>
<body>
<div class="row">
<p>Click below to open the checkout page in current tab</p>
<button id="renderBtn">Pay Now</button>
</div>
<script>
const cashfree = Cashfree({
mode: "<?= h($environment) ?>",
});
document.getElementById("renderBtn").addEventListener("click", () => {
let checkoutOptions = {
paymentSessionId: "<?= h($payment_session_id) ?>",
redirectTarget: "_self",
};
cashfree.checkout(checkoutOptions);
});
</script>
</body>
您可以根据您的具体集成需求和要求随意调整代码片段和说明。如果您还有任何其他问题或需要其他帮助,请告诉我!