Avec la popularité du paiement mobile, le paiement WeChat est devenu un moyen de paiement incontournable. En tant que développeur, la demande de facture est un élément essentiel lors de l’utilisation de WeChat Pay. Cet article explique comment utiliser le langage PHP pour interroger les relevés de paiement WeChat.
Avant d'utiliser le paiement WeChat, vous devez d'abord configurer les informations du compte de paiement WeChat. Après avoir enregistré un compte dans le centre de développement WeChat Pay (https://pay.weixin.qq.com/) et complété les certifications pertinentes, vous pouvez obtenir l'APPID, l'identifiant du commerçant, la clé du commerçant et d'autres informations de WeChat Pay.
Une fois le paiement WeChat terminé, le système générera l'enregistrement de transaction correspondant et téléchargera l'enregistrement de transaction sur le serveur de paiement WeChat. Nous pouvons obtenir le lien de téléchargement du relevé en appelant l'API fournie par WeChat Pay.
L'API spécifique est : https://api.mch.weixin.qq.com/pay/downloadbill
L'API doit transmettre les paramètres suivants :
Nom du paramètre | Obligatoire | Type | Exemple de valeur | Description |
---|---|---|---|---|
appid | est | string(32) | wxd678efh567hg6787 | L'ID de compte public attribué par WeChat |
mch_ l'identifiant | est | string(32) | 1230000109 | Le numéro de commerçant |
nonce_str | attribué par WeChat Pay est | string(32) | 5K8264ILTKCH16CQ2502SI8ZNMTM67VS | random string |
sign | est | string(32) | C380BEC2BFD727A4B6845133519F3AD6 | Signature |
Parmi eux, la génération de signature doit se référer aux règles de signature de WeChat Pay. Pour les méthodes de mise en œuvre spécifiques, veuillez vous référer aux documents officiels fournis par WeChat Pay.
Grâce au lien de téléchargement de la déclaration obtenu à l'étape précédente, nous pouvons utiliser la bibliothèque curl de PHP pour télécharger la déclaration. L'implémentation spécifique du code est la suivante :
$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);
La déclaration téléchargée est un fichier csv et doit être analysée par PHP pour un traitement ultérieur. Nous pouvons utiliser la fonction fgetcsv pour lire les données de chaque ligne, puis analyser les données.
L'implémentation spécifique du code est la suivante :
$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; }
L'instruction renvoie les données d'origine, ce qui nécessite un certain traitement pour obtenir le résultat du rapprochement. Nous pouvons regrouper les données en fonction des numéros de commande des commerçants, puis filtrer les données en fonction du numéro de commande, du type de transaction, de l'état de la transaction et d'autres conditions. Enfin, les résultats du rapprochement peuvent être affichés sur la page HTML.
L'implémentation spécifique du code est la suivante :
$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>";
À ce stade, le processus d'utilisation de PHP pour implémenter la requête de relevé de paiement WeChat est terminé. J'espère que cet article pourra aider les amis développeurs qui utilisent WeChat Pay.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!