Skip to content

Commit 3eca020

Browse files
committed
add binance,payeer,nowpayments,perfectmoney
1 parent 1c6ab2e commit 3eca020

File tree

5 files changed

+404
-14
lines changed

5 files changed

+404
-14
lines changed

config/nafezly-payments.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,26 @@
7878
'BINANCE_SECRET'=>env('BINANCE_SECRET'),
7979

8080

81+
82+
#NowPayments
83+
'NOWPAYMENTS_API_KEY'=>env('NOWPAYMENTS_API_KEY'),
84+
85+
86+
#Payeer
87+
'PAYEER_MERCHANT_ID'=>env('PAYEER_MERCHANT_ID'),
88+
'PAYEER_API_KEY'=>env('PAYEER_API_KEY'),
89+
'PAYEER_ADDITIONAL_API_KEY'=>env('PAYEER_ADDITIONAL_API_KEY'),
90+
91+
92+
#Perfectmoney
93+
/*
94+
*please
95+
*1- create POST route /payments/verify/perfectmoney
96+
*2- put it into app/Http/Middleware/VerifyCsrfToken.php middleware inside except array
97+
*/
98+
'PERFECT_MONEY_ID'=>env('PERFECT_MONEY_ID','UXXXXXXX'),
99+
'PERFECT_MONEY_PASSPHRASE'=>env('PERFECT_MONEY_PASSPHRASE'),
100+
81101
'VERIFY_ROUTE_NAME' => "payment-verify",
82102
'APP_NAME'=>env('APP_NAME'),
83103

src/Classes/BinancePayment.php

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77

88
use Nafezly\Payments\Interfaces\PaymentInterface;
99
use Nafezly\Payments\Classes\BaseController;
10+
use Illuminate\Support\Str;
11+
1012

