Rumah  >  Artikel  >  rangka kerja php  >  Cara menggunakan rangka kerja Hyperf untuk pembayaran WeChat

Cara menggunakan rangka kerja Hyperf untuk pembayaran WeChat

王林
王林asal
2023-10-20 17:24:431202semak imbas

Cara menggunakan rangka kerja Hyperf untuk pembayaran WeChat

Menggunakan rangka kerja Hyperf untuk pembayaran WeChat

Pengenalan:
Dengan perkembangan e-dagang, pembayaran WeChat telah menjadi salah satu cara utama untuk orang ramai membeli-belah dan membayar dalam kehidupan seharian. Dalam pembangunan, cara menyepadukan pembayaran WeChat dengan cepat menjadi sangat penting. Artikel ini akan memperkenalkan cara menggunakan rangka kerja Hyperf untuk pembayaran WeChat dan memberikan contoh kod khusus.

Teks:

1. Persediaan
Sebelum menggunakan rangka kerja Hyperf untuk pembayaran WeChat, beberapa persediaan diperlukan. Mula-mula, daftar akaun pembayaran WeChat dan dapatkan nombor pedagang, kunci aplikasi dan maklumat lain. Kedua, pasang rangka kerja Hyperf Anda boleh menggunakan Composer untuk memasangnya dan laksanakan arahan: composer create-project hyperf/hyperf-skeleton. Akhir sekali, pasang pustaka SDK pembayaran WeChat Anda boleh menggunakan Composer untuk memasangnya dan melaksanakan arahan: composer require overtrue/wechat.

2. Fail konfigurasi
Dalam rangka kerja Hyperf, fail konfigurasi terletak dalam direktori konfigurasi/automuat. Dalam fail konfigurasi, isikan item konfigurasi berkaitan pembayaran WeChat dengan betul, termasuk nombor pedagang, kunci aplikasi, dsb. Konfigurasi sampel adalah seperti berikut:

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. Buat kelas perkhidmatan pembayaran WeChat
Dalam rangka kerja Hyperf, anda boleh mencipta kelas perkhidmatan pembayaran WeChat untuk merangkum kaedah berkaitan pembayaran. Kod sampel adalah seperti berikut:

<?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. Hubungi antara muka pembayaran
Di mana sahaja pembayaran WeChat perlu dipanggil, segerakan kelas perkhidmatan pembayaran WeChat dan hubungi kaedah yang sepadan. Kod sampel adalah seperti berikut:

<?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. Konfigurasikan penghalaan
Konfigurasi penghalaan dan ikat antara muka pembayaran dan antara muka panggil balik kepada kaedah pengawal yang sepadan. Kod sampel adalah seperti berikut:

<?php

declare(strict_types=1);

use HyperfHttpServerRouterRouter;

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

Ringkasan:
Artikel ini memperkenalkan cara menggunakan rangka kerja Hyperf untuk pembayaran WeChat dan menyediakan contoh kod khusus. Dengan menetapkan parameter berkaitan pembayaran WeChat melalui fail konfigurasi dan mencipta kelas perkhidmatan pembayaran WeChat, anda boleh menghubungi antara muka pembayaran dengan mudah dan memanggil semula hasil pembayaran. Saya harap artikel ini akan membantu pembangun yang menyepadukan WeChat Pay semasa proses pembangunan.

Atas ialah kandungan terperinci Cara menggunakan rangka kerja Hyperf untuk pembayaran WeChat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn