是否有CodeIgniter函数验证CCAvenue支付?如何核查支付状态?
CCAvenue支付状态验证与核查(CodeIgniter实现)
一、判断CCAvenue支付成功的核心依据
CCAvenue支付成功需同时满足两个条件:
- 支付网关返回的
order_status参数值为Success(具体值以官方文档为准,注意大小写) - 验证返回数据的签名完整性,防止数据被篡改
签名验证逻辑:使用你的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
相关产品推荐
相关产品推荐

