Maison  >  Article  >  développement back-end  >  Comment implémenter le paiement par code QR WeChat en PHP

Comment implémenter le paiement par code QR WeChat en PHP

PHPz
PHPzoriginal
2023-04-19 09:20:412072parcourir

Avec la popularité du paiement mobile, WeChat est devenu l'une des méthodes de paiement les plus utilisées en Chine. WeChat Pay propose une variété de méthodes de paiement, et le paiement par code QR est également apprécié par de plus en plus d'utilisateurs. Cet article explique comment utiliser PHP pour implémenter le paiement par code QR WeChat.

1. Conditions préalables

Avant de commencer, vous devez préparer les conditions suivantes :

  1. Compte développeur WeChat
  2. Application de la fonction de paiement WeChat réussie
  3. Construction de l'environnement de développement PHP
  4. SDK de paiement WeChat

II, paiement WeChat processus

Le processus de paiement WeChat peut être brièvement résumé comme les étapes suivantes :

  1. L'utilisateur ouvre la page de paiement du commerçant et sélectionne le mode de paiement
  2. Le commerçant envoie les informations de commande de l'utilisateur au paiement WeChat
  3. Le paiement WeChat génère 2D code et le renvoie au commerçant
  4. Le commerçant affiche le code QR à l'utilisateur
  5. L'utilisateur utilise WeChat pour scanner le code QR et finalise le paiement
  6. WeChat Pay envoie une notification de résultat de paiement au commerçant

Afin de mettre en œuvre le paiement par code QR WeChat, nous devons suivre le processus ci-dessus pour terminer les étapes correspondantes.

3. Étapes de mise en œuvre

  1. Créer un ordre de paiement

Sur le site marchand, l'utilisateur doit renseigner les informations de commande et sélectionner le mode de paiement WeChat. Une fois que l'utilisateur a soumis la commande, le commerçant doit envoyer les informations de commande à WeChat Pay.

En PHP, nous pouvons utiliser la bibliothèque CURL pour envoyer des requêtes POST à ​​l'API de paiement WeChat. Voici un exemple de code :

$url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
$fields = array(
    "appid" => "YOUR_APP_ID", // 公众号ID或应用ID
    "mch_id" => "YOUR_MCH_ID", // 商户号
    "nonce_str" => uniqid(), // 随机字符串
    "out_trade_no" => "YOUR_ORDER_NUMBER", // 商户订单号
    "total_fee" => "YOUR_ORDER_AMOUNT", // 订单金额,单位为分
    "spbill_create_ip" => $_SERVER["REMOTE_ADDR"], // 用户端实际ip
    "notify_url" => "YOUR_NOTIFY_URL", // 支付通知回调地址
    "trade_type" => "NATIVE", // 交易类型,NATIVE为扫码支付
    "product_id" => "PRODUCT_ID", // 商品ID
);
$fields["sign"] = make_sign($fields, "YOUR_MCH_KEY"); // 签名字段
$xml = array_to_xml($fields); // 将数组转换为XML格式
$response = curl_post($url, $xml); // 发送POST请求
$result = xml_to_array($response); // 将响应XML转换为数组格式

Dans le code ci-dessus, nous utilisons les fonctions suivantes :

  • uniqid() est utilisé pour générer une chaîne aléatoire uniqueuniqid() 用于生成一个唯一的随机字符串
  • make_sign() 用于生成签名
  • array_to_xml() 将数组转换为XML格式
  • curl_post() 发送POST请求
  • xml_to_array() 将XML转换为数组格式

其中,签名生成的代码如下:

function make_sign($fields, $key) {
    $string = "";
    ksort($fields);
    foreach ($fields as $k => $v) {
        if ($k != "sign" && $v != "" && !is_array($v)) {
            $string .= $k . "=" . $v . "&";
        }
    }
    $string .= "key=" . $key;
    return strtoupper(md5($string));
}

需要注意的是,商户号和API密钥可在微信支付商户平台中获取。

  1. 生成二维码

在获取到微信支付的响应后,商户需要解析响应中的二维码链接,并将其生成二维码。PHP中,我们可以使用PHPQRCode库来生成二维码,示例代码如下:

