PHP實現微信對帳單處理

最近要作支付對帳,即檢查第三方支付與數據庫中帳單是否一一對應,涉及到微信對帳單的處理,成功時,微信帳單接口返回數據以文本表格的方式返回,第一行爲表頭,後面各行爲對應的字段內容,字段內容跟查詢訂單或退款結果一致,具體字段說明可查閱相應接口。php

Ps:至於如何調用微信接口下載對帳單,在微信的官方SDK包中就有現成的方法,直接調用便可。注意對帳單接口一次只能查詢一天的數據。代碼大體以下:數據庫

// 引入微信sdk文件
require_once APP_DIR . '/ome/lib/wxpay/lib/WxPay.Api.php';
require_once APP_DIR . '/ome/lib/wxpay/log.php';

// 實列化下載對帳單對象
$input = new WxPayDownloadBill();
// 對帳單日期
$input->SetBill_date(date("Ymd", strtotime("-1 day")));
// 對帳單類型
$input->SetBill_type('ALL');
// 獲取帳單信息
$downloadBillResult = WxPayApi::downloadBill($input);

打印$downloadBillResult就會發現他是一個數據文本(string),本文程序須要實現的功能就是從這個字符串從提取每一筆訂單中的有效信息,參考代碼以下:微信

/**
 * 微信對帳單數據處理
 * @param $response 對帳單數據
 * @return array 返回結果
 */
public function deal_WeChat_response($response){
  $result  = array();
  $response = str_replace(","," ",$response);
  $response = explode(PHP_EOL, $response);

  foreach ($response as $key=>$val){
    if(strpos($val, '`') !== false){
      $data = explode('`', $val);
      array_shift($data); // 刪除第一個元素並下標從0開始
      if(count($data) == 24){ // 處理帳單數據
        $result['bill'][] = array(
          'pay_time'       => $data[0], // 支付時間
          'APP_ID'        => $data[1], // app_id
          'MCH_ID'        => $data[2], // 商戶id
          'IMEI'         => $data[4], // 設備號
          'order_sn_wx'     => $data[5], // 微信訂單號
          'order_sn_sh'     => $data[6], // 商戶訂單號
          'user_tag'       => $data[7], // 用戶標識
          'pay_type'       => $data[8], // 交易類型
          'pay_status'      => $data[9], // 交易狀態
          'bank'         => $data[10], // 付款銀行
          'money_type'      => $data[11], // 貨幣種類
          'total_amount'     => $data[12], // 總金額
          'coupon_amount'    => $data[13], // 代金券或立減優惠金額
          'refund_number_wx'   => $data[14], // 微信退款單號
          'refund_number_sh'   => $data[15], // 商戶退款單號
          'refund_amount'    => $data[16], // 退款金額
          'coupon_refund_amount' => $data[17], // 代金券或立減優惠退款金額
          'refund_type'     => $data[18], // 退款類型
          'refund_status'    => $data[19], // 退款狀態
          'goods_name'      => $data[20], // 商品名稱
          'service_charge'    => $data[22], // 手續費
          'rate'         => $data[23], // 費率
        );
      }
      if(count($data) == 5){ // 統計數據
        $result['summary'] = array(
          'order_num'    => $data[0],  // 總交易單數
          'turnover'    => $data[1],  // 總交易額
          'refund_turnover' => $data[2],  // 總退款金額
          'coupon_turnover' => $data[3],  // 總代金券或立減優惠退款金額
          'rate_turnover'  => $data[4],  // 手續費總金額
        );
      }
    }
  }
  return $result;
}

返回的數據分爲2部分,bill節點下存放的是具體流水數據,summary節點下存放的是統計數據app

主要的思路是微信帳單返回的結果格式是固定的,能夠用 '`',換行符(PHP_EOL)實現字符串的分割,而後每 24 個 字段爲一個訂單的描述信息,最後 6 個字段爲帳單的彙總信息。所以經過循環就能夠遍歷整個帳單。ui

轉自「php自學中心 - PHP實現微信對帳單處理spa

相關文章
相關標籤/搜索