You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否有CodeIgniter函数验证CCAvenue支付?如何核查支付状态?

CCAvenue支付状态验证与核查(CodeIgniter实现)

一、判断CCAvenue支付成功的核心依据

CCAvenue支付成功需同时满足两个条件:

  1. 支付网关返回的order_status参数值为Success(具体值以官方文档为准,注意大小写)
  2. 验证返回数据的签名完整性,防止数据被篡改

签名验证逻辑:使用你的CCAvenue商户密钥,按照官方指定规则(通常是拼接特定参数后用MD5/SHA加密)生成签名,与网关返回的signature参数对比,一致则数据可信。

二、CodeIgniter中CCAvenue支付验证函数示例

可在控制器中实现回调验证逻辑,示例如下:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Payment extends CI_Controller {

    // 商户配置信息,替换为自己的参数
    private $merchant_id = 'YOUR_MERCHANT_ID';
    private $working_key = 'YOUR_WORKING_KEY';

    public function ccavenue_callback() {
        // 获取网关POST回调数据
        $post_data = $this->input->post();

        // 提取关键参数
        $order_id = $post_data['order_id'];
        $order_status = $post_data['order_status'];
        $received_signature = $post_data['signature'];
        $amount = $post_data['amount'];

        // 按官方规则生成签名(示例规则,以官方文档为准)
        $signature_string = $order_id . '|' . $order_status . '|' . $amount . '|' . $this->working_key;
        $generated_signature = md5($signature_string);

        // 验证签名与支付状态
        if ($generated_signature === $received_signature && $order_status === 'Success') {
            // 支付成功:更新数据库订单状态
            $this->db->where('order_id', $order_id);
            $this->db->update('orders', [
                'payment_status' => 'success',
                'updated_at' => date('Y-m-d H:i:s')
            ]);
            echo 'Payment verified successfully';
        } else {
            // 支付失败或签名无效:更新数据库状态
            $this->db->where('order_id', $order_id);
            $this->db->update('orders', [
                'payment_status' => 'failed',
                'updated_at' => date('Y-m-d H:i:s')
            ]);
            echo 'Payment verification failed';
        }
    }
}
?>

三、数据库支付状态重新核查方法

针对数据库中待确认的订单,可通过CCAvenue查询API批量核查状态,模型示例函数如下:

<?php
class Payment_model extends CI_Model {

    private $merchant_id = 'YOUR_MERCHANT_ID';
    private $working_key = 'YOUR_WORKING_KEY';
    private $query_api_url = 'https://api.ccavenue.com/queryOrder'; // 以官方实际URL为准

    public function verify_pending_orders() {
        // 取出数据库中待确认的订单
        $pending_orders = $this->db->get_where('orders', ['payment_status' => 'pending'])->result();

        foreach ($pending_orders as $order) {
            // 构造查询请求参数
            $post_data = [
                'merchant_id' => $this->merchant_id,
                'order_id' => $order->order_id
                // 其他必填参数参考官方文档补充
            ];

            // 发送查询请求
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $this->query_api_url);
            curl_setopt($ch, CURLOPT_POST, true);
            curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($post_data));
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true); // 生产环境必须开启

            $response = curl_exec($ch);
            curl_close($ch);

            // 解析返回数据(以官方返回格式为准)
            $response_data = json_decode($response, true);

            // 更新数据库状态
            if ($response_data['order_status'] === 'Success') {
                $this->db->where('id', $order->id);
                $this->db->update('orders', ['payment_status' => 'success']);
            } elseif (in_array($response_data['order_status'], ['Failed', 'Aborted'])) {
                $this->db->where('id', $order->id);
                $this->db->update('orders', ['payment_status' => 'failed']);
            }
        }

        return 'Pending orders verification completed';
    }
}
?>

注意事项

  • 严格遵循CCAvenue官方文档的签名规则与API参数要求,避免因规则不符导致验证失败
  • 回调URL需对外可访问,并在CCAvenue商户后台配置正确
  • 生产环境务必开启SSL证书验证,确保请求安全

内容的提问来源于stack exchange,提问作者anjuprakash k

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 06:50:21