ホームページ >バックエンド開発 >PHPチュートリアル >PHP を使用して WeChat 支払明細照会を実装する方法

PHP を使用して WeChat 支払明細照会を実装する方法

PHPz
PHPzオリジナル
2023-05-13 20:51:041956ブラウズ

モバイル決済の普及に伴い、WeChat決済は無視できない決済方法となっています。開発者として、請求書照会は WeChat Pay を使用する際に不可欠な部分です。この記事では、PHP 言語を使用して WeChat の支払い明細をクエリする方法を紹介します。

  1. WeChat 支払いアカウント情報の取得

WeChat 支払いを使用する前に、まず WeChat 支払いアカウント情報を構成する必要があります。 WeChat Pay 開発者センター (https://pay.weixin.qq.com/) にアカウントを登録し、関連する認定を完了すると、WeChat Pay の APPID、マーチャント ID、マーチャント キー、その他の情報を取得できます。

  1. Get Statement

WeChat 支払いが完了すると、システムは対応するトランザクション レコードを生成し、トランザクション レコードを WeChat 支払いサーバーにアップロードします。 WeChat Pay が提供する API を呼び出すことで、明細のダウンロード リンクを取得できます。

特定の API は次のとおりです: https://api.mch.weixin.qq.com/pay/downloadbill

API は次のパラメータを渡す必要があります:

#パラメータ名必須タイプ値の例説明#appidmch_id は isここで、署名生成はWeChat Payの署名ルールを参照する必要があります。具体的な導入方法については、WeChat Payが提供する公式ドキュメントをご参照ください。
string(32) wxd678efh567hg6787 WeChat によって割り当てられた公開アカウント ID です。
string(32) 1230000109 WeChat 支払いによって割り当てられた販売者番号です。 nonce_str
string(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS ランダム文字列 です# 署名
string(32) C380BEC2BFD727A4B6845133519F3AD6 署名
ステートメントのダウンロード

    前の手順で取得したステートメント ダウンロード リンクを通じて、PHP の Curl ライブラリを使用してステートメントをダウンロードできます。具体的なコードの実装は次のとおりです。
  1. $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);
ステートメントを解析する

    ダウンロードされたステートメントは csv ファイルであり、さらに処理するには PHP によって解析する必要があります。 fgetcsv 関数を使用して各行のデータを読み取り、データを解析できます。
  1. 具体的なコード実装は次のとおりです。
$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;
}

データの処理

    ステートメントは元のデータを返します。調整するには特定の処理が必要です。結果。販売者の注文番号に従ってデータをグループ化し、注文番号、取引タイプ、取引ステータス、その他の条件に従ってデータをフィルタリングできます。最後に、調整結果を HTML ページに出力できます。
  1. 具体的なコード実装は次のとおりです:
$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>";

この時点で、PHP を使用して WeChat 支払い明細クエリを実装するプロセスは終了です。この記事が WeChat Pay を使用している開発者の友人に役立つことを願っています。

以上がPHP を使用して WeChat 支払明細照会を実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。