>  기사  >  백엔드 개발  >  PHP를 사용하여 WeChat 결제 명세서 조회를 구현하는 방법

PHP를 사용하여 WeChat 결제 명세서 조회를 구현하는 방법

PHPz
PHPz원래의
2023-05-13 20:51:041935검색

모바일 결제가 대중화되면서 위챗 결제는 무시할 수 없는 결제 수단이 되었습니다. 개발자로서 위챗페이를 사용할 때 청구서 조회는 필수적인 부분입니다. 이 기사에서는 PHP 언어를 사용하여 WeChat 결제 명세서를 쿼리하는 방법을 소개합니다.

  1. WeChat 결제 계정 정보 가져오기

WeChat 결제를 사용하기 전에 먼저 WeChat 결제 계정 정보를 구성해야 합니다. WeChat Pay 개발자 센터(https://pay.weixin.qq.com/)에 계정을 등록하고 관련 인증을 완료하면 WeChat Pay의 APPID, 판매자 ID, 판매자 키 및 기타 정보를 얻을 수 있습니다.

  1. 내역서 받기

WeChat 결제가 완료된 후 시스템은 해당 거래 기록을 생성하고 해당 거래 기록을 WeChat 결제 서버에 업로드합니다. 위챗페이에서 제공하는 API를 호출하면 명세서 다운로드 링크를 얻을 수 있습니다.

구체적인 API는 다음과 같습니다: https://api.mch.weixin.qq.com/pay/downloadbill

API는 다음 매개변수를 전달해야 합니다.

입니다.
매개변수 이름 필수 유형 예시 값 Description
appid string(32) wxd678efh567hg6787 WeChat
mch_id에서 할당한 공용 계정 ID입니다. string(32) 1230000109입니다. WeChat Pay에서 할당한 판매자 번호
nonce_str string(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS random string
sign string(32) C380BEC2BFD727A4B6845133519F3AD6 서명입니다.

그 중 서명세대는 위챗페이의 서명규칙을 참고해야 합니다. 구체적인 구현 방법은 WeChat Pay에서 제공하는 공식 문서를 참조하세요.

  1. 명령문 다운로드

이전 단계에서 얻은 명령문 다운로드 링크를 통해 PHP의 컬 라이브러리를 사용하여 명령문을 다운로드할 수 있습니다. 구체적인 코드 구현은 다음과 같습니다.

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

이제 PHP를 사용하여 WeChat 결제 명세서 쿼리를 구현하는 프로세스는 끝났습니다. 이 글이 위챗페이를 사용하는 개발자 친구들에게 도움이 되기를 바랍니다.

위 내용은 PHP를 사용하여 WeChat 결제 명세서 조회를 구현하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.