Maison > développement back-end > tutoriel php > Comment utiliser PHP pour développer la fonction de paiement du compte officiel WeChat

Comment utiliser PHP pour développer la fonction de paiement du compte officiel WeChat

PHPz
Libérer: 2023-10-27 10:58:01
original
771 Les gens l'ont consulté

Comment utiliser PHP pour développer la fonction de paiement du compte officiel WeChat

Comment utiliser PHP pour développer la fonction de paiement du compte officiel WeChat

Avec le développement rapide du paiement mobile, le paiement WeChat, en tant que l'un des modes de paiement les plus courants en Chine, est devenu un moyen de paiement nécessaire pour de nombreuses entreprises et les particuliers. Lors du développement d'un compte public WeChat, si la fonction de paiement peut être intégrée, elle fournira aux utilisateurs un mode de paiement plus pratique et apportera plus d'avantages à l'entreprise. Cet article présentera comment utiliser PHP pour développer la fonction de paiement des comptes officiels WeChat et fournira des exemples de code spécifiques.

Tout d'abord, nous devons comprendre le processus de base du paiement du compte officiel WeChat. Elle se divise principalement en les étapes suivantes :

  1. L'utilisateur initie une demande de paiement dans le compte officiel WeChat.
  2. Le compte officiel envoie la demande de paiement à la plateforme de paiement WeChat.
  3. La plateforme de paiement WeChat renvoie l'ID de session de transaction de prépaiement (prepay_id).
  4. Le compte public utilise prepay_id pour générer une signature et la renvoie au front-end.
  5. Le front-end ouvre l'interface de paiement WeChat et l'utilisateur termine l'opération de paiement.
  6. La plateforme de paiement WeChat envoie des notifications de résultat de paiement au compte public.
  7. Le compte officiel vérifie la validité de la notification et traite les résultats du paiement.

Ensuite, nous implémenterons le code spécifique à ces étapes.

Dans un premier temps, l'utilisateur initie une demande de paiement sur le compte officiel WeChat. Nous devons ajouter un bouton de paiement à l'interface frontale et déclencher une demande de paiement lorsque vous cliquez sur le bouton. Le code spécifique est le suivant :

<button id="payBtn">支付</button>
<script src="https://res.wx.qq.com/open/js/jweixin-1.6.0.js"></script>
<script>
    document.getElementById('payBtn').addEventListener('click', function() {
        // 调用后端接口获取支付参数
        fetch('/getPayParams.php', {
            method: 'GET'
        })
        .then(response => response.json())
        .then(data => {
            // 调起微信支付界面
            wx.chooseWXPay({
                appId: data.appId,
                timestamp: data.timestamp,
                nonceStr: data.nonceStr,
                package: data.package,
                signType: data.signType,
                paySign: data.paySign,
                success: function(res) {
                    // 支付成功后的操作
                },
                cancel: function(res) {
                    // 用户取消支付
                },
                fail: function(res) {
                    // 支付失败
                }
            });
        });
    });
</script>
Copier après la connexion

Dans le code ci-dessus, nous utilisons le JS-SDK fourni par WeChat pour déclencher l'interface de paiement WeChat en appelant la méthode wx.chooseWXPay.

Dans un deuxième temps, le compte officiel envoie la demande de paiement à la plateforme de paiement WeChat. Nous devons écrire du code sur le backend qui reçoit les demandes de paiement et les envoie à la plateforme de paiement WeChat. Le code spécifique est le suivant :

<?php
// 获取参数
$totalFee = $_GET['totalFee']; // 支付金额,单位为分,例如100表示1元

// 构造请求数据
$data = [
    'appid' => '公众号的AppID',
    'mch_id' => '商户号',
    'nonce_str' => uniqid(), // 随机字符串
    'body' => '支付测试', // 商品描述
    'out_trade_no' => time(), // 商户订单号
    'total_fee' => $totalFee, // 支付金额
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'], // 终端IP
    'notify_url' => '支付结果通知的接收地址',
    'trade_type' => 'JSAPI', // 交易类型
    'openid' => '用户的openid'
];

// 生成签名
$data['sign'] = md5(http_build_query($data) . '&key=商户的Key');

// 将请求数据转为XML格式
$xmlData = '<xml>';
foreach ($data as $key => $value) {
    $xmlData .= "<$key>$value</$key>";
}
$xmlData .= '</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, $xmlData);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$response = curl_exec($ch);
curl_close($ch);

// 解析支付结果
$responseData = simplexml_load_string($response, null, LIBXML_NOCDATA);
if ($responseData->return_code == 'SUCCESS' && $responseData->result_code == 'SUCCESS') {
    $prepayId = $responseData->prepay_id; // 获取预支付交易会话标识
    // 构造返回数据
    $returnData = [
        'appId' => '公众号的AppID',
        'timeStamp' => time(),
        'nonceStr' => uniqid(),
        'package' => 'prepay_id=' . $prepayId,
        'signType' => 'MD5'
    ];
    $returnData['paySign'] = md5(http_build_query($returnData) . '&key=商户的Key');

    echo json_encode($returnData);
} else {
    echo '支付请求失败';
}
?>
Copier après la connexion

Dans le code ci-dessus, nous obtenons d'abord le montant du paiement et d'autres paramètres transmis par le front-end, puis construisons les données de la demande et envoyons la demande à l'interface de commande unifiée de la plateforme de paiement WeChat. via cURL. Ensuite, nous analysons le résultat du paiement et, si la demande de paiement aboutit, renvoyons l'ID de session de transaction de prépaiement (prepay_id) au front-end.

La troisième étape consiste à ouvrir l'interface de paiement WeChat sur le front-end. Le code précédent a déjà implémenté cette fonction, nous n'avons pas besoin de code supplémentaire.

La quatrième étape est que la plateforme de paiement WeChat envoie une notification du résultat du paiement au compte officiel. Nous devons écrire du code sur le backend du compte officiel pour recevoir et traiter les notifications de résultat de paiement. Le code spécifique est le suivant :

<?php
// 接收支付结果通知
$xmlData = file_get_contents('php://input');
$responseData = simplexml_load_string($xmlData, null, LIBXML_NOCDATA);

// 验证通知的有效性
if ($responseData->return_code == 'SUCCESS' && $responseData->result_code == 'SUCCESS') {
    // 处理支付结果
    // do something
    // 返回处理结果给微信支付平台
    echo '<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>';
} else {
    echo '支付结果通知验证失败';
}
?>
Copier après la connexion

Dans le code ci-dessus, nous obtenons d'abord les données XML de la notification de résultat de paiement, puis analysons les données et vérifions la validité de la notification. Si la vérification est réussie, le résultat du paiement est traité et finalement le résultat du traitement est renvoyé à la plateforme de paiement WeChat.

Avec le code ci-dessus, nous pouvons utiliser PHP pour développer la fonction de paiement du compte officiel WeChat. Bien entendu, dans le processus de développement lui-même, des facteurs tels que la sécurité et l’expérience utilisateur doivent également être pris en compte et optimisés en conséquence.

Pour résumer, utiliser PHP pour développer la fonction de paiement du compte officiel WeChat nécessite de réaliser les étapes suivantes : ajouter un bouton de paiement dans l'interface front-end et déclencher une demande de paiement, le back-end reçoit la demande de paiement et l'envoie à la plateforme de paiement WeChat et le front-end active l'interface de paiement WeChat, le backend reçoit et traite les notifications de résultat de paiement. Grâce à l'implémentation du code des étapes ci-dessus, nous pouvons facilement implémenter la fonction de paiement du compte officiel 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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal