在无现金集成时在 cakephp 中遇到 csrk 令牌问题

问题描述 投票:0回答:1

我正在做 cakephp 项目。而且我已经快完成cashfree的支付整合了。

从无现金支付网关返回时,我在 cakephp 应用程序中遇到 csrf 令牌问题。

我在cakephp代码中使用了$_POST。请帮我修复它。

遵循无现金文档

cakephp cashfree
1个回答
0
投票

@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>

您可以根据您的具体集成需求和要求随意调整代码片段和说明。如果您还有任何其他问题或需要其他帮助,请告诉我!

© www.soinside.com 2019 - 2024. All rights reserved.