require_once("phpqrcode.php");
QRcode::png($result["code_url"]);

在上述代码中,我们首先引入了PHPQRCode库。然后,使用其QRcode::png()方法生成二维码。

  1. 展示二维码

在生成二维码后,商户需要将其展示给用户。在PHP中,我们可以使用<img>标签展示二维码,示例代码如下:

echo "<img src=&#39;data:image/png;base64," . base64_encode(file_get_contents("qrcode.png")) . "&#39; />";

在上述代码中,我们将二维码文件读取为二进制数据,并将其进行Base64编码。然后,将编码后的数据作为图片的URL,使用<img>标签展示二维码。

  1. 支付结果通知

在用户完成支付后,微信支付会向商户的支付结果通知URL推送支付结果。在接收到通知后,商户需要验证通知的有效性,并根据通知中的支付结果更新订单状态。PHP的示例代码如下:

$xml = file_get_contents("php://input");
$data = xml_to_array($xml);
if (check_sign($data, "YOUR_MCH_KEY")) {
    if ($data["return_code"] == "SUCCESS" && $data["result_code"] == "SUCCESS") {
        // 修改订单状态
        // ...
        echo "SUCCESS";
    } else {
        echo "FAIL";
    }
} else {
    echo "FAIL";
}

在上述代码中,我们首先使用file_get_contents("php://input")读取POST请求体中的XML数据,并将其转换为数组格式。然后,使用check_sign()

make_sign () est utilisé pour générer une signature <p></p> <code>array_to_xml() Convertir le tableau au format XML

curl_post() Envoyer une requête POST 🎜🎜xml_to_array( ) Convertir XML au format tableau 🎜🎜Parmi eux, le code généré par la signature est le suivant : 🎜rrreee🎜A noter que le numéro de commerçant et la clé API peuvent être obtenus dans le WeChat Pay plateforme marchande. 🎜
    🎜Générer un code QR🎜🎜🎜Après avoir reçu la réponse du paiement WeChat, le commerçant doit analyser le lien du code QR dans la réponse et générer un code QR. En PHP, nous pouvons utiliser la bibliothèque PHPQRCode pour générer des codes QR. L'exemple de code est le suivant : 🎜rrreee🎜Dans le code ci-dessus, nous avons d'abord introduit la bibliothèque PHPQRCode. Ensuite, utilisez sa méthode QRcode::png() pour générer un code QR. 🎜
      🎜Afficher le code QR🎜🎜🎜Après avoir généré le code QR, le commerçant doit l'afficher à l'utilisateur. En PHP, nous pouvons utiliser la balise <img> pour afficher le code QR. L'exemple de code est le suivant : 🎜rrreee🎜Dans le code ci-dessus, nous lisons le fichier de code QR sous forme de données binaires et. convertir Il est codé en Base64. Ensuite, utilisez les données codées comme URL de l'image et utilisez la balise <img> pour afficher le code QR. 🎜
        🎜Notification du résultat du paiement🎜🎜🎜Une fois que l'utilisateur a terminé le paiement, WeChat Pay transmettra le résultat du paiement à l'URL de notification du résultat du paiement du commerçant. Après avoir reçu la notification, le commerçant doit vérifier la validité de la notification et mettre à jour le statut de la commande en fonction du résultat du paiement indiqué dans la notification. L'exemple de code pour PHP est le suivant : 🎜rrreee🎜Dans le code ci-dessus, nous utilisons d'abord file_get_contents("php://input") pour lire les données XML dans le corps de la requête POST et les convertir. dans un format de tableau. Ensuite, utilisez la fonction check_sign() pour vérifier la validité de la signature. Enfin, le statut de la commande est mis à jour en fonction du résultat du paiement et une réponse « SUCCÈS » ou « ÉCHEC » est envoyée à WeChat Pay. 🎜🎜4. Résumé🎜🎜Cet article présente comment utiliser PHP pour implémenter le paiement par code QR WeChat. Pendant le processus de mise en œuvre, vous devez prêter attention aux détails du processus de paiement WeChat et utiliser raisonnablement les fonctions et bibliothèques liées à PHP. J'espère que cet article pourra vous aider lors de la mise en œuvre du 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