EPay.php 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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('oid'), $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::whereId($payment->id)->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. $this->postPayment($request->input('out_trade_no'), 'EPay');
  43. exit('SUCCESS');
  44. }
  45. exit('FAIL');
  46. }
  47. public function queryInfo(): JsonResponse {
  48. $request = (new Client())->get(self::$sysConfig['epay_url'].'api.php', [
  49. 'query' => [
  50. 'act' => 'query',
  51. 'pid' => self::$sysConfig['epay_mch_id'],
  52. 'key' => self::$sysConfig['epay_key']
  53. ]
  54. ]);
  55. if($request->getStatusCode() == 200){
  56. return Response::json(['status' => 'success', 'data' => json_decode($request->getBody(), true)]);
  57. }
  58. return Response::json(['status' => 'fail', 'message' => '获取失败!请检查配置信息']);
  59. }
  60. }