Pay.php 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. <?php
  2. namespace App\Http\Controllers\api;
  3. use App\Http\Controllers\Controller;
  4. use Illuminate\Support\Facades\Log;
  5. use Illuminate\Http\Request;
  6. use App\Services\PaymentOrderService;
  7. use App\Services\Payment\NoPayService;
  8. class Pay extends Controller
  9. {
  10. // 同步通知
  11. public function returnHandle(Request $request)
  12. {
  13. }
  14. // 异步通知
  15. public function notifyHandle(Request $request)
  16. {
  17. $data = $request->all();
  18. $context = $this->callbackContext($request, $data);
  19. Log::error('支付提现回调收到', $context);
  20. try {
  21. $res = PaymentOrderService::receiveOrder($data);
  22. Log::error('支付提现回调处理结果', $context + ['success' => (bool)$res]);
  23. if (NoPayService::getWithdrawMerchantId() !== '' && ($data['appId'] ?? '') === NoPayService::getWithdrawMerchantId()) {
  24. return response($res ? 'SUCCESS' : 'fail');
  25. }
  26. return response('success');
  27. } catch (\Throwable $e) {
  28. Log::error('支付提现回调处理异常', $context + [
  29. 'error' => $e->getMessage(),
  30. 'exception' => get_class($e),
  31. ]);
  32. return response('fail', 500);
  33. }
  34. }
  35. // 用户支付异步通知
  36. public function harvestHandle(Request $request)
  37. {
  38. $data = $request->all();
  39. $context = $this->callbackContext($request, $data);
  40. Log::error('支付充值回调收到', $context);
  41. try {
  42. $res = PaymentOrderService::receivePay($data);
  43. Log::error('支付充值回调处理结果', $context + ['success' => (bool)$res]);
  44. if (NoPayService::getDepositMerchantId() !== '' && ($data['appId'] ?? '') === NoPayService::getDepositMerchantId()) {
  45. return response($res ? 'SUCCESS' : 'fail');
  46. }
  47. return response('success');
  48. } catch (\Throwable $e) {
  49. Log::error('支付充值回调处理异常', $context + [
  50. 'error' => $e->getMessage(),
  51. 'exception' => get_class($e),
  52. ]);
  53. return response('fail', 500);
  54. }
  55. }
  56. private function callbackContext(Request $request, array $data): array
  57. {
  58. if (isset($data['sign'])) {
  59. $data['sign'] = substr((string)$data['sign'], 0, 8) . '***';
  60. }
  61. return [
  62. 'ip' => $request->ip(),
  63. 'url' => $request->fullUrl(),
  64. 'content_type' => $request->header('Content-Type'),
  65. 'user_agent' => $request->userAgent(),
  66. 'data' => $data,
  67. 'raw_body' => $request->getContent(),
  68. ];
  69. }
  70. }