Home  >  Article  >  PHP Framework  >  How to use Laravel to implement Alipay payment interface

How to use Laravel to implement Alipay payment interface

PHPz
PHPzOriginal
2023-11-04 16:13:471330browse

How to use Laravel to implement Alipay payment interface

How to use Laravel to implement Alipay payment interface

With the development of e-commerce, the diversity of payment methods has become an important selection criterion. As China's largest third-party payment platform, Alipay plays an important role in the e-commerce field. When developing e-commerce websites, we often need to integrate the Alipay payment interface to provide users with convenient payment methods. This article will introduce how to use the Laravel framework to implement the Alipay payment interface and give specific code examples.

First, we need to install the laravel-omnipay extension package in the Laravel project. The extension provides support for multiple payment gateways, including Alipay. Use the following command to install the extension package:

composer require omnipay/omnipay

After the installation is completed, we need to configure Alipay related information in the project's config/services.php file. Specific examples are as follows:

'alipay' => [
    'driver' => 'Alipay_AopPage',
    'options' => [
        'app_id' => env('ALIPAY_APP_ID'),
        'private_key' => env('ALIPAY_PRIVATE_KEY'),
        'public_key' => env('ALIPAY_PUBLIC_KEY'),
        'return_url' => env('ALIPAY_RETURN_URL'),
        'notify_url' => env('ALIPAY_NOTIFY_URL'),
    ],
],

In the above configuration, we need to set parameters such as app_id, private_key, public_key, return_url and notify_url. Among them, app_id is the ID of the Alipay application, private_key and public_key are the private key and public key of the application respectively. return_url is the callback address after the user's payment is successful, and notify_url is the Alipay asynchronous notification address.

Next, we need to configure the values ​​of the above parameters in the .env file. An example is as follows:

ALIPAY_APP_ID=xxxxxxxxxxxxxx
ALIPAY_PRIVATE_KEY=xxxxxxxxxxxxxx
ALIPAY_PUBLIC_KEY=xxxxxxxxxxxxxx
ALIPAY_RETURN_URL=https://example.com/alipay/return
ALIPAY_NOTIFY_URL=https://example.com/alipay/notify

In the above configuration, we need to replace it with the real Alipay application ID, private key, public key and callback URL.

Next, we can use the Alipay payment interface in the controller in the Laravel project. An example is as follows:

use OmnipayOmnipay;

class PaymentController extends Controller
{
    public function pay(Request $request)
    {
        $gateway = Omnipay::create('Alipay');

        $gateway->setAppId(config('services.alipay.options.app_id'));
        $gateway->setPrivateKey(config('services.alipay.options.private_key'));
        $gateway->setPublicKey(config('services.alipay.options.public_key'));
        $gateway->setReturnUrl(config('services.alipay.options.return_url'));
        $gateway->setNotifyUrl(config('services.alipay.options.notify_url'));

        $order = [
            'out_trade_no' => '2018123456789',
            'total_amount' => '0.01',
            'subject' => 'Test Order',
            'body' => 'This is a test order',
        ];

        $response = $gateway->purchase($order)->send();

        if ($response->isRedirect()) {
            $response->redirect();
        } else {
            dd($response->getMessage());
        }
    }

    public function notify(Request $request)
    {
        $gateway = Omnipay::create('Alipay');

        $gateway->setAppId(config('services.alipay.options.app_id'));
        $gateway->setPrivateKey(config('services.alipay.options.private_key'));
        $gateway->setPublicKey(config('services.alipay.options.public_key'));
        $gateway->setReturnUrl(config('services.alipay.options.return_url'));
        $gateway->setNotifyUrl(config('services.alipay.options.notify_url'));
        
        $response = $gateway->completePurchase()->send();

        if ($response->isPaid()) {
            // 更新订单状态
        }

        return $response->getAcknowledgeResponse();
    }

    public function return(Request $request)
    {
        $gateway = Omnipay::create('Alipay');

        $gateway->setAppId(config('services.alipay.options.app_id'));
        $gateway->setPrivateKey(config('services.alipay.options.private_key'));
        $gateway->setPublicKey(config('services.alipay.options.public_key'));
        $gateway->setReturnUrl(config('services.alipay.options.return_url'));
        $gateway->setNotifyUrl(config('services.alipay.options.notify_url'));
        
        $response = $gateway->completePurchase()->send();

        if ($response->isPaid()) {
            // 更新订单状态
            return redirect()->route('orders.show', $order);
        } else {
            return '支付失败';
        }
    }
}

In the above code, we first create an Alipay gateway instance and set the relevant parameters. Then, we create an order array and use the purchase method to send the payment request. If the payment request is successful and the jump address is returned, we can use the redirect method to redirect the user to the Alipay payment page. If the payment request fails, you can use the getMessage method to obtain the error message. In the asynchronous notification and synchronous callback methods, we also create an Alipay gateway instance and use the completePurchase method to verify the payment result.

Finally, we need to define the payment route in the routing. An example is as follows:

Route::get('/payment/pay', 'PaymentController@pay');
Route::post('/payment/notify', 'PaymentController@notify');
Route::get('/payment/return', 'PaymentController@return');

Through the above steps, we can use the Laravel framework to easily integrate the Alipay payment interface. Hope this article helps you!

The above is the detailed content of How to use Laravel to implement Alipay payment interface. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn