如何用PHP實現微信支付對帳單查詢

PHPz
發布: 2023-05-13 20:52:02
原創
1849 人瀏覽過

隨著行動支付的流行,微信支付成為了一個不可忽視的支付方式。作為開發人員,在使用微信支付時,對帳單查詢是必不可少的環節。本文將介紹如何利用PHP語言實現微信支付對帳單的查詢。

  1. 取得微信支付帳號資訊

在使用微信付款前,首先需要設定微信支付帳號資訊。在微信支付開發者中心(https://pay.weixin.qq.com/)註冊帳號,完成相關認證後,即可取得到微信支付的APPID、商家ID、商家金鑰等資訊。

  1. 取得對帳單

在微信支付完成後,系統會產生對應的交易記錄,並將交易記錄上傳至微信支付伺服器。我們可以透過呼叫微信支付提供的API,取得對帳單的下載連結。

具體的API為:https://api.mch.weixin.qq.com/pay/downloadbill

此API需要傳遞以下參數:

##參數名稱 必填 類型 範例值 描述 ##appid 是 string(32) wxd678efh567hg6787 微信指派的公用帳號ID mch_id 是 string(32) 1230000109 微信支付分配的商家號碼 #nonce_str 是 string(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 隨機字符串 sign 是 string(32) C380BEC2BFD727A4B6845133519F3AD6 簽名

其中,簽名的生成需要參照微信支付的簽名規則。具體的實作方法可以參考微信支付提供的官方文件。
  1. 下載對帳單

透過上一步獲得的對帳單下載鏈接,我們可以使用PHP的curl庫下載對帳單。具體的程式碼實作如下:
    $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. 解析對帳單

下載下來的對帳單是一個csv文件,需要透過PHP解析進行進一步處理。我們可以使用fgetcsv函數讀取每一行的數據,然後對數據進行解析。

具體的程式碼實作如下:
    $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. 處理資料

對帳單回傳的是原始數據,需要進行一定的處理才能得到對賬結果。我們可以將資料依照商家訂單號碼分組,然後依照訂單編號、交易類型、交易狀態等條件篩選資料。最後,可以將對帳結果輸出到HTML頁面上。

具體的程式碼實現如下:

$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 ""; echo "" foreach ($result as $row) { echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; } echo "
订单号对账状态交易类型交易状态总金额退款金额手续费
{$row['order_no']}{$row['reconciliation_status']}{$row['transaction_type']}{$row['transaction_status']}{$row['total_amount']}{$row['refund_amount']}{$row['fee']}
";
登入後複製
至此,利用PHP實作微信支付對帳單查詢的流程就結束了。希望這篇文章可以幫助正在使用微信支付的開發者朋友。 ###

以上是如何用PHP實現微信支付對帳單查詢的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!