Maison >développement back-end >tutoriel php >Comment utiliser PHP et OAuth pour l'intégration des paiements WeChat

Comment utiliser PHP et OAuth pour l'intégration des paiements WeChat

王林
王林original
2023-07-28 19:30:281621parcourir

Comment intégrer le paiement WeChat en utilisant PHP et OAuth

Introduction :
Avec la popularité du paiement mobile, le paiement WeChat est devenu le mode de paiement préféré de nombreuses personnes. L'intégration de WeChat Pay dans un site Web ou une application peut offrir aux utilisateurs une expérience de paiement pratique. Cet article explique comment utiliser PHP et OAuth pour l'intégration des paiements WeChat et fournit des exemples de code pertinents.

1. Demander WeChat Pay
Avant d'utiliser WeChat Pay, vous devez d'abord demander un compte marchand WeChat Pay et les clés associées. Pour le processus de candidature spécifique, veuillez vous référer aux documents officiels de WeChat Pay.

2. Sélection de la bibliothèque PHP OAuth
OAuth est un standard ouvert d'autorisation, qui permet aux utilisateurs d'autoriser des applications tierces à accéder à leurs informations. Dans WeChat Pay, OAuth est utilisé dans le processus de connexion et de paiement avec autorisation de l'utilisateur. En PHP, il existe de nombreuses bibliothèques OAuth open source parmi lesquelles choisir, telles que OAuth1 et OAuth2.

3. Installez et configurez la bibliothèque OAuth

  1. Téléchargez et installez la bibliothèque OAuth
    PHP propose de nombreuses excellentes bibliothèques OAuth, telles que php-oauth2-client. Il peut être installé via composer. La commande d'installation spécifique est la suivante :
composer require thephpleague/oauth2-client
  1. Configurer la bibliothèque OAuth
    Dans le projet, vous devez créer un fichier Config.php pour la configuration de la bibliothèque OAuth. Ce fichier doit contenir des informations de configuration liées au paiement WeChat, telles que le numéro du commerçant, la clé, etc. L'exemple de code est le suivant :
<?php
class Config {
    public static $wechatPayConfig = [
        'clientId'          => 'YOUR_CLIENT_ID',
        'clientSecret'      => 'YOUR_CLIENT_SECRET',
        'redirectUri'       => 'YOUR_REDIRECT_URI',

        'wechatPayApiUrl'   => 'https://api.mch.weixin.qq.com/pay/unifiedorder',
        'wechatPayAppId'    => 'YOUR_APP_ID',
        'wechatPayMchId'    => 'YOUR_MCH_ID',
        'wechatPayApiKey'   => 'YOUR_API_KEY'
    ];
}
?>

4. Utilisez OAuth pour l'intégration du paiement WeChat

  1. Connexion autorisée
    Avant d'utiliser le paiement WeChat, les utilisateurs doivent d'abord autoriser la connexion. Ceci peut être réalisé grâce à l'exemple de code suivant :
<?php
require 'vendor/autoload.php';
use LeagueOAuth2ClientProviderGenericProvider;

$provider = new GenericProvider([
    'clientId'                => Config::$wechatPayConfig['clientId'],
    'clientSecret'            => Config::$wechatPayConfig['clientSecret'],
    'redirectUri'             => Config::$wechatPayConfig['redirectUri'],
    'urlAuthorize'            => 'https://open.weixin.qq.com/connect/oauth2/authorize',
    'urlAccessToken'          => 'https://api.weixin.qq.com/sns/oauth2/access_token',
    'urlResourceOwnerDetails' => 'https://api.weixin.qq.com/sns/userinfo'
]);

// 获取授权码
if (!isset($_GET['code'])) {
    $authorizationUrl = $provider->getAuthorizationUrl();
    $_SESSION['oauth2state'] = $provider->getState();
    header('Location: ' . $authorizationUrl);
    exit();
}

try {
    $accessToken = $provider->getAccessToken('authorization_code', [
        'code' => $_GET['code']
    ]);

    $resourceOwner = $provider->getResourceOwner($accessToken);
    $openid = $resourceOwner->getValues()['openid'];

    // TODO: 将openid保存到数据库中
} catch (Exception $e) {
    // 错误处理
}
?>
  1. Initier une demande de paiement
    Une fois que l'utilisateur a autorisé et s'est connecté, il peut lancer une demande de paiement. Ceci peut être réalisé grâce à l'exemple de code suivant :
<?php
require 'vendor/autoload.php';

$wechatPay = new WechatPay(Config::$wechatPayConfig);
$prepayInfo = $wechatPay->unifiedOrder([
    'body'             => '支付测试',
    'out_trade_no'     => time(),
    'total_fee'        => '1',
    'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
    'notify_url'       => 'http://www.example.com/notify.php',
    'trade_type'       => 'JSAPI',
    'openid'           => $openid
]);

$prepayParams = $wechatPay->getJSSDKParams($prepayInfo['prepay_id']);

// 将$prepayParams传递给前端进行支付
?>
  1. Traitement du rappel de paiement
    Une fois le paiement réussi, le serveur WeChat rappellera le notify_url spécifié pour notifier le résultat du paiement. Ceci peut être réalisé grâce à l'exemple de code suivant :
<?php
require 'vendor/autoload.php';
use WechatPayNotify;

$notify = new Notify(Config::$wechatPayConfig);
$notifyResult = $notify->handleNotify(); // 处理支付结果通知

if ($notifyResult) {
    // TODO: 更新数据库中的订单状态
    echo 'success'; // 返回给微信服务器,表示已成功处理通知
} else {
    // TODO: 删除数据库中的订单,或者进行其他处理
    echo 'fail';
}
?>

Résumé :
Grâce aux étapes ci-dessus, nous pouvons implémenter la fonction de paiement WeChat basée sur PHP et OAuth. Tout d'abord, implémentez la connexion par autorisation utilisateur via OAuth et obtenez l'openid de l'utilisateur. Ensuite, utilisez openid et les paramètres associés pour effectuer une demande de paiement. Enfin, dans la notification du résultat du paiement, le résultat du paiement est traité et le statut de la commande associé est mis à jour. Grâce à cette méthode, nous pouvons facilement intégrer le paiement WeChat dans des sites Web ou des applications.

Ce qui précède est l'exemple de code de cet article. J'espère qu'il sera utile à tout le monde lors de l'intégration du paiement WeChat à l'aide de PHP et OAuth.

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