PayJs.php 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. <?php
  2. namespace App\Utils\Payments;
  3. use App\Utils\Library\PaymentHelper;
  4. use App\Utils\Library\Templates\Gateway;
  5. use Illuminate\Http\JsonResponse;
  6. use Illuminate\Http\Request;
  7. use Log;
  8. use Xhat\Payjs\Payjs as Pay;
  9. class PayJs implements Gateway
  10. {
  11. private static array $config;
  12. public function __construct()
  13. {
  14. self::$config = [
  15. 'mchid' => sysConfig('payjs_mch_id'), // 配置商户号
  16. 'key' => sysConfig('payjs_key'), // 配置通信密钥
  17. ];
  18. }
  19. public static function metadata(): array
  20. {
  21. return [
  22. 'key' => 'payjs',
  23. 'method' => ['wechat'],
  24. 'settings' => [
  25. 'payjs_mch_id' => null,
  26. 'payjs_key' => null,
  27. ],
  28. ];
  29. }
  30. public function purchase(Request $request): JsonResponse
  31. {
  32. $payment = PaymentHelper::createPayment(auth()->id(), $request->input('id'), $request->input('amount'));
  33. $result = (new Pay($this::$config))->cashier([
  34. 'body' => sysConfig('subject_name') ?: sysConfig('website_name'),
  35. 'total_fee' => $payment->amount * 100,
  36. 'out_trade_no' => $payment->trade_no,
  37. 'notify_url' => route('payment.notify', ['method' => 'payjs']),
  38. ]);
  39. // 获取收款二维码内容
  40. $payment->update(['qr_code' => 1, 'url' => $result]);
  41. // $this->addPamentCallback($payment->trade_no, null, $payment->amount * 100);
  42. return response()->json(['status' => 'success', 'data' => $payment->trade_no, 'message' => trans('user.payment.order_creation.success')]);
  43. }
  44. public function notify(Request $request): void
  45. {
  46. $data = (new Pay($this::$config))->notify();
  47. if ($data['return_code'] == 1) {
  48. if (PaymentHelper::paymentReceived($data['out_trade_no'])) {
  49. exit('success');
  50. }
  51. } else {
  52. Log::error('【PayJs】交易失败:'.var_export($data, true));
  53. }
  54. exit('fail');
  55. }
  56. }