KlarnaController.php 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. <?php
  2. namespace Longyi\Pay\Klarna\Http\Controllers;
  3. use Illuminate\Support\Facades\Log;
  4. use Longyi\Pay\Klarna\Payment\Klarna;
  5. use Webkul\Checkout\Facades\Cart;
  6. use Webkul\Sales\Models\Order;
  7. use Webkul\Sales\Repositories\OrderRepository;
  8. use Webkul\Sales\Transformers\OrderResource;
  9. use Longyi\Pay\AwxKlarna\Payment\AwxKlarna;
  10. class KlarnaController extends Controller
  11. {
  12. /**
  13. * Create a new controller instance.
  14. *
  15. * @return void
  16. */
  17. public function __construct(
  18. protected OrderRepository $orderRepository,
  19. protected Klarna $klarna,
  20. ) {}
  21. public function hook()
  22. {
  23. $rawBody = request()->getContent();
  24. $orderId = request()->get('orderId', 0);
  25. $secretToken = request()->get('secretToken', '');
  26. Log::channel('payment')->info('klarna hook request received', [
  27. 'query' => request()->query(),
  28. 'order_id' => $orderId,
  29. 'secretToken' => $secretToken,
  30. 'raw_body' => $rawBody,
  31. ]);
  32. // 验证签名
  33. if (!$this->klarna->verifySignature($orderId, $secretToken)) {
  34. @header("HTTP/1.0 400 Bad Request");
  35. exit;
  36. }
  37. if (empty($orderId)) {
  38. @header("HTTP/1.0 400 Bad Request");
  39. exit;
  40. }
  41. $order = $this->orderRepository->find($orderId);
  42. if (empty($order)) {
  43. @header("HTTP/1.0 400 Bad Request");
  44. exit;
  45. }
  46. $event = json_decode($rawBody);
  47. if ($event->merchant_reference2 != $orderId) {
  48. @header("HTTP/1.0 400 Bad Request");
  49. exit;
  50. }
  51. try {
  52. $this->klarna->paymentSucceeded($order, $event->authorization_token);
  53. @header("HTTP/1.0 200 ok");
  54. } catch (\Exception $e) {
  55. //记录日志
  56. Log::channel('payment')->error('klarna hook error', [
  57. 'order' => $order,
  58. 'event' => $event,
  59. 'error' => $e->getMessage()
  60. ]);
  61. @header("HTTP/1.0 400 Bad Request");
  62. exit;
  63. }
  64. }
  65. }