首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

微信支付告警通知完整接收實作:錯誤類型對照、日誌記錄與自動化監控建議

     編輯:PHP 綜合知識

告警通知機制

微信後台偵測到商戶異常 (發貨延遲、介面調用失敗、通知失敗等) → POST XML 至商戶設定的「告警通知 URL」 → 商戶需盡快修復問題。

告警通知 URL 設定

路徑:公眾平台 → 服務 → 服務中心 → 商戶功能 → 商戶基本資料 → 告警通知 URL

範例:`https://www.doucube.com/wxpay/alarm.php`

XML 結構與錯誤類型對照

<xml>
  <AppId><![CDATA[wxf8b4f85f3a794e77]]></AppId>
  <ErrorType>1001</ErrorType>                    // 錯誤代碼
  <Description><![CDATA[錯誤描述]]></Description>     // 簡短描述
  <AlarmContent><![CDATA[錯誤詳情]]></AlarmContent>  // 完整詳情
  <TimeStamp>1393860740</TimeStamp>
  <AppSignature><![CDATA[f8164781a303f4d5a944a2dfc68411a8c7e4fbea]]></AppSignature>
  <SignMethod><![CDATA[sha1]]></SignMethod>
</xml>

常見 ErrorType 對照表

ErrorType含義典型原因建議處理
1001發貨延遲虛擬品 24h/實物 72h 未發貨通知檢查發貨流程、補發貨通知 API
1002介面調用失敗統一下單/退款/查詢 API 回包錯誤查詢日誌、修正參數/簽名/憑證
1003通知失敗支付結果/退款結果回調 5 秒內無響應優化回調效能、檢查 HTTPS/防火牆
1004退款失敗退款申請被拒/餘額不足人工介入、補單處理
1005證書/簽名錯誤API 憑證過期/簽名算法不符更新憑證、核對簽名流程

PHP 接收實作 (alarm.php)

<?php
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; // 獲取原始 XML

// 解析 XML
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);

$errorType = (int)$postObj->ErrorType;
$description = (string)$postObj->Description;
$alarmContent = (string)$postObj->AlarmContent;
$timeStamp = (int)$postObj->TimeStamp;

// 結構化日誌記錄
logger([
    'time' => date('Y-m-d H:i:s', $timeStamp),
    'error_type' => $errorType,
    'description' => $description,
    'content' => $alarmContent,
    'raw_xml' => $postStr,
]);

function logger($data) {
    $maxSize = 100000;
    $file = "alarm_log.json";
    if (file_exists($file) && filesize($file) > $maxSize) unlink($file);
    
    $line = json_encode($data, JSON_UNESCAPED_UNICODE) . "\n";
    file_put_contents($file, $line, FILE_APPEND);
    
    // 同步寫入系統日誌 (可被 logrotate 管理)
    error_log("[WECHAT_ALARM] " . $line);
}

// 回應微信 (必須在 5 秒內)
echo '';
?>

進階:自動化監控與告警升級

1. 日誌聚合分析 (ELK/EFK)

# Filebeat 收集 alarm_log.json → Logstash 解析 → Elasticsearch 存儲 → Kibana 視覺化
# 建立 Dashboard 監控:ErrorType 分布、趨勢、Top 商戶

2. 即時告警推送

<?php
// 在 logger() 中加入即時推送
$webhook = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=XXX'; // 企業微信機器人
$msg = [
    'msgtype' => 'markdown',
    'markdown' => [
        'content' => "**微信支付告警**\n> **類型**: $errorType ($description)\n> **詳情**: $alarmContent\n> **時間**: " . date('Y-m-d H:i:s')
    ]
];
curl_post($webhook, json_encode($msg));

// 或發送簡訊/郵件給值班人員
?>

3. 自動修復嘗試

ErrorType可自動修復動作風險評估
1001 發貨延遲調用發貨通知 API (若已發貨)低 - 需確認訂單狀態
1002 介面失敗重試失敗訂單 (指數退避)中 - 需冪等設計
1003 通知失敗重發回調通知低 - 微信允許重複通知

最佳實務總結

  1. 結構化日誌:JSON 格式含完整欄位,便於查詢分析
  2. 分級響應:嚴重 (1002/1003) 即時推送 + 自動重試;一般 (1001) 定時任務補單
  3. 根因分析:定期匯總告警類型分布,針對高頻問題優化代碼/流程
  4. 演練機制:定期模擬告警觸發,驗證接收、記錄、告警、修復全鏈路
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved