Heim  >  Artikel  >  PHP-Framework  >  Wie verwende ich ThinkPHP6 für Alipay- und WeChat-Zahlungsvorgänge?

Wie verwende ich ThinkPHP6 für Alipay- und WeChat-Zahlungsvorgänge?

PHPz
PHPzOriginal
2023-06-12 09:46:012932Durchsuche

Mit der rasanten Entwicklung des mobilen Internets spielt das elektronische Bezahlen eine immer wichtigere Rolle im modernen Leben. Alipay und WeChat Pay sind zu einem der wichtigsten elektronischen Zahlungsmittel in der modernen Gesellschaft geworden. Damit Webanwendungen Alipay- und WeChat-Zahlungen reibungslos abwickeln können, wird in diesem Artikel erläutert, wie ThinkPHP 6 für Alipay- und WeChat-Zahlungsvorgänge verwendet wird.

1. Relevante Bibliotheksdateien einführen

Bevor Sie ThinkPHP6 für Alipay- und WeChat-Zahlungen verwenden, müssen Sie zunächst relevante Bibliotheksdateien einführen. Ich gehe hier davon aus, dass Sie Composer installiert haben, und verwenden Sie dann den folgenden Befehl in der Konsole, um die relevanten Bibliotheksdateien zu installieren:

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

Darunter ist alipay/easysdk das Alipay-Entwicklungskit, wechatpay/wechatpay ist das WeChat-SDK für die offene Plattform , guzzlehttp/guzzle Ist eine PHP-Bibliothek zum Senden von HTTP-Anfragen an die API.

2. Alipay-Zahlungsvorgang:

Erstellen Sie die zu bezahlenden Bestellinformationen.
  1. Benutzer zahlt über Alipay
  2. Benachrichtigung über Alipay-Zahlungsergebnisse Händlerserver.
  3. Hier ist ein Beispiel für die Verwendung von ThinkPHP6 für Alipay-Zahlungen:
  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;
        }
    }
  5. Im obigen Code verweisen wir zunächst auf die EasySDK-Factory-Klasse von Alipay, die eine Transaktionsinstanz mit einer bestimmten Konfiguration erstellt. Anschließend erstellen wir ein Bestellarray mit Bestellinformationen. Hier legen wir die Bestellnummer (out_trade_no), den Bestellbetrag (total_amount) und den Bestellgegenstand (subject) fest. Als Nächstes initiieren wir über die Bestellmethode eine Zahlungsanforderung und geben schließlich die Zahlungs-URL an den Benutzer zurück.
Nach Abschluss der Zahlung sendet Alipay eine POST-Anfrage an den Händlerserver. Die Anfrage enthält einige Zahlungsinformationen und ruft die notify_url des Händlers auf. Im Code verweist notify_url auf eine Adresse des Servers des Händlers und gibt dem Händler die Möglichkeit, Zahlungsergebnisse zu verarbeiten.

3. WeChat-Zahlungsvorgang

Der Hauptprozess des WeChat-Zahlungsprozesses ist:

Informationen zur Vorauszahlungsbestellung vom WeChat-Server anfordern;

Die vom WeChat-Server zurückgegebene prepay_id abrufen und die Signatur der Bestellung generieren (bitte). Beachten Sie, dass die Signaturreihenfolge in Ordnung ist. Für appid, mch_id, nonce_str, prepay_id, trade_type, key);

  1. Das Folgende ist ein Beispiel für die Verwendung von ThinkPHP6 für WeChat-Zahlungen:
  2. 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); 
        }
    }
  3. Im obigen Code haben wir die GuzzleMiddleware-Bibliothek für WeChat-Zahlungen und das SDK der offenen WeChat-Zahlungsplattform vorgestellt. Anschließend richten wir die Händler-ID, die Seriennummer des Händlers und den privaten Schlüssel des Händlers (mchid, serial und key) ein. Als nächstes erstellen wir die zahlungsbezogenen Parameter und verwenden die Prepare-Methode von JsPayClient, um prepay_id zu erhalten. Beachten Sie, dass die Reihenfolge der Generierung von Auftragssignaturen mit appid, mch_id, nonce_str, prepay_id, trade_type und key übereinstimmen muss. Schließlich verwenden wir die sign-Methode von AppPayClient, um eine Signatur zu generieren, alle ihre Parameter in JSON zu serialisieren und sie an den Benutzer zurückzugeben.
  4. Nach Abschluss der Zahlung sendet WeChat eine POST-Anfrage an den Händlerserver. Die Anfrage enthält einige Zahlungsinformationen und ruft die notify_url des Händlers auf. Im Code verweist notify_url auf eine Adresse des Servers des Händlers und gibt dem Händler die Möglichkeit, Zahlungsergebnisse zu verarbeiten.
  5. Zusammenfassend stellt dieser Artikel die Verwendung von ThinkPHP6 für Alipay- und WeChat-Zahlungsvorgänge vor. Bitte beachten Sie, dass dieser Artikel nur ein einfaches Beispiel darstellt. Sie sollten Zahlungsergebnisse und Ausnahmen detaillierter behandeln. Wenn Sie auf Probleme stoßen, lesen Sie bitte die API-Dokumentation von Alipay und WeChat Pay oder die Informationen von Plattformen wie GitHub.

Das obige ist der detaillierte Inhalt vonWie verwende ich ThinkPHP6 für Alipay- und WeChat-Zahlungsvorgänge?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn