fix: payment

This commit is contained in:
tokumeikoi 2021-04-28 18:29:28 +09:00
parent 3bfa2180e6
commit 0333d62e6f
3 changed files with 9 additions and 7 deletions

View File

@ -11,11 +11,11 @@ use App\Http\Controllers\Controller;
class PaymentController extends Controller class PaymentController extends Controller
{ {
public function notify($method, Request $request) public function notify($method, $id, Request $request)
{ {
$paymentService = new PaymentService($method); $paymentService = new PaymentService($method, $id);
$verify = $paymentService->notify($request->input()); $verify = $paymentService->notify($request->input());
if ($verify) abort(500, 'verify error'); if (!$verify) abort(500, 'verify error');
if (!$this->handle($verify['trade_no'], $verify['callback_no'])) { if (!$this->handle($verify['trade_no'], $verify['callback_no'])) {
abort(500, 'handle error'); abort(500, 'handle error');
} }
@ -25,10 +25,10 @@ class PaymentController extends Controller
private function handle($tradeNo, $callbackNo) private function handle($tradeNo, $callbackNo)
{ {
$order = Order::where('trade_no', $tradeNo)->first(); $order = Order::where('trade_no', $tradeNo)->first();
if ($order->status === 1) return true;
if (!$order) { if (!$order) {
abort(500, 'order is not found'); abort(500, 'order is not found');
} }
if ($order->status === 1) return true;
$orderService = new OrderService($order); $orderService = new OrderService($order);
if (!$orderService->success($callbackNo)) { if (!$orderService->success($callbackNo)) {
return false; return false;

View File

@ -21,7 +21,7 @@ class GuestRoute
// Telegram // Telegram
$router->post('/telegram/webhook', 'Guest\\TelegramController@webhook'); $router->post('/telegram/webhook', 'Guest\\TelegramController@webhook');
// Payment // Payment
$router->match(['get', 'post'], '/payment/{method}', 'Guest\\PaymentController@notify'); $router->match(['get', 'post'], '/payment/{method}/{id}', 'Guest\\PaymentController@notify');
}); });
} }
} }

View File

@ -15,6 +15,8 @@ class PaymentService
if ($id) $payment = Payment::find($id)->toArray(); if ($id) $payment = Payment::find($id)->toArray();
$this->config = []; $this->config = [];
if (isset($payment) && $payment['config']) $this->config = json_decode($payment['config'], true); if (isset($payment) && $payment['config']) $this->config = json_decode($payment['config'], true);
$this->config['id'] = $id;
$this->config['enable'] = $payment['enable'];
$this->payment = new $this->class($this->config); $this->payment = new $this->class($this->config);
} }
@ -27,8 +29,8 @@ class PaymentService
public function pay($order) public function pay($order)
{ {
return $this->payment->pay([ return $this->payment->pay([
'notify_url' => url('/api/v1/guest/payment/notify/' . $this->method), 'notify_url' => url("/api/v1/guest/payment/notify/{$this->method}/{$this->config['id']}"),
'return_url' => config('v2board.app_url', env('APP_URL')) . '/#/order', 'return_url' => config('v2board.app_url', env('APP_URL')) . '/#/order/' . $order['trade_no'],
'trade_no' => $order['trade_no'], 'trade_no' => $order['trade_no'],
'total_amount' => $order['total_amount'], 'total_amount' => $order['total_amount'],
'user_id' => $order['user_id'], 'user_id' => $order['user_id'],