Maison  >  Article  >  développement back-end  >  Guide du traitement des paiements et des remboursements en ligne avec PHP et les mini-programmes

Guide du traitement des paiements et des remboursements en ligne avec PHP et les mini-programmes

王林
王林original
2023-07-04 13:19:391113parcourir

Guide du traitement des paiements et des remboursements en ligne avec PHP et mini-programmes

Avec le développement continu du commerce électronique, de plus en plus d'entreprises commencent à utiliser les fonctions de paiement et de remboursement en ligne pour offrir aux consommateurs des méthodes de paiement pratiques et rapides. En tant que langage de programmation côté serveur couramment utilisé, PHP peut être combiné avec de petits programmes pour réaliser des fonctions de paiement et de remboursement en ligne. Cet article présentera comment utiliser PHP et des mini-programmes pour développer des fonctions de paiement et de remboursement en ligne, et fournira des exemples de code pour référence aux lecteurs.

1. Fonction de paiement en ligne

  1. Préparation

Tout d'abord, nous devons préparer un compte marchand et une clé, ainsi que l'interface de l'API de paiement WeChat. Dans le mini programme, nous pouvons utiliser l'interface de paiement du mini programme de WeChat Pay pour compléter la fonction de paiement. Pour plus de détails, veuillez vous référer à la documentation de développement de WeChat Payment.

  1. Développement client

Dans la page frontale du mini programme, nous pouvons utiliser la méthode wx.requestPayment() de WeChat Pay pour activer la fonction de paiement. Le code spécifique est le suivant :

wx.requestPayment({
  'timeStamp': '',
  'nonceStr': '',
  'package': '',
  'signType': 'MD5',
  'paySign': '',
  'success': function(res){
     // 支付成功的回调函数
  },
  'fail': function(res){
     // 支付失败的回调函数
  }
})

Dans cette méthode, nous devons transmettre certains paramètres de paiement, tels que l'horodatage, la chaîne aléatoire, les informations de commande, etc. Ces paramètres peuvent être obtenus côté serveur. Pour plus de détails, veuillez vous référer à la documentation de développement de WeChat Payment.

  1. Développement côté serveur

Côté serveur, nous devons utiliser PHP pour traiter les demandes de paiement. Le code spécifique est le suivant :

<?php
  $appid = 'your_appid'; // 小程序的appid
  $mch_id = 'your_mch_id'; // 商户号
  $key = 'your_key'; // 商户密钥
  $body = '商品描述';
  $out_trade_no = '订单号';
  $total_fee = '总金额';

  $params = array(
    'appid' => $appid,
    'mch_id' => $mch_id,
    'nonce_str' => md5(rand()),
    'body' => $body,
    'out_trade_no' => $out_trade_no,
    'total_fee' => $total_fee,
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
    'trade_type' => 'JSAPI',
    'openid' => '用户openid'
  );

  ksort($params);
  $string = http_build_query($params);
  $string = urldecode($string).'&key='.$key;
  $sign = strtoupper(md5($string));

  $params['sign'] = $sign;

  $xml = '<xml>';
  foreach ($params as $key => $value) {
    $xml .= '<'.$key.'>'.$value.'</'.$key.'>';
  }
  $xml .= '</xml>';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.mch.weixin.qq.com/pay/unifiedorder');
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $result = curl_exec($ch);
  curl_close($ch);

  $result = simplexml_load_string($result);
  $prepay_id = $result->prepay_id; // 预支付id

  $params = array(
    'appId' => $appid,
    'timeStamp' => time(),
    'nonceStr' => md5(rand()),
    'package' => 'prepay_id='.$prepay_id,
    'signType' => 'MD5'
  );

  ksort($params);
  $string = http_build_query($params);
  $string = urldecode($string).'&key='.$key;
  $sign = strtoupper(md5($string));

  $params['paySign'] = $sign;

  echo json_encode($params);
?>

Dans ce code, nous devons d'abord générer une signature basée sur le commerçant. compte et clé, et ajoutez les paramètres pertinents. Les paramètres sont fusionnés dans une chaîne au format XML et la demande de paiement est envoyée à l'interface de paiement WeChat via cURL. Après avoir reçu le résultat du retour, nous fusionnons l'ID de prépaiement dans le résultat dans une autre signature, puis renvoyons les paramètres pertinents à l'applet.

2. Fonction de remboursement

  1. Développement client

Dans la page front-end du mini programme, nous pouvons utiliser la méthode wx.request() pour lancer une demande de remboursement. Le code spécifique est le suivant :

wx.request({
  url: 'https://your_domain.com/refund.php',
  method: 'POST',
  data: {
    'out_trade_no': '订单号',
    'refund_fee': '退款金额'
  },
  success: function(res){
     // 退款成功的回调函数
  },
  fail: function(res){
     // 退款失败的回调函数
  }
})
  1. Développement côté serveur

Côté serveur, nous devons utiliser PHP pour gérer les demandes de remboursement. Le code spécifique est le suivant :

<?php
  $appid = 'your_appid'; // 小程序的appid
  $mch_id = 'your_mch_id'; // 商户号
  $key = 'your_key'; // 商户密钥
  $out_trade_no = '订单号';
  $refund_fee = '退款金额';

  $params = array(
    'appid' => $appid,
    'mch_id' => $mch_id,
    'nonce_str' => md5(rand()),
    'out_trade_no' => $out_trade_no,
    'out_refund_no' => $out_trade_no,
    'total_fee' => $refund_fee,
    'refund_fee' => $refund_fee
  );

  ksort($params);
  $string = http_build_query($params);
  $string = urldecode($string).'&key='.$key;
  $sign = strtoupper(md5($string));

  $params['sign'] = $sign;

  $xml = '<xml>';
  foreach ($params as $key => $value) {
    $xml .= '<'.$key.'>'.$value.'</'.$key.'>';
  }
  $xml .= '</xml>';

  $ch = curl_init();
  curl_setopt($ch, CURLOPT_URL, 'https://api.mch.weixin.qq.com/secapi/pay/refund');
  curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
  curl_setopt($ch, CURLOPT_SSLCERT, 'cert.pem');
  curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
  curl_setopt($ch, CURLOPT_SSLKEY, 'key.pem');
  curl_setopt($ch, CURLOPT_POST, true);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  $result = curl_exec($ch);
  curl_close($ch);

  $result = simplexml_load_string($result);

  if ($result->return_code == 'SUCCESS' && $result->result_code == 'SUCCESS') {
    // 退款成功的处理逻辑
  }
?>

Dans ce code, nous avons d'abord besoin. pour utiliser le compte marchand et la clé Générez une signature, concaténez les paramètres pertinents dans une chaîne au format XML et envoyez la demande de remboursement à l'interface de paiement WeChat via cURL. Après avoir reçu le résultat du retour, nous pouvons déterminer si le remboursement a réussi en fonction du return_code et du result_code dans le résultat.

3. Résumé

Grâce aux étapes ci-dessus, nous pouvons utiliser PHP et des mini-programmes pour développer des fonctions de paiement et de remboursement en ligne. Dans les applications pratiques, les fonctions peuvent également être étendues en fonction de besoins spécifiques, comme l'ajout d'une demande de commande, d'une demande de remboursement et d'autres fonctions. J'espère que cet article vous sera utile lorsque vous utiliserez PHP et des mini-programmes pour développer des fonctions de paiement et de remboursement en ligne.

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