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 BinancePayment extends BaseController implements PaymentInterface
12+ {
13+ public $ binance_api ;
14+ public $ binance_secret ;
15+ public $ verify_route_name ;
16+
17+ public function __construct ()
18+ {
19+ $ this ->binance_api = config ('nafezly-payments.BINANCE_API ' );
20+ $ this ->binance_secret = config ('nafezly-payments.BINANCE_SECRET ' );
21+ $ this ->verify_route_name = config ('nafezly-payments.VERIFY_ROUTE_NAME ' );
22+ }
23+
24+
25+ /**
26+ * @param $amount
27+ * @param null $user_id
28+ * @param null $user_first_name
29+ * @param null $user_last_name
30+ * @param null $user_email
31+ * @param null $user_phone
32+ * @param null $source
33+ * @return string[]
34+ * @throws MissingPaymentInfoException
35+ */
36+ 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
37+ {
38+ $ this ->setPassedVariablesToGlobal ($ amount ,$ user_id ,$ user_first_name ,$ user_last_name ,$ user_email ,$ user_phone ,$ source );
39+ $ required_fields = ['amount ' ];
40+ $ this ->checkRequiredFields ($ required_fields , 'BINANCE ' );
41+
42+ $ chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ ' ;
43+ $ nonce = '' ;
44+ for ($ i =1 ; $ i <= 32 ; $ i ++)
45+ {
46+ $ pos = mt_rand (0 , strlen ($ chars ) - 1 );
47+ $ char = $ chars [$ pos ];
48+ $ nonce .= $ char ;
49+ }
50+ $ ch = curl_init ();
51+
52+ $ uniqid = uniqid ().rand (10000 ,99999 );
53+ $ timestamp = round (microtime (true ) * 1000 );
54+ // Request body
55+ $ data = array (
56+ "env " => [
57+ "terminalType " => "APP "
58+ ],
59+ "merchantTradeNo " => $ uniqid ,
60+ "orderAmount " => $ this ->amount ,
61+ "currency " => "BUSD " ,
62+ "goods " => [
63+ "goodsType " => "02 " ,
64+ "goodsCategory " => "Z000 " ,
65+ "referenceGoodsId " => $ uniqid ,
66+ "goodsName " => "Credit " ,
67+ "goodsDetail " => "Credit "
68+ ]
69+ );
70+
71+
72+ $ json_request = json_encode ($ data );
73+ $ payload = $ timestamp ."\n" .$ nonce ."\n" .$ json_request ."\n" ;
74+ $ binance_pay_key = $ this ->binance_api ;
75+ $ binance_pay_secret = $ this ->binance_secret ;
76+ $ signature = strtoupper (hash_hmac ('SHA512 ' ,$ payload ,$ binance_pay_secret ));
77+ $ response = \Http::withHeaders ([
78+ "Content-Type " =>"application/json " ,
79+ "BinancePay-Timestamp " =>$ timestamp ,
80+ "BinancePay-Nonce " =>$ nonce ,
81+ "BinancePay-Certificate-SN " =>$ binance_pay_key ,
82+ "BinancePay-Signature " =>$ signature ,
83+ ])->post ('https://bpay.binanceapi.com/binancepay/openapi/v3/order ' ,$ data )->json ();
84+
85+
86+ if ($ response ['status ' ]== "SUCCESS " )
87+ return [
88+ 'payment_id ' =>$ uniqid ,
89+ 'html ' =>$ response ['errorMessage ' ],
90+ 'redirect_url ' =>$ response ['checkoutUrl ' ]
91+ ];
92+ return [
93+ 'payment_id ' =>$ uniqid ,
94+ 'html ' =>$ response ['errorMessage ' ],
95+ 'redirect_url ' =>""
96+ ];
97+ }
98+
99+ /**
100+ * @param Request $request
101+ * @return array|void
102+ */
103+ public function verify (Request $ request )
104+ {
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+ ];
119+ }
120+ }
121+
122+ }
0 commit comments