兔姬桑 hace 4 años
padre
commit
e13fed8811

+ 0 - 86
app/Http/Controllers/Gateway/AopF2F.php

@@ -1,86 +0,0 @@
-<?php
-
-namespace App\Http\Controllers\Gateway;
-
-use App\Http\Models\Payment;
-use Auth;
-use Exception;
-use Log;
-use Omnipay\Alipay\Responses\AopCompletePurchaseResponse;
-use Omnipay\Alipay\Responses\AopTradePreCreateResponse;
-use Omnipay\Omnipay;
-use Response;
-
-class AopF2F extends AbstractPayment
-{
-	public function purchase($request)
-	{
-		$payment = new Payment();
-		$payment->sn = self::generateGuid();
-		$payment->user_id = Auth::user()->id;
-		$payment->oid = $request->input('oid');
-		$payment->amount = $request->input('amount');
-		$payment->save();
-
-		$gateway = $this->createGateway();
-
-		$request = $gateway->purchase();
-		$request->setBizContent([
-			'subject'      => parent::$systemConfig['subject_name']? : parent::$systemConfig['website_name'],
-			'out_trade_no' => $payment->sn,
-			'total_amount' => $payment->amount
-		]);
-
-		/** @var AopTradePreCreateResponse $response */
-		$aliResponse = $request->send();
-
-		$payment->qr_code = 'http://qr.topscan.com/api.php?text='.$aliResponse->getQrCode().'&bg=ffffff&fg=000000&pt=1c73bd&m=10&w=400&el=1&inpt=1eabfc&logo=https://t.alipayobjects.com/tfscom/T1Z5XfXdxmXXXXXXXX.png';
-		//后备:https://cli.im/api/qrcode/code?text=".$aliResponse->getQrCode()."&mhid=5EfGCwztyckhMHcmI9ZcOKs
-		$payment->save();
-
-		return Response::json(['status' => 'success', 'data' => $payment->sn, 'message' => '创建订单成功!']);
-	}
-
-	private function createGateway()
-	{
-		$gateway = Omnipay::create('Alipay_AopF2F');
-		$gateway->setSignType('RSA2'); //RSA/RSA2
-		$gateway->setAppId(parent::$systemConfig['f2fpay_app_id']);
-		$gateway->setPrivateKey(parent::$systemConfig['f2fpay_private_key']);
-		$gateway->setAlipayPublicKey(parent::$systemConfig['f2fpay_public_key']);
-		$gateway->setNotifyUrl((parent::$systemConfig['website_callback_url']? : parent::$systemConfig['website_url']).'/callback/notify?method=f2fpay');
-
-		return $gateway;
-	}
-
-	public function notify($request)
-	{
-		$gateway = self::createGateway();
-		$request = $gateway->completePurchase();
-		$request->setParams($_POST);
-
-		try{
-			/** @var AopCompletePurchaseResponse $response */
-			$response = $request->send();
-			if($response->isPaid()){
-				self::postPayment($response->data('out_trade_no'), '支付宝当面付');
-				exit('success');
-			}else{
-				exit('fail');
-			}
-		}catch(Exception $e){
-			Log::error('支付宝当面付 '.$e);
-			exit('fail');
-		}
-	}
-
-	public function getReturnHTML($request)
-	{
-		// TODO: Implement getReturnHTML() method.
-	}
-
-	public function getPurchaseHTML()
-	{
-		// TODO: Implement getReturnHTML() method.
-	}
-}

+ 127 - 0
app/Http/Controllers/Gateway/F2Fpay.php

