Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara menggunakan PHP untuk melaksanakan pertanyaan penyata pembayaran WeChat

Cara menggunakan PHP untuk melaksanakan pertanyaan penyata pembayaran WeChat

PHPz
PHPzasal
2023-05-13 20:51:041874semak imbas

Dengan populariti pembayaran mudah alih, pembayaran WeChat telah menjadi kaedah pembayaran yang tidak boleh diabaikan. Sebagai pembangun, pertanyaan bil adalah bahagian penting apabila menggunakan WeChat Pay. Artikel ini akan memperkenalkan cara menggunakan bahasa PHP untuk menanyakan penyata pembayaran WeChat.

  1. Dapatkan maklumat akaun pembayaran WeChat

Sebelum menggunakan pembayaran WeChat, anda perlu mengkonfigurasi maklumat akaun pembayaran WeChat terlebih dahulu. Selepas mendaftar akaun di Pusat Pembangun WeChat Pay (https://pay.weixin.qq.com/) dan melengkapkan pensijilan yang berkaitan, anda boleh mendapatkan APPID WeChat Pay, ID pedagang, kunci pedagang dan maklumat lain.

  1. Dapatkan penyata

Selepas pembayaran WeChat selesai, sistem akan menjana rekod transaksi yang sepadan dan memuat naik rekod transaksi ke pelayan pembayaran WeChat. Kami boleh mendapatkan pautan muat turun penyata dengan menghubungi API yang disediakan oleh WeChat Pay.

API khusus ialah: https://api.mch.weixin.qq.com/pay/downloadbill

API perlu melepasi parameter berikut:

参数名 必填 类型 示例值 描述
appid string(32) wxd678efh567hg6787 微信分配的公众账号ID
mch_id string(32) 1230000109 微信支付分配的商户号
nonce_str string(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串
sign string(32) C380BEC2BFD727A4B6845133519F3AD6 签名

Antaranya, tandatangan perlu dijana mengikut peraturan tandatangan WeChat Pay. Untuk kaedah pelaksanaan khusus, sila rujuk kepada dokumen rasmi yang disediakan oleh WeChat Pay.

  1. Muat turun pernyataan

Melalui pautan muat turun pernyataan yang diperolehi dalam langkah sebelumnya, kita boleh menggunakan perpustakaan curl PHP untuk memuat turun pernyataan. Pelaksanaan kod khusus adalah seperti berikut:

$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. Parse pernyataan

Pernyataan yang dimuat turun ialah fail csv dan perlu dihuraikan oleh PHP untuk pemprosesan selanjutnya. Kita boleh menggunakan fungsi fgetcsv untuk membaca data setiap baris dan kemudian menghuraikan data.

Pelaksanaan kod khusus adalah seperti berikut:

$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. Memproses data

Pernyataan mengembalikan data asal, yang memerlukan pemprosesan tertentu untuk mendapatkan penyesuaian . Kami boleh mengumpulkan data mengikut nombor pesanan pedagang, dan kemudian menapis data mengikut nombor pesanan, jenis transaksi, status transaksi dan syarat lain. Akhir sekali, hasil penyesuaian boleh dikeluarkan ke halaman HTML.

Pelaksanaan kod khusus adalah seperti berikut:

$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>";

Pada ketika ini, proses menggunakan PHP untuk melaksanakan pertanyaan penyata pembayaran WeChat telah berakhir. Saya harap artikel ini dapat membantu rakan pembangun yang menggunakan WeChat Pay.

Atas ialah kandungan terperinci Cara menggunakan PHP untuk melaksanakan pertanyaan penyata pembayaran WeChat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn