albakov/laravelcloudpayments

此包已被弃用且不再维护。没有推荐替代包。

Laravel的CloudPayments模块

v0.1.5 2019-03-14 08:34 UTC

This package is auto-updated.

Last update: 2024-08-12 01:38:05 UTC


README

这是一个适用于Laravel 5的扩展,可方便地与CloudPayments API交互。

安装

使用Composer

composer require albakov/laravelcloudpayments

在app/config/app.php文件中的providers数组中添加

Albakov\LaravelCloudPayments\ServiceProvider::class,

在aliases数组中添加

'CloudPayments' => Albakov\LaravelCloudPayments\Facade::class,

配置

需要使用命令发布配置文件

php artisan vendor:publish --provider='Albakov\LaravelCloudPayments\ServiceProvider' --tag=config

在config文件夹中会出现cloudpayments.php文件。需要填写自己的数据

return [
    'apiSecret' => 'YOUR_API_SECRET',
    'publicId' => 'YOUR_PUBLICID',
    'apiUrl' => 'https://api.cloudpayments.ru',
    'cultureName' => 'en-US', // For more languages: https://cloudpayments.ru/Docs/Api#language
];

使用示例

通过密文进行支付(用于单阶段支付)。

更多关于此方法的信息:[链接](https://cloudpayments.ru/Docs/Api#payWithCrypto)

<?php

namespace App\Http\Controllers;

use CloudPayments;

~ ~ ~

public function doPayment()
{
    $array = [
        'Amount' => $order['amount'], // Required
        'Currency' => 'USD', // Required
        'Name' => $order['firstname'], // Required
        'IpAddress' => getHostByName(getHostName()), // Required
        'CardCryptogramPacket' => $CardCryptogramPacket, // Required
        'InvoiceId' => $order['orderId'],
        'Description' => 'Payment for order №' . $order['orderId'],
        'AccountId' => '999',
        'Email' => $order['email'],
        'JsonData' => json_encode([
            'middleName' => $order['lastname'],
            'lastName' => $order['surname'],
            'phone' => $order['phone'],
        ]),
    ];

    // Trying to do Payment
    try {
        $result = CloudPayments::cardsCharge($array);
    } catch (\Exception $e) {
        $result = $e->getMessage();
    }
}

~ ~ ~

导出交易列表

更多关于此方法的信息:[链接](https://cloudpayments.ru/Docs/Api#payWithCrypto)

~ ~ ~
    
$array = [
    'Date' => '2017-10-06', // Required
    'TimeZone' => 'MSK', // Timezones: https://cloudpayments.ru/Docs/Directory#time-zones
];

// Trying to do request
try {
    $result = CloudPayments::transactionsList($array);
} catch (\Exception $e) {
    $result = $e->getMessage();
}

~ ~ ~

通知

更多详情:[链接](https://cloudpayments.ru/Docs/Notifications)

用于检查支付能力、通知成功和失败的支付、通知订阅变化以及通知开具的收据。

为了处理通知,您可以使用LaravelCloudPayments/src/Notifications.php特性(trait)

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Order;

class MyNotifier {
~ ~ ~

    // Use trait
    use \Albakov\LaravelCloudPayments\Notifications;

    /**
     * Check payment
     * https://cloudpayments.ru/Docs/Notifications#check
     * @param Illuminate\Http\Request $request
     * @return json
     */
    public function check(Request $request)
    {
        $data = $this->validateAll(Request $request);
        return response()->json($data);
    }
    
    /**
     * Confirm payment
     * https://cloudpayments.ru/Docs/Notifications#pay
     * @param Illuminate\Http\Request $request
     * @return json
     */
    public function pay(Request $request)
    {
        $data = $this->validateAll(Request$request);
         
        if ((int) $data['code'] === 0) {
            // payment success
            // mark order payment status - success
            // send email to admin and customer
            // etc ...
        }
        
        return response()->json($data);
    }
    
    /**
     * Check Secret, orderId, Amount
     * @param Illuminate\Http\Request $request
     * @return json
     */
    public function validateAll($request)
    {
        // Check secrets
        $result = $this->validateSecrets($request);

        if ($result['code'] !== 0) {
            return $result;
        }
        
        // Get order
        $order = Order::find($request->InvoiceId);
        
        // Check orders
        $result = $this->validateOrder($request->InvoiceId, $order->id);

        if ($result['code'] !== 0) {
            return $result;
        }
        
        // Check amounts
        $result = $this->validateAmount($request->Amount, $order->amount);

        if ($result['code'] !== 0) {
            return $result;
        }

        return ['code' => 0]; // Success
    }

~ ~ ~

}

不要忘记指定路由

<?php

~ ~ ~

Route::group(['prefix' => 'cloudpayments'], function() {
    Route::match(['GET', 'POST'], 'check', 'MyNotifier@check');
    Route::match(['GET', 'POST'], 'pay', 'MyNotifier@pay');
});

~ ~ ~

为了接收通知(check, pay, fail, confirm, ...),需要在app/Http/MiddlewareVerifyCsrfToken文件中排除URL从CSRF验证中

protected $except = [
    // ...
    'cloudpayments/*'
];