Heim  >  Artikel  >  PHP-Framework  >  So verwenden Sie das Hyperf-Framework für WeChat-Zahlungen

So verwenden Sie das Hyperf-Framework für WeChat-Zahlungen

王林
王林Original
2023-10-20 17:24:431216Durchsuche

So verwenden Sie das Hyperf-Framework für WeChat-Zahlungen

Verwendung des Hyperf-Frameworks für WeChat-Zahlungen

Einführung:
Mit der Entwicklung des E-Commerce ist die WeChat-Zahlung zu einer der wichtigsten Möglichkeiten für Menschen geworden, im täglichen Leben einzukaufen und zu bezahlen. In der Entwicklung wird die schnelle Integration von WeChat-Zahlungen besonders wichtig. In diesem Artikel wird die Verwendung des Hyperf-Frameworks für WeChat-Zahlungen vorgestellt und spezifische Codebeispiele bereitgestellt.

Text:

1. Vorbereitung
Bevor Sie das Hyperf-Framework für WeChat-Zahlungen verwenden, sind einige Vorbereitungen erforderlich. Registrieren Sie zunächst ein WeChat-Zahlungskonto und erhalten Sie die Händlernummer, den Anwendungsschlüssel und andere Informationen. Zweitens installieren Sie das Hyperf-Framework. Sie können es mit Composer installieren und den Befehl „composer create-project hyperf/hyperf-skeleton“ ausführen. Installieren Sie abschließend die WeChat-Zahlungs-SDK-Bibliothek. Sie können sie mit Composer installieren und den Befehl „composer require overtrue/wechat“ ausführen.

2. Konfigurationsdatei
Im Hyperf-Framework befindet sich die Konfigurationsdatei im Verzeichnis config/autoload. Füllen Sie in der Konfigurationsdatei die zahlungsbezogenen WeChat-Konfigurationselemente korrekt aus, einschließlich Händlernummer, Anwendungsschlüssel usw. Die Beispielkonfiguration lautet wie folgt:

return [
    'wechat' => [
        'app_id' => env('WECHAT_APPID', ''),
        'mch_id' => env('WECHAT_MCH_ID', ''),
        'key' => env('WECHAT_KEY', ''),
        'cert_path' => env('WECHAT_CERT_PATH',''),
        'key_path' => env('WECHAT_KEY_PATH',''),
        'notify_url' => env('WECHAT_NOTIFY_URL',''),
    ],
];

3. Erstellen Sie eine WeChat-Zahlungsdienstklasse
Im Hyperf-Framework können Sie eine WeChat-Zahlungsdienstklasse erstellen, um zahlungsbezogene Methoden zu kapseln. Der Beispielcode lautet wie folgt:

<?php

declare(strict_types=1);

namespace AppService;

use EasyWeChatPaymentApplication;

class WechatPayService
{
    protected $app;

    public function __construct()
    {
        $config = config('wechat');
        $this->app = new Application($config);
    }

    public function createOrder(string $orderNo, float $totalAmount, string $description)
    {
        $result = $this->app->order->unify([
            'out_trade_no' => $orderNo,
            'body' => $description,
            'total_fee' => $totalAmount * 100,
            'trade_type' => 'APP',
        ]);

        if ($result['return_code'] === 'SUCCESS' && $result['result_code'] === 'SUCCESS') {
            $prepayId = $result['prepay_id'];
            $jssdkParams = $this->app->jssdk->appConfig($prepayId);

            return [
                'prepay_id' => $result['prepay_id'],
                'jssdk_params' => $jssdkParams,
            ];
        } else {
            throw new Exception($result['return_msg']);
        }
    }

    public function notify(array $data)
    {
        $response = $this->app->handlePaidNotify(function ($message, $fail) {
            // 处理支付回调
            // 更新订单状态,发货等操作
            return true; // 返回处理结果, true 或 false
        });

        return $response;
    }
}

4. Rufen Sie die Zahlungsschnittstelle auf
Wo auch immer die WeChat-Zahlung aufgerufen werden muss, instanziieren Sie die WeChat-Zahlungsdienstklasse und rufen Sie die entsprechende Methode auf. Der Beispielcode lautet wie folgt:

<?php

declare(strict_types=1);

namespace AppController;

use AppServiceWechatPayService;
use HyperfHttpServerAnnotationController;
use HyperfHttpServerAnnotationPostMapping;
use HyperfHttpServerContractRequestInterface;

/**
 * @Controller()
 */
class PayController
{
    /**
     * @PostMapping(path="/pay")
     */
    public function pay(RequestInterface $request, WechatPayService $payService)
    {
        $orderNo = $request->input('orderNo');
        $totalAmount = $request->input('totalAmount');
        $description = $request->input('description');

        try {
            $result = $payService->createOrder($orderNo, $totalAmount, $description);
            // 返回给前端APP的支付参数
            return $result;
        } catch (Exception $e) {
            // 处理异常错误
            return [
                'error' => $e->getMessage(),
            ];
        }
    }

    /**
     * @PostMapping(path="/notify")
     */
    public function notify(RequestInterface $request, WechatPayService $payService)
    {
        $payService->notify($request->all());
        // 处理支付回调结果

        return 'success';
    }
}

5. Routing konfigurieren
Routing konfigurieren und die Zahlungsschnittstelle und die Rückrufschnittstelle an die entsprechende Controller-Methode binden. Der Beispielcode lautet wie folgt:

<?php

declare(strict_types=1);

use HyperfHttpServerRouterRouter;

Router::addRoute(['POST'], '/pay', 'App\Controller\PayController@pay');
Router::addRoute(['POST'], '/notify', 'App\Controller\PayController@notify');

Zusammenfassung:
Dieser Artikel stellt die Verwendung des Hyperf-Frameworks für WeChat-Zahlungen vor und bietet spezifische Codebeispiele. Durch Festlegen der zahlungsbezogenen WeChat-Parameter über die Konfigurationsdatei und Erstellen einer WeChat-Zahlungsdienstklasse können Sie die Zahlungsschnittstelle einfach aufrufen und die Zahlungsergebnisse zurückrufen. Ich hoffe, dass dieser Artikel für Entwickler hilfreich sein wird, die WeChat Pay während des Entwicklungsprozesses integrieren.

Das obige ist der detaillierte Inhalt vonSo verwenden Sie das Hyperf-Framework für WeChat-Zahlungen. 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