Maison > cadre php > PensezPHP > le corps du texte

Comment utiliser ThinkPHP6 pour les opérations de paiement Alipay et WeChat ?

PHPz
Libérer: 2023-06-12 09:46:01
original
2991 Les gens l'ont consulté

Avec le développement rapide de l'Internet mobile, le paiement électronique joue un rôle de plus en plus important dans la vie moderne. Alipay et WeChat Pay sont devenus l'un des principaux moyens de paiement électronique dans la société moderne. Par conséquent, afin que les applications Web puissent gérer les paiements Alipay et WeChat en douceur, cet article explique comment utiliser ThinkPHP 6 pour les opérations de paiement Alipay et WeChat.

1. Présentez les fichiers de bibliothèque pertinents

Avant d'utiliser ThinkPHP6 pour le paiement Alipay et WeChat, vous devez d'abord introduire les fichiers de bibliothèque pertinents. Je suppose ici que vous avez installé Composer, puis utilisez la commande suivante dans la console pour installer les fichiers de bibliothèque pertinents :

composer require alipay/easysdk
composer require wechatpay/wechatpay
composer require guzzlehttp/guzzle

Parmi eux, alipay/easysdk est le kit de développement Alipay, wechatpay/wechatpay est le SDK de la plateforme ouverte WeChat , guzzlehttp/guzzle Est une bibliothèque PHP permettant d'envoyer des requêtes HTTP à l'API.

2. Opération de paiement Alipay

Le processus principal du processus de paiement Alipay est :

    Construire les informations de commande qui doivent être payées
  1. Appelez l'API Alipay pour lancer une demande de paiement ;
  2. Notification des résultats de paiement Alipay Serveur marchand.
  3. Voici un exemple d'utilisation de ThinkPHP6 pour le paiement Alipay :
  4. use AlipayEasySDKFactory;
    
    class AlipayController extends Controller
    {
        public function index()
        {
            $config = [
                'app_id' => 'your-app-id',
                'private_key' => 'your-private-key',
                'public_key' => 'your-public-key',
                'log' => [
                    'file' => './alipay/easy.log',
                    'level' => 'debug',
                ],
                'notify_url' => 'http://yourwebsite.com/notify',
                'return_url' => 'http://yourwebsite.com/return'
            ];
            
            $app = Factory::create('payment', $config);
            
            $order = [
                'out_trade_no' => date('YmdHis'),
                'total_amount' => 0.01,
                'subject' => 'test',
            ];
            
            $url = $app->order->page($order, 'http://yourwebsite.com/return');
            
            return $url;
        }
    }
    Copier après la connexion
  5. Dans le code ci-dessus, nous faisons d'abord référence à la classe d'usine EasySDK d'Alipay, qui crée une instance de transaction avec une configuration donnée. Ensuite, nous construisons un tableau de commande contenant les informations de commande. Ici, nous définissons le numéro de commande (out_trade_no), le montant de la commande (total_amount) et le sujet de la commande (subject). Ensuite, nous utilisons la méthode de commande pour lancer une demande de paiement, et enfin renvoyons l'URL de paiement à l'utilisateur.

Une fois le paiement effectué, Alipay enverra une requête POST au serveur du commerçant. La demande contient des informations de paiement et appelle le notify_url du commerçant. Dans le code, notify_url pointe vers une adresse du serveur du commerçant, offrant ainsi à ce dernier la possibilité de traiter les résultats de paiement.

3. Opération de paiement WeChat

Le processus principal du processus de paiement WeChat est :

Demander des informations sur la commande de prépaiement auprès du serveur WeChat

Obtenez le prepay_id renvoyé par le serveur WeChat et générez la signature de la commande (veuillez notez que l'ordre de signature est en règle Pour appid, mch_id, nonce_str, prepay_id, trade_type, key);
  1. Le client initie une demande de paiement
  2. Informez le serveur marchand du résultat du paiement WeChat ;
  3. Ce qui suit est un exemple d'utilisation de ThinkPHP6 pour le paiement WeChat :
  4. use WechatPayGuzzleMiddlewareUtilPemUtil;
    use WechatPayNotifyPaidNotify;
    use WechatPayOpenAPIV3PayAppPayClient;
    use WechatPayOpenAPIV3PayJsPayClient;
    
    class WechatController extends Controller
    {
        public function index()
        {
            $merchantId = 'your-mchid';
            $merchantSerialNumber = 'your-serial';
            $merchantPrivateKey = PemUtil::loadPrivateKey('./cert/apiclient_key.pem');
            $wechatpayCertificate = PemUtil::loadCertificate('./cert/wechatpay_certificate.pem');
            $apiV3Key = 'your-key';
    
            $client = new JsPayClient(
                $merchantId,
                $merchantSerialNumber,
                $merchantPrivateKey,
                $wechatpayCertificate,
                $apiV3Key
            );
    
            $params = [
                'body' => 'testbody',
                'out_trade_no' => date('YmdHis'),
                'app_id' => 'your-app-id',
                'notify_url' => 'http://yourwebsite.com/wechat_notify',
                'amount' => [
                    'total' => 1,
                ],
                'description' => 'test_description',
            ];
    
            $result = $client->prepare($params);
            $prepayId = $result['prepay_id'];
    
            $appClient = new AppPayClient(
                $merchantId,
                $merchantSerialNumber,
                $merchantPrivateKey,
                $wechatpayCertificate,
                $apiV3Key
            );
    
            $packageParams = [
                'prepay_id' => $prepayId,
                'trade_type' => 'JSAPI',
                'timeStamp' => strval(time()),
                'nonceStr' => md5(bin2hex(openssl_random_pseudo_bytes(16))), 
            ];
    
            $packageParams['sign'] = $appClient->sign($packageParams);
    
            return json_encode($packageParams); 
        }
    }
    Copier après la connexion
  5. Dans le code ci-dessus, nous avons présenté la bibliothèque GuzzleMiddleware de paiement WeChat et le SDK de la plateforme ouverte de paiement WeChat. Ensuite, nous configurons l'identifiant du commerçant, le numéro de série du commerçant et la clé privée du commerçant (mchid, numéro de série et clé). Ensuite, nous construisons les paramètres liés au paiement et utilisons la méthode prepare de JsPayClient pour obtenir prepay_id. Notez que l'ordre de génération des signatures de commande doit être conforme à appid, mch_id, nonce_str, prepay_id, trade_type et key. Enfin, nous utilisons la méthode sign d'AppPayClient pour générer une signature, sérialiser tous ses paramètres en JSON et la renvoyer à l'utilisateur.

Une fois le paiement effectué, WeChat enverra une requête POST au serveur du commerçant. La demande contient des informations de paiement et appelle l'url notify_url du commerçant. Dans le code, notify_url pointe vers une adresse du serveur du commerçant, offrant ainsi à ce dernier la possibilité de traiter les résultats de paiement.

Pour résumer, cet article présente comment utiliser ThinkPHP6 pour les opérations de paiement Alipay et WeChat. Veuillez noter que cet article ne fournit qu'un exemple de base, vous devez traiter les résultats de paiement et les exceptions plus en détail. Si vous rencontrez des problèmes, veuillez vous référer à la documentation des API d'Alipay et WeChat Pay ou aux informations de plateformes telles que GitHub.

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