1113
class BinancePayment extends BaseController implements PaymentInterface
1214
{
@@ -102,21 +104,34 @@ public function pay($amount = null, $user_id = null, $user_first_name = null, $u
102104
*/
103105
public function verify(Request $request)
104106
{
105-
if ($request['status']=="SUCCESS") {
106-
return [
107-
'success' => true,
108-
'payment_id'=>"",
109-
'message' => __('nafezly::messages.PAYMENT_DONE'),
110-
'process_data' => $request->all()
111-
];
112-
} else {
113-
return [
114-
'success' => false,
115-
'payment_id'=>"",
116-
'message' => __('nafezly::messages.PAYMENT_FAILED'),
117-
'process_data' => $request->all()
118-
];
107+
108+
$payload = $request->getContent();
109+
$signature = $request->header('X-MAC-Signature');
110+
$secretKey = $this->binance_secret; // Replace with your actual Binance secret key
111+
112+
$computedSignature = hash_hmac('sha256', $payload, $secretKey);
113+
114+
if ($signature === $computedSignature) {
115+
// Signature verification successful
116+
$data = json_decode($payload, true);
117+
$paymentId = $data['paymentId']; // Retrieve the payment ID
118+
$paymentStatus = $data['paymentStatus']; // Retrieve the payment status
119+
120+
if ($paymentStatus === 'completed') {
121+
return [
122+
'success' => true,
123+
'payment_id'=>"",
124+
'message' => __('nafezly::messages.PAYMENT_DONE'),
125+
'process_data' => $request->all()
126+
];
127+
}
119128
}
129+
return [
130+
'success' => false,
131+
'payment_id'=>"",
132+
'message' => __('nafezly::messages.PAYMENT_FAILED'),
133+
'process_data' => $request->all()
134+
];
120135
}
121136

122137
}

src/Classes/NowPaymentsPayment.php

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
<?php
2+
3+
namespace Nafezly\Payments\Classes;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Support\Facades\Http;
7+
8+
use Nafezly\Payments\Interfaces\PaymentInterface;
9+
use Nafezly\Payments\Classes\BaseController;
10+
11+
class NowPaymentsPayment extends BaseController implements PaymentInterface
12+
{
13+
public $nowpayments_api_key;
14+
public $verify_route_name;
15+
16+
public function __construct()
17+
{
18+
$this->nowpayments_api_key = config('nafezly-payments.NOWPAYMENTS_API_KEY');
19+
$this->verify_route_name = config('nafezly-payments.VERIFY_ROUTE_NAME');
20+
}
21+
22+
23+
/**
24+
* @param $amount
25+
* @param null $user_id
26+
* @param null $user_first_name
27+
* @param null $user_last_name
28+
* @param null $user_email
29+
* @param null $user_phone
30+
* @param null $source
31+
* @return string[]
32+
* @throws MissingPaymentInfoException
33+
*/
34+
public function pay($amount = null, $user_id = null, $user_first_name = null, $user_last_name = null, $user_email = null, $user_phone = null, $source = null): array
35+
{
36+
$this->setPassedVariablesToGlobal($amount,$user_id,$user_first_name,$user_last_name,$user_email,$user_phone,$source);
37+
$required_fields = ['amount','currency'];
38+
$this->checkRequiredFields($required_fields, 'NOWPAYMENTS');
39+
40+
if($this->get_minimum_amount($this->currency,'usd')>$this->amount){
41+
return [
42+
'payment_id'=>"",
43+
'html'=>"",
44+
'redirect_url'=>"",
45+
'error'=>"AMOUNT_MINIMAL_ERROR"
46+
];
47+
}
48+
$order_id = uniqid().rand(10000,99999);
49+
$response = Http::withHeaders([
50+
'x-api-key' => $this->nowpayments_api_key,
51+
])->post('https://api.nowpayments.io/v1/payment',[
52+
"price_amount"=> $this->amount,
53+
"price_currency"=> "usd",
54+
"pay_currency"=> $this->currency,
55+
"ipn_callback_url"=> route($this->verify_route_name,['payment'=>"nowpayments"]),
56+
"order_id"=> $order_id,
57+
"order_description"=> "Credit"
58+
])->json();
59+
if(isset($response['payment_status']) && $response['payment_status'] == "waiting")
60+
return [
61+
'payment_id'=>$response['payment_id'],
62+
'html'=>$response,
63+
'redirect_url'=>$response['pay_address'],
64+
'error'=>""
65+
];
66+
return [
67+
'payment_id'=>"",
68+
'html'=>"",
69+
'redirect_url'=>"",
70+
'error'=>$response['code']
71+
];
72+
}
73+
74+
/**
75+
* @param Request $request
76+
* @return array|void
77+
*/
78+
public function verify(Request $request)
79+
{
80+
81+
$response = \Http::withHeaders([
82+
'x-api-key'=>$this->nowpayments_api_key
83+
])->post('https://api.nowpayments.io/v1/payment/'.$request['payment_id'])->json();
84+
85+
if (isset($response['payment_status']) && $response['payment_status'] == "finished") {
86+
return [
87+
'success' => true,
88+
'payment_id'=>$request->payment_id,
89+
'message' => __('nafezly::messages.PAYMENT_DONE'),
90+
'process_data' => $request->all()
91+
];
92+
} else {
93+
return [
94+
'success' => false,
95+
'payment_id'=>$request->payment_id,
96+
'message' => __('nafezly::messages.PAYMENT_FAILED'),
97+
'process_data' => $request->all()
98+
];
99+
}
100+
}
101+
public function get_minimum_amount($from,$to,$fiat_equivalent="usd"){
102+
$response = \Http::withHeaders(['x-api-key'=>$this->nowpayments_api_key])->get('https://api.nowpayments.io/v1/min-amount?currency_from='.$from.'&currency_to='.$to.'&fiat_equivalent='.$fiat_equivalent)->json();
103+
return $response['fiat_equivalent'];
104+
105+
}
106+
107+
}

src/Classes/PayeerPayment.php

Lines changed: 139 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,139 @@
1+
<?php
2+
3+
namespace Nafezly\Payments\Classes;
4+
5+
use Illuminate\Http\Request;
6+
use Illuminate\Support\Facades\Http;
7+
8+
use Nafezly\Payments\Interfaces\PaymentInterface;
9+
use Nafezly\Payments\Classes\BaseController;
10+
11+
class PayeerPayment extends BaseController implements PaymentInterface
12+
{
13+
14+
15+
public $payeer_api_key;
16+
public $payeer_additional_api_key;
17+
public $payeer_merchant_id;
18+
public $verify_route_name;
19+
20+
public function __construct()
21+
{
22+
$this->payeer_api_key = config('nafezly-payments.PAYEER_API_KEY');
23+
$this->payeer_additional_api_key = config('nafezly-payments.PAYEER_ADDITIONAL_API_KEY');
24+
$this->payeer_merchant_id = config('nafezly-payments.PAYEER_MERCHANT_ID');
25+
$this->verify_route_name = config('nafezly-payments.VERIFY_ROUTE_NAME');
26+
}
27+
28+
29+
/**
30+
* @param $amount
31+
* @param null $user_id
32+
* @param null $user_first_name
33+
* @param null $user_last_name
34+
* @param null $user_email
35+
* @param null $user_phone
36+
* @param null $source
37+
* @return string[]
38+
* @throws MissingPaymentInfoException
39+
*/
40+
public function pay($amount = null, $user_id = null, $user_first_name = null, $user_last_name = null, $user_email = null, $user_phone = null, $source = null): array
41+
{
42+
$this->setPassedVariablesToGlobal($amount,$user_id,$user_first_name,$user_last_name,$user_email,$user_phone,$source);
43+
$required_fields = ['amount'];
44+
$this->checkRequiredFields($required_fields, 'PAYEER');
45+
46+
$m_shop = $this->payeer_merchant_id;
47+
$m_orderid = uniqid().rand(10000,99999);
48+
$m_amount = number_format($this->amount, 2, '.', '');
49+
$m_curr = 'USD';
50+
$m_desc = base64_encode('credit');
51+
52+
$m_key = $this->payeer_api_key;
53+
$arHash = [
54+
$m_shop,
55+
$m_orderid,
56+
$m_amount,
57+
$m_curr,
58+
$m_desc
59+
];
60+
$arParams = [
61+
'success_url' => route($this->verify_route_name,['payment'=>'payeer']),
62+
'fail_url' => route($this->verify_route_name,['payment'=>'payeer']),
63+
'status_url' => route($this->verify_route_name,['payment'=>'payeer']),
64+
];
65+
$key = md5($this->payeer_additional_api_key.$m_orderid);
66+
$m_params = urlencode(base64_encode(mcrypt_encrypt(MCRYPT_RIJNDAEL_256,$key, json_encode($arParams), MCRYPT_MODE_ECB)));
67+
$arHash[] = $m_params;
68+
$arHash[] = $m_key;
69+
$sign = strtoupper(hash('sha256', implode(':', $arHash)));
70+
$arGetParams = [
71+
'm_shop' => $m_shop,
72+
'm_orderid' => $m_orderid,
73+
'm_amount' => $m_amount,
74+
'm_curr' => $m_curr,
75+
'm_desc' => $m_desc,
76+
'm_sign' => $sign,
77+
'm_params' => $m_params,
78+
];
79+
$url = 'https://payeer.com/merchant/?'.http_build_query($arGetParams);
80+
if($url!=null)
81+
return [
82+
'payment_id'=>$m_orderid,
83+
'html'=>"",
84+
'redirect_url'=>$url
85+
];
86+
return [
87+
'payment_id'=>$m_orderid,
88+
'html'=>"",
89+
'redirect_url'=>""
90+
];
91+
}
92+
93+
/**
94+
* @param Request $request
95+
* @return array|void
96+
*/
97+
public function verify(Request $request)
98+
{
99+
//if (!in_array($_SERVER['REMOTE_ADDR'], array('185.71.65.92', '185.71.65.189','149.202.17.210'))) return;
100+
if(isset($request['m_operation_id']) && isset($request['m_sign'])){
101+
$m_key = $this->payeer_api_key;
102+
$arHash = [
103+
$request['m_operation_id'],
104+
$request['m_operation_ps'],
105+
$request['m_operation_date'],
106+
$request['m_operation_pay_date'],
107+
$request['m_shop'],
108+
$request['m_orderid'],
109+
$request['m_amount'],
110+
$request['m_curr'],
111+
$request['m_desc'],
112+
$request['m_status']
113+
];
114+
115+
if (isset($request['m_params']))
116+
$arHash[] = $request['m_params'];
117+
118+
$arHash[] = $m_key;
119+
$sign_hash = strtoupper(hash('sha256', implode(':', $arHash)));
120+
if ($request['m_sign'] == $sign_hash && $request['m_status'] == 'success'){
121+
return [
122+
'success' => true,
123+
'payment_id'=>$request['m_orderid'],
124+
'message' => __('nafezly::messages.PAYMENT_DONE'),
125+
'process_data' => $request->all()
126+
];
127+
}
128+
}
129+
return [
130+
'success' => false,
131+
'payment_id'=>$request['m_orderid'],
132+
'message' => __('nafezly::messages.PAYMENT_FAILED'),
133+
'process_data' => $request->all()
134+
];
135+
136+
137+
}
138+
139+
}

0 commit comments

Comments
 (0)