mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 21:03:17 +08:00
回调
This commit is contained in:
parent
d0243bde66
commit
c30a43a733
@ -393,20 +393,28 @@ class Ccbpayment extends Common
|
|||||||
try {
|
try {
|
||||||
// 1. 获取原始请求数据
|
// 1. 获取原始请求数据
|
||||||
$rawData = file_get_contents('php://input');
|
$rawData = file_get_contents('php://input');
|
||||||
Log::info('[建行支付通知] 收到异步通知: ' . $rawData);
|
Log::info('[建行支付通知] 收到异步通知 原始数据: ' . $rawData);
|
||||||
|
|
||||||
// 2. 解析POST参数
|
// 2. 尝试多种方式获取参数(建行可能使用GET或POST)
|
||||||
$params = $this->request->post();
|
$params = $this->request->post();
|
||||||
|
|
||||||
// 3. 如果POST为空,尝试解析原始数据
|
// 3. 如果POST为空,尝试GET参数
|
||||||
if (empty($params) && $rawData) {
|
if (empty($params)) {
|
||||||
parse_str($rawData, $params);
|
$params = $this->request->get();
|
||||||
|
Log::info('[建行支付通知] POST为空,尝试GET参数');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 记录参数
|
// 4. 如果GET也为空,尝试解析原始数据
|
||||||
Log::info('[建行支付通知] 解析参数: ' . json_encode($params, JSON_UNESCAPED_UNICODE));
|
if (empty($params) && $rawData) {
|
||||||
|
parse_str($rawData, $params);
|
||||||
|
Log::info('[建行支付通知] GET为空,尝试解析原始数据');
|
||||||
|
}
|
||||||
|
|
||||||
// 5. 验证必需参数
|
// 5. 记录最终解析的参数
|
||||||
|
Log::info('[建行支付通知] 解析参数: ' . json_encode($params, JSON_UNESCAPED_UNICODE));
|
||||||
|
Log::info('[建行支付通知] 请求方法: ' . $this->request->method());
|
||||||
|
|
||||||
|
// 6. 验证必需参数
|
||||||
if (empty($params['ORDERID'])) {
|
if (empty($params['ORDERID'])) {
|
||||||
Log::error('[建行支付通知] 缺少ORDERID参数');
|
Log::error('[建行支付通知] 缺少ORDERID参数');
|
||||||
exit('FAIL');
|
exit('FAIL');
|
||||||
@ -422,7 +430,7 @@ class Ccbpayment extends Common
|
|||||||
exit('FAIL');
|
exit('FAIL');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 6. ✅ 验证签名(使用建行公钥验签)
|
// 7. ✅ 验证签名(使用建行公钥验签)
|
||||||
try {
|
try {
|
||||||
$signature = $params['SIGN'];
|
$signature = $params['SIGN'];
|
||||||
$verifyParams = $params; // 复制参数用于验签
|
$verifyParams = $params; // 复制参数用于验签
|
||||||
@ -453,16 +461,16 @@ class Ccbpayment extends Common
|
|||||||
exit('FAIL');
|
exit('FAIL');
|
||||||
}
|
}
|
||||||
|
|
||||||
// 7. 检查支付状态
|
// 8. 检查支付状态
|
||||||
if ($params['SUCCESS'] !== 'Y') {
|
if ($params['SUCCESS'] !== 'Y') {
|
||||||
Log::warning('[建行支付通知] 支付未成功 ORDERID:' . $params['ORDERID'] . ' SUCCESS:' . $params['SUCCESS']);
|
Log::warning('[建行支付通知] 支付未成功 ORDERID:' . $params['ORDERID'] . ' SUCCESS:' . $params['SUCCESS']);
|
||||||
exit('SUCCESS'); // ⚠️ 仍然返回SUCCESS,表示通知已接收
|
exit('SUCCESS'); // ⚠️ 仍然返回SUCCESS,表示通知已接收
|
||||||
}
|
}
|
||||||
|
|
||||||
// 8. 调用支付服务处理通知(返回订单ID)
|
// 9. 调用支付服务处理通知(返回订单ID)
|
||||||
$result = $this->paymentService->handleNotify($params);
|
$result = $this->paymentService->handleNotify($params);
|
||||||
|
|
||||||
// 9. ✅ 处理成功后更新订单状态到建行(步骤13:调用订单更新接口更新订单状态)
|
// 10. ✅ 处理成功后更新订单状态到建行(步骤13:调用订单更新接口更新订单状态)
|
||||||
if ($result['status'] === 'success' && !empty($result['order_id'])) {
|
if ($result['status'] === 'success' && !empty($result['order_id'])) {
|
||||||
// ⚠️ 只有新支付才更新,已支付的订单跳过更新
|
// ⚠️ 只有新支付才更新,已支付的订单跳过更新
|
||||||
if ($result['already_paid'] === false) {
|
if ($result['already_paid'] === false) {
|
||||||
@ -485,7 +493,7 @@ class Ccbpayment extends Common
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// 10. 返回处理结果
|
// 11. 返回处理结果
|
||||||
// ⚠️ 重要: 必须使用exit直接退出,防止ThinkPHP框架追加额外内容
|
// ⚠️ 重要: 必须使用exit直接退出,防止ThinkPHP框架追加额外内容
|
||||||
// 建行要求返回纯文本 'SUCCESS' 或 'FAIL',任何额外字符都会导致建行认为通知失败
|
// 建行要求返回纯文本 'SUCCESS' 或 'FAIL',任何额外字符都会导致建行认为通知失败
|
||||||
$response = ($result['status'] === 'success') ? 'SUCCESS' : 'FAIL';
|
$response = ($result['status'] === 'success') ? 'SUCCESS' : 'FAIL';
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user