albakov / laravelcloudpayments
此包已被弃用且不再维护。没有推荐替代包。
Laravel的CloudPayments模块
v0.1.5
2019-03-14 08:34 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/*'
];