Maison  >  Article  >  développement back-end  >  Comment utiliser PHP pour mettre en œuvre la demande de relevé de paiement WeChat

Comment utiliser PHP pour mettre en œuvre la demande de relevé de paiement WeChat

PHPz
PHPzoriginal
2023-05-13 20:51:041876parcourir

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.

  1. Obtenir les informations du compte 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.

  1. Obtenir le relevé

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.

  1. Téléchargez la déclaration

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);
  1. Analyser la déclaration

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;
}
  1. Traitement des données

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn