EPay.php 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. <?php
  2. namespace App\Http\Controllers\Gateway;
  3. use App\Models\Payment;
  4. use Auth;
  5. use GuzzleHttp\Client;
  6. use Illuminate\Http\JsonResponse;
  7. use Illuminate\Http\Request;
  8. use Response;
  9. class EPay extends AbstractPayment {
  10. public function purchase(Request $request): JsonResponse {
  11. $payment = $this->creatNewPayment(Auth::id(), $request->input('id'), $request->input('amount'));
  12. switch($request->input('type')){
  13. case 2:
  14. $type = 'qqpay';
  15. break;
  16. case 3:
  17. $type = 'wxpay';
  18. break;
  19. case 1:
  20. default:
  21. $type = 'alipay';
  22. break;
  23. }
  24. $data = [
  25. 'pid' => self::$sysConfig['epay_mch_id'],
  26. 'type' => $type,
  27. 'notify_url' => (self::$sysConfig['website_callback_url']?: self::$sysConfig['website_url']).'/callback/notify?method=epay',
  28. 'return_url' => self::$sysConfig['website_url'].'/invoices',
  29. 'out_trade_no' => $payment->trade_no,
  30. 'name' => self::$sysConfig['subject_name']?: self::$sysConfig['website_name'],
  31. 'money' => $payment->amount,
  32. 'sign_type' => 'MD5'
  33. ];
  34. $data['sign'] = $this->aliStyleSign($data, self::$sysConfig['epay_key']);
  35. $url = self::$sysConfig['epay_url'].'submit.php?'.http_build_query($data);
  36. $payment->update(['url' => $url]);
  37. return Response::json(['status' => 'success', 'url' => $url, 'message' => '创建订单成功!']);
  38. }
  39. public function notify(Request $request): void {
  40. if($request->input('trade_status') === 'TRADE_SUCCESS'
  41. && $this->verify($request->except('method'), self::$sysConfig['epay_key'], $request->input('sign'))){
  42. $payment = Payment::whereTradeNo($request->input('out_trade_no'))->first();
  43. if($payment){
  44. $ret = $payment->order->update(['status' => 2]);
  45. if($ret){
  46. exit('SUCCESS');
  47. }
  48. }
  49. }
  50. exit('FAIL');
  51. }
  52. public function queryInfo(): JsonResponse {
  53. $request = (new Client())->get(self::$sysConfig['epay_url'].'api.php', [
  54. 'query' => [
  55. 'act' => 'query',
  56. 'pid' => self::$sysConfig['epay_mch_id'],
  57. 'key' => self::$sysConfig['epay_key']
  58. ]
  59. ]);
  60. if($request->getStatusCode() == 200){
  61. return Response::json(['status' => 'success', 'data' => json_decode($request->getBody(), true)]);
  62. }
  63. return Response::json(['status' => 'fail', 'message' => '获取失败!请检查配置信息']);
  64. }
  65. }