Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie PHP zur Implementierung der WeChat-Zahlungsabrechnungsabfrage

So verwenden Sie PHP zur Implementierung der WeChat-Zahlungsabrechnungsabfrage

PHPz
PHPzOriginal
2023-05-13 20:51:041935Durchsuche

Mit der Popularität des mobilen Bezahlens ist die WeChat-Zahlung zu einer Zahlungsmethode geworden, die nicht ignoriert werden kann. Als Entwickler ist die Rechnungsabfrage ein wesentlicher Bestandteil bei der Nutzung von WeChat Pay. In diesem Artikel wird erläutert, wie Sie die PHP-Sprache zum Abfragen von WeChat-Zahlungsauszügen verwenden.

  1. WeChat-Zahlungskontoinformationen abrufen

Bevor Sie die WeChat-Zahlung verwenden, müssen Sie zunächst die WeChat-Zahlungskontoinformationen konfigurieren. Nachdem Sie ein Konto im WeChat Pay Developer Center (https://pay.weixin.qq.com/) registriert und die entsprechenden Zertifizierungen abgeschlossen haben, können Sie die APPID, die Händler-ID, den Händlerschlüssel und andere Informationen von WeChat Pay erhalten.

  1. Kontoauszug abrufen

Nachdem die WeChat-Zahlung abgeschlossen ist, generiert das System den entsprechenden Transaktionsdatensatz und lädt den Transaktionsdatensatz auf den WeChat-Zahlungsserver hoch. Wir können den Link zum Herunterladen des Kontoauszugs erhalten, indem wir die von WeChat Pay bereitgestellte API aufrufen.

Die spezifische API ist: https://api.mch.weixin.qq.com/pay/downloadbill

Die API muss die folgenden Parameter übergeben:

Parametername Erforderlich Typ Beispielwert Description
appid ist string(32) wxd678efh567hg6787 Die von WeChat zugewiesene öffentliche Konto-ID
mch_ ID ist string(32) 1230000109 Die von WeChat Pay zugewiesene Händlernummer
nonce_str ist string(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS zufällige Zeichenfolge
sign ist string(32) C380BEC2BFD727A4B6845133519F3AD6 Signature

Dabei muss sich die Signaturgenerierung auf die Signaturregeln von WeChat Pay beziehen. Spezifische Implementierungsmethoden finden Sie in den offiziellen Dokumenten von WeChat Pay.

  1. Laden Sie die Erklärung herunter.

Über den im vorherigen Schritt erhaltenen Link zum Herunterladen der Erklärung können wir die Curl-Bibliothek von PHP verwenden, um die Erklärung herunterzuladen. Die spezifische Code-Implementierung lautet wie folgt:

$url = 'https://api.mch.weixin.qq.com/pay/downloadbill';
$params = array(
  'appid' => 'xxx',
  'mch_id' => 'xxx',
  'nonce_str' => 'xxx',
  'sign' => 'xxx',
  'bill_date' => 'xxx', // 对账单日期
  'bill_type' => 'ALL', // ALL-返回当日所有订单信息,SUCCESS-返回当日成功支付的订单,REFUND-返回当日退款订单,REVOKED-已撤销或已退款的订单
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
$response = curl_exec($ch);
curl_close($ch);
  1. Anweisung analysieren

Die heruntergeladene Anweisung ist eine CSV-Datei und muss zur weiteren Verarbeitung von PHP analysiert werden. Wir können die Funktion fgetcsv verwenden, um die Daten jeder Zeile zu lesen und die Daten dann zu analysieren.

Die spezifische Code-Implementierung lautet wie folgt:

$lines = explode("
", $response);
$header = explode(",", $lines[0]); // 第一行为表头信息
$data = array();
for($i = 1; $i < count($lines)-2; $i++) { // 最后两行为统计信息,不需要处理
  $line = explode(",", $lines[$i]);
  $row = array();
  foreach ($header as $key => $value) {
    $row[$value] = $line[$key];
  }
  $data[] = $row;
}
  1. Verarbeitung von Daten

Die Anweisung gibt die Originaldaten zurück, was eine bestimmte Verarbeitung erfordert, um das Abgleichsergebnis zu erhalten. Wir können die Daten nach Bestellnummern des Händlers gruppieren und die Daten dann nach Bestellnummer, Transaktionstyp, Transaktionsstatus und anderen Bedingungen filtern. Abschließend können die Abgleichsergebnisse auf der HTML-Seite ausgegeben werden.

Die spezifische Code-Implementierung lautet wie folgt:

$grouped_data = array();
foreach ($data as $row) {
  $grouped_data[$row['商户订单号']][] = $row;
}

$result = array();
foreach ($grouped_data as $order_no => $order_lines) {
  $success_lines = array_filter($order_lines, function($line) {
     return $line['交易状态'] == 'SUCCESS';
  });
  if (count($success_lines) == 0) {
    $result[] = array(
      'order_no' => $order_no,
      'reconciliation_status' => 'fail',
      'transaction_type' => $order_lines[0]['交易类型'],
      'transaction_status' => $order_lines[0]['交易状态'],
      'total_amount' => $order_lines[0]['应结订单金额'],
      'refund_amount' => $order_lines[0]['已退款金额'],
      'fee' => $order_lines[0]['手续费'],
    );
  } else {
    $success_line = $success_lines[0];
    $total_amount = array_sum(array_column($order_lines, '应结订单金额'));
    $refund_amount = array_sum(array_column($order_lines, '已退款金额'));
    $fee = array_sum(array_column($order_lines, '手续费'));
    $result[] = array(
      'order_no' => $order_no,
      'reconciliation_status' => 'success',
      'transaction_type' => $success_line['交易类型'],
      'transaction_status' => $success_line['交易状态'],
      'total_amount' => $total_amount,
      'refund_amount' => $refund_amount,
      'fee' => $fee,
    );
  }
}

// 输出结果到HTML页面上
echo "<table>";
echo "<tr><td>订单号</td><td>对账状态</td><td>交易类型</td><td>交易状态</td><td>总金额</td><td>退款金额</td><td>手续费</td></tr>"
foreach ($result as $row) {
  echo "<tr>";
  echo "<td>{$row['order_no']}</td>";
  echo "<td>{$row['reconciliation_status']}</td>";
  echo "<td>{$row['transaction_type']}</td>";
  echo "<td>{$row['transaction_status']}</td>";
  echo "<td>{$row['total_amount']}</td>";
  echo "<td>{$row['refund_amount']}</td>";
  echo "<td>{$row['fee']}</td>";
  echo "</tr>";
}
echo "</table>";

An diesem Punkt ist der Prozess der Verwendung von PHP zur Implementierung der WeChat-Zahlungsauszugsabfrage abgeschlossen. Ich hoffe, dieser Artikel kann Entwicklerfreunden helfen, die WeChat Pay verwenden.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie PHP zur Implementierung der WeChat-Zahlungsabrechnungsabfrage. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn