Maison >développement back-end >tutoriel php >Développement PHP : Comment implémenter la fonction de paiement WeChat

Développement PHP : Comment implémenter la fonction de paiement WeChat

WBOY
WBOYoriginal
2023-09-20 10:52:531689parcourir

Développement PHP : Comment implémenter la fonction de paiement WeChat

Développement PHP : Comment mettre en œuvre la fonction de paiement WeChat nécessite des exemples de code spécifiques

Dans le processus de vulgarisation et de développement du paiement mobile, le paiement WeChat est devenu l'un des outils de paiement auxquels font confiance la majorité des utilisateurs. En tant que développeur PHP, maîtriser et mettre en œuvre la fonction de paiement WeChat est très important pour les sites Web commerciaux ou les applications de commerce électronique. Cet article explique comment utiliser le langage PHP pour implémenter la fonction de paiement WeChat et fournit des exemples de code spécifiques.

  1. Préparation

Avant de commencer, nous devons préparer les conditions nécessaires suivantes :

  • Un compte développeur WeChat valide et activer la fonction de paiement WeChat
  • Environnement d'exécution PHP, il est recommandé d'utiliser la version PHP7 et supérieure
  • Installé et configuré l'extension cURL
  • Téléchargé et importé le SDK (Kit de développement) de WeChat Pay
  1. Configurer les informations de paiement de base

Avant de développer la fonction de paiement, nous devons d'abord configurer quelques informations de base, notamment :

  • Numéro marchand (mch_id) : l'identification unique du commerçant sur la plateforme de paiement WeChat
  • Application ID (appid) : l'identifiant de l'application enregistré par le développeur sur la plateforme ouverte WeChat
  • Clé API (key) : utilisée pour la signature et Clé pour vérifier les messages de paiement
  • Chemin du certificat : Chemin du certificat utilisé pour vérifier les résultats de paiement renvoyés par le serveur de paiement WeChat

Dans le code, ces informations peuvent être définies sous forme de constantes ou de fichiers de configuration pour faciliter les appels et la gestion ultérieurs.

define('MCH_ID', '商户号');
define('APPID', '应用ID');
define('KEY', 'API密钥');
define('CERT_PATH', '证书路径');
  1. Générer un ordre de paiement

Une fois que l'utilisateur a cliqué sur le bouton de paiement, nous devons générer un ordre de paiement et le soumettre au serveur de paiement WeChat pour traitement. Voici un exemple de code simple pour générer un ordre de paiement :

function createOrder($body, $out_trade_no, $total_fee, $notify_url) {
    $params = array(
        'appid' => APPID,
        'mch_id' => MCH_ID,
        'nonce_str' => uniqid(),
        'body' => $body,
        'out_trade_no' => $out_trade_no,
        'total_fee' => $total_fee,
        'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
        'notify_url' => $notify_url,
        'trade_type' => 'APP'
    );

    $params['sign'] = generateSign($params);

    $xml = arrayToXml($params);

    $response = sendRequest('https://api.mch.weixin.qq.com/pay/unifiedorder', $xml);

    $result = xmlToArray($response);

    return $result;
}

function generateSign($params) {
    ksort($params);

    $string = '';
    foreach ($params as $key => $value) {
        if ($key != 'sign' && $value != '') {
            $string .= "{$key}={$value}&";
        }
    }

    $string .= "key=" . KEY;

    return strtoupper(md5($string));
}

function arrayToXml($array) {
    $xml = "<xml>";
    foreach ($array as $key => $value) {
        $xml .= "<{$key}><![CDATA[{$value}]]></{$key}>";
    }
    $xml .= "</xml>";

    return $xml;
}

function sendRequest($url, $data) {
    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
    curl_setopt($ch, CURLOPT_SSLCERTTYPE, 'PEM');
    curl_setopt($ch, CURLOPT_SSLCERT, CERT_PATH);
    curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');
    curl_setopt($ch, CURLOPT_SSLKEY, CERT_PATH);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

    $response = curl_exec($ch);
    curl_close($ch);

    return $response;
}

Dans le code ci-dessus, la fonction createOrder est utilisée pour générer un ordre de paiement et appeler l'interface de paiement WeChat (https://api.mch.weixin.qq. com/pay/unifiedorder ) pour créer un ticket de transaction de prépaiement. La fonction generateSign est utilisée pour générer une signature, la fonction arrayToXml est utilisée pour convertir le tableau de paramètres au format XML et la fonction sendRequest est utilisée pour envoyer une requête HTTP.

  1. Traitement des résultats de paiement

Le serveur de paiement WeChat enverra les résultats de paiement à notre URL de rappel prédéfinie via POST. Nous devons analyser les résultats de paiement dans le code de l'URL de rappel et effectuer les opérations correspondantes si nécessaire. Voici un exemple de code simple pour le traitement des résultats de paiement :

$xml = file_get_contents("php://input");
$data = xmlToArray($xml);

if (isset($data['result_code']) && $data['result_code'] == 'SUCCESS') {
    // 支付成功,更新订单状态等操作
    // ...

    $response = array(
        'return_code' => 'SUCCESS',
        'return_msg' => 'OK'
    );
} else {
    // 支付失败,记录错误日志等操作
    // ...

    $response = array(
        'return_code' => 'FAIL',
        'return_msg' => 'ERROR'
    );
}

$responseXml = arrayToXml($response);
echo $responseXml;

Dans le code ci-dessus, nous obtenons le XML du résultat de paiement de POST via la fonction file_get_contents et le convertissons en un tableau associatif. Si le result_code dans le résultat du paiement est SUCCESS, cela signifie que le paiement a réussi et que nous pouvons effectuer les mises à jour correspondantes du statut de la commande et d'autres opérations ; sinon, cela signifie que le paiement a échoué et nous pouvons enregistrer des journaux d'erreurs et d'autres opérations ;

Ce qui précède est un exemple simple d'utilisation de PHP pour implémenter la fonction de paiement WeChat. Grâce à ces codes, la fonction de paiement de base de WeChat peut être réalisée. Bien entendu, les projets réels peuvent impliquer davantage de considérations fonctionnelles et de sécurité, qui nécessitent un développement et un débogage plus approfondis en fonction de besoins spécifiques. J'espère que cet article vous aidera à comprendre et à mettre en œuvre la fonction de paiement WeChat.

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