AbstractPayment.php 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. <?php
  2. /**
  3. * Created by PhpStorm.
  4. * User: tonyzou
  5. * Date: 2018/9/24
  6. * Time: 下午4:23
  7. */
  8. namespace App\Services\Gateway;
  9. use App\Models\Paylist;
  10. use App\Models\Payback;
  11. use App\Models\User;
  12. use App\Models\Code;
  13. use App\Services\Config;
  14. use App\Utils\Telegram;
  15. use Slim\Http\{Request, Response};
  16. abstract class AbstractPayment
  17. {
  18. /**
  19. * @param Request $request
  20. * @param Response $response
  21. * @param array $args
  22. */
  23. abstract public function purchase($request, $response, $args);
  24. /**
  25. * @param Request $request
  26. * @param Response $response
  27. * @param array $args
  28. */
  29. abstract public function notify($request, $response, $args);
  30. /**
  31. * @param Request $request
  32. * @param Response $response
  33. * @param array $args
  34. */
  35. abstract public function getReturnHTML($request, $response, $args);
  36. /**
  37. * @param Request $request
  38. * @param Response $response
  39. * @param array $args
  40. */
  41. abstract public function getStatus($request, $response, $args);
  42. abstract public function getPurchaseHTML();
  43. public function postPayment($pid, $method)
  44. {
  45. $p = Paylist::where('tradeno', $pid)->first();
  46. if ($p->status == 1) {
  47. return json_encode(['errcode' => 0]);
  48. }
  49. $p->status = 1;
  50. $p->save();
  51. $user = User::find($p->userid);
  52. $user->money += $p->total;
  53. $user->save();
  54. $codeq = new Code();
  55. $codeq->code = $method;
  56. $codeq->isused = 1;
  57. $codeq->type = -1;
  58. $codeq->number = $p->total;
  59. $codeq->usedatetime = date('Y-m-d H:i:s');
  60. $codeq->userid = $user->id;
  61. $codeq->save();
  62. if ($user->ref_by >= 1) {
  63. $gift_user = User::where('id', '=', $user->ref_by)->first();
  64. $gift_user->money += ($codeq->number * (Config::get('code_payback') / 100));
  65. $gift_user->save();
  66. $Payback = new Payback();
  67. $Payback->total = $codeq->number;
  68. $Payback->userid = $user->id;
  69. $Payback->ref_by = $user->ref_by;
  70. $Payback->ref_get = $codeq->number * (Config::get('code_payback') / 100);
  71. $Payback->datetime = time();
  72. $Payback->save();
  73. }
  74. if (Config::get('enable_donate') == true) {
  75. if ($user->is_hide == 1) {
  76. Telegram::Send('一位不愿透露姓名的大老爷给我们捐了 ' . $codeq->number . ' 元!');
  77. } else {
  78. Telegram::Send($user->user_name . ' 大老爷给我们捐了 ' . $codeq->number . ' 元!');
  79. }
  80. }
  81. return 0;
  82. }
  83. public static function generateGuid()
  84. {
  85. mt_srand((double)microtime() * 10000);
  86. $charid = strtoupper(md5(uniqid(mt_rand() + time(), true)));
  87. $hyphen = chr(45);
  88. $uuid = chr(123)
  89. . substr($charid, 0, 8) . $hyphen
  90. . substr($charid, 8, 4) . $hyphen
  91. . substr($charid, 12, 4) . $hyphen
  92. . substr($charid, 16, 4) . $hyphen
  93. . substr($charid, 20, 12)
  94. . chr(125);
  95. $uuid = str_replace(['}', '{', '-'], '', $uuid);
  96. $uuid = substr($uuid, 0, 8);
  97. return $uuid;
  98. }
  99. }