@@ -0,0 +1,127 @@
+<?php
+
+namespace App\Http\Controllers\Gateway;
+
+use App\Http\Models\Payment;
+use Auth;
+use Exception;
+use InvalidArgumentException;
+use Log;
+use Payment\Client;
+use Payment\Exceptions\ClassNotFoundException;
+use Payment\Exceptions\GatewayException;
+use Response;
+
+class F2Fpay extends AbstractPayment
+{
+	private static $aliConfig;
+
+	function __construct()
+	{
+		parent::__construct();
+		self::$aliConfig = [
+			'use_sandbox'     => FALSE,
+			'app_id'          => self::$systemConfig['f2fpay_app_id'],
+			'sign_type'       => 'RSA2',
+			'ali_public_key'  => self::$systemConfig['f2fpay_public_key'],
+			'rsa_private_key' => self::$systemConfig['f2fpay_private_key'],
+			'limit_pay'       => [],
+			'notify_url'      => (self::$systemConfig['website_callback_url']? : self::$systemConfig['website_url']).'/callback/notify?method=f2fpay',
+			'return_url'      => self::$systemConfig['website_url'].'/invoices',
+			'fee_type'        => 'CNY',
+		];
+	}
+
+	public function purchase($request)
+	{
+		$payment = new Payment();
+		$payment->sn = self::generateGuid();
+		$payment->user_id = Auth::user()->id;
+		$payment->oid = $request->input('oid');
+		$payment->amount = $request->input('amount');
+		$payment->save();
+
+		$data = [
+			'body'        => '',
+			'subject'     => self::$systemConfig['subject_name']? : self::$systemConfig['website_name'],
+			'trade_no'    => $payment->sn,
+			'time_expire' => time()+900, // 必须 15分钟 内付款
+			'amount'      => $payment->amount,
+		];
+
+		try{
+			$client = new Client(Client::ALIPAY, self::$aliConfig);
+			$result = $client->pay(Client::ALI_CHANNEL_QR, $data);
+		}catch(InvalidArgumentException $e){
+			Log::error("【支付宝当面付】输入信息错误: ".$e->getMessage());
+			exit;
+		}catch(GatewayException $e){
+			Log::error("【支付宝当面付】建立支付错误: ".$e->getMessage()." | ".var_dump($e->getRaw()));
+			var_dump($e->getRaw());
+			exit;
+		}catch(ClassNotFoundException $e){
+			Log::error("【支付宝当面付】未知类型: ".$e->getMessage());
+			exit;
+		}catch(Exception $e){
+			Log::error("【支付宝当面付】错误: ".$e->getMessage());
+			exit;
+		}
+
+		$payment->qr_code = 'http://qr.topscan.com/api.php?text='.$result['qr_code'].'&bg=ffffff&fg=000000&pt=1c73bd&m=10&w=400&el=1&inpt=1eabfc&logo=https://t.alipayobjects.com/tfscom/T1Z5XfXdxmXXXXXXXX.png';
+		//后备:https://cli.im/api/qrcode/code?text=".$result['qr_code']."&mhid=5EfGCwztyckhMHcmI9ZcOKs
+		$payment->save();
+
+		return Response::json(['status' => 'success', 'data' => $payment->sn, 'message' => '创建订单成功!']);
+	}
+
+	public function notify($request)
+	{
+		$data = [
+			'trade_no'       => $request->input('out_trade_no'),
+			'transaction_id' => $request->input('trade_no'),
+		];
+
+		try{
+			$client = new Client(Client::ALIPAY, self::$aliConfig);
+			$result = $client->tradeQuery($data);
+			Log::info("【支付宝当面付】回调验证查询:".var_export($result, TRUE));
+		}catch(InvalidArgumentException $e){
+			Log::error("【支付宝当面付】回调信息错误: ".$e->getMessage());
+			exit;
+		}catch(GatewayException $e){
+			Log::error("【支付宝当面付】建立支付错误: ".$e->getMessage());
+			exit;
+		}catch(ClassNotFoundException $e){
+			Log::error("【支付宝当面付】未知类型: ".$e->getMessage());
+			exit;
+		}catch(Exception $e){
+			Log::error("【支付宝当面付】错误: ".$e->getMessage());
+			exit;
+		}
+
+		$ret = "fail";
+		if($result['code'] == 10000 && $result['msg'] == "Success"){
+			$ret = "success";
+			if($_POST['trade_status'] == 'TRADE_FINISHED' || $_POST['trade_status'] == 'TRADE_SUCCESS'){
+				self::postPayment($request->input('out_trade_no'), '支付宝当面付');
+			}else{
+				Log::info('支付宝当面付-POST:交易失败['.getClientIp().']');
+			}
+		}else{
+			Log::info('支付宝当面付-POST:验证失败['.getClientIp().']');
+		}
+
+		// 返回验证结果
+		exit($ret);
+	}
+
+	public function getReturnHTML($request)
+	{
+		// TODO: Implement getReturnHTML() method.
+	}
+
+	public function getPurchaseHTML()
+	{
+		// TODO: Implement getReturnHTML() method.
+	}
+}

