모바일 결제가 대중화되면서 위챗 결제는 무시할 수 없는 결제 수단이 되었습니다. 개발자로서 위챗페이를 사용할 때 청구서 조회는 필수적인 부분입니다. 이 기사에서는 PHP 언어를 사용하여 WeChat 결제 명세서를 쿼리하는 방법을 소개합니다.
WeChat 결제를 사용하기 전에 먼저 WeChat 결제 계정 정보를 구성해야 합니다. WeChat Pay 개발자 센터(https://pay.weixin.qq.com/)에 계정을 등록하고 관련 인증을 완료하면 WeChat Pay의 APPID, 판매자 ID, 판매자 키 및 기타 정보를 얻을 수 있습니다.
WeChat 결제가 완료된 후 시스템은 해당 거래 기록을 생성하고 해당 거래 기록을 WeChat 결제 서버에 업로드합니다. 위챗페이에서 제공하는 API를 호출하면 명세서 다운로드 링크를 얻을 수 있습니다.
구체적인 API는 다음과 같습니다: https://api.mch.weixin.qq.com/pay/downloadbill
API는 다음 매개변수를 전달해야 합니다.
매개변수 이름 | 필수 | 유형 | 예시 값 | Description |
---|---|---|---|---|
appid | 은 | string(32) | wxd678efh567hg6787 | |
mch_id에서 할당한 공용 계정 ID입니다. | 는 | string(32) | 1230000109입니다. | WeChat Pay에서 할당한 판매자 번호 |
nonce_str | 은 | string(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | random string |
sign | 은 | string(32) | C380BEC2BFD727A4B6845133519F3AD6 | 서명입니다. |
그 중 서명세대는 위챗페이의 서명규칙을 참고해야 합니다. 구체적인 구현 방법은 WeChat Pay에서 제공하는 공식 문서를 참조하세요.
이전 단계에서 얻은 명령문 다운로드 링크를 통해 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);
다운로드한 문은 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; }
문은 원본 데이터를 반환하며, 조정 결과를 얻으려면 특정 처리가 필요합니다. 판매자 주문 번호에 따라 데이터를 그룹화한 다음 주문 번호, 거래 유형, 거래 상태 및 기타 조건에 따라 데이터를 필터링할 수 있습니다. 마지막으로 조정 결과를 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!