Cara menggunakan PHP untuk melaksanakan pertanyaan penyata pembayaran WeChat

PHPz
Lepaskan: 2023-05-13 20:52:02
asal
1925 orang telah melayarinya

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);
Salin selepas log masuk
  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;
}
Salin selepas log masuk
  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>";
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!