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.
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.
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.
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);
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; }
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!