+ 5 - 3
app/Http/Controllers/PaymentController.php

@@ -3,7 +3,7 @@
 namespace App\Http\Controllers;
 
 use App\Components\Helpers;
-use App\Http\Controllers\Gateway\AopF2F;
+use App\Http\Controllers\Gateway\F2Fpay;
 use App\Http\Controllers\Gateway\BitpayX;
 use App\Http\Controllers\Gateway\CodePay;
 use App\Http\Controllers\Gateway\Local;
@@ -34,7 +34,7 @@ class PaymentController extends Controller
 		self::$method = $request->input('method');
 
 		Log::info(self::$method."回调接口[POST]:".self::$method.var_export($request->all(), TRUE));
-		$result = self::getClient()->notify($request);		
+		self::getClient()->notify($request);
 
 		return 0;
 	}
@@ -45,7 +45,7 @@ class PaymentController extends Controller
 			case 'balance':
 				return new Local();
 			case 'f2fpay':
-				return new AopF2F();
+				return new F2Fpay();
 			case 'codepay':
 				return new Codepay();
 			case 'payjs':
@@ -53,6 +53,8 @@ class PaymentController extends Controller
 			case 'bitpayx':
 				return new BitpayX();
 			default:
+				Log::error("未知支付:".self::$method);
+
 				return NULL;
 		}
 	}

+ 1 - 2
composer.json

@@ -22,8 +22,6 @@
     "jenssegers/agent": "^2.6",
     "laravel/framework": "5.8.*",
     "laravel/tinker": "~1.0",
-    "league/omnipay": "^3",
-    "lokielse/omnipay-alipay": "*",
     "mews/captcha": "^3.1",
     "mews/purifier": "^3.2",
     "misechow/geetest": "^1.0",
@@ -33,6 +31,7 @@
     "phpoffice/phpspreadsheet": "^1.11",
     "predis/predis": "^1.1",
     "rap2hpoutre/laravel-log-viewer": "^1.5",
+    "riverslei/payment": "*",
     "scyllaly/hcaptcha": "^4.1",
     "spatie/laravel-permission": "^3.11",
     "xhat/payjs": "^1.4"

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 100 - 841
composer.lock


+ 1 - 1
routes/web.php

@@ -130,7 +130,7 @@ Route::group(['middleware' => ['isForbidden', 'isAdminLogin', 'isAdmin']], funct
 		Route::post("del", "SensitiveWordsController@delSensitiveWords"); // 删除敏感词
 	});
 	Route::get("payment/callbackList", "PaymentController@callbackList"); // 支付回调日志
-	Route::get('logs', '\Rap2hpoutre\Controllers\LogViewerController@index'); // 系统运行日志
+	Route::get('logs', '\Rap2hpoutre\LaravelLogViewer\LogViewerController@index'); // 系统运行日志
 });
 
 Route::group(['middleware' => ['isForbidden', 'isMaintenance', 'isLogin']], function(){

+ 2 - 2
update.sh

@@ -2,11 +2,11 @@
 git fetch --all
 git reset --hard origin/master
 git pull
-php composer.phar install
-php artisan key:generate
 php artisan config:clear
 php artisan cache:clear
 php artisan view:clear
+php composer.phar install
+php artisan key:generate
 php artisan route:cache
 php artisan config:cache
 chown -R www:www ./

Algunos archivos no se mostraron porque demasiados archivos cambiaron en este cambio