PayController.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. <?php
  2. namespace App\Http\Controllers\V1;
  3. use App\Models\User;
  4. use App\Models\UserMember;
  5. use App\Models\UserMemberOrder;
  6. use Illuminate\Http\Request;
  7. use Alipay\EasySDK\Kernel\Factory;
  8. use Alipay\EasySDK\Kernel\Util\ResponseChecker;
  9. use Alipay\EasySDK\Kernel\Config;
  10. /**
  11. * 支付
  12. */
  13. class PayController extends Controller
  14. {
  15. public function __construct()
  16. {
  17. $this->user = auth('api')->user();
  18. $this->userId = $this->user ? $this->user->id : 0;
  19. //如果用户被删除,会自动退出登录
  20. if (!empty($this->user->deleted_at)) {
  21. $this->user->online = 0;
  22. $this->user->save();
  23. auth('api')->logout();
  24. }
  25. Factory::setOptions($this->getOptions());
  26. }
  27. public function getOptions(){
  28. $options = new Config();
  29. $options->protocol = 'https';
  30. $options->gatewayHost = 'openapi.alipay.com';
  31. $options->signType = 'RSA2';
  32. $options->appId = '2016082201783461';
  33. $options->merchantPrivateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDrHSXWmI/CgI5sdy+RWLKQixj4PwUnkKq+vSxSSkWBCnL0y3/TOQDSCdYENLc61mXZBi7Aq6igGt7Fr5Kdul35KxMsZa1OJ4i3fGG1y2KC3DePzwduIRn8n/INgKAeOAwJaCWFhQ5Ux+c4U2pFMWFtKKgpfVq2Yotm8pH+IUUflKn2UhlSu60W9sHp/LIqrHgh1NztnEQG7Bhlp+5RJ7qHiZi1C88w99s9ff43TAuWFiN6JQwmIMLnH5XsJU/qa7G4QrMFawPKXyU/tvB/IC5pWUJfRC+x03JMvBT+DZ9qDIcyDRh3Wsmdb8tYKnw5wpzRLZDY1MJG63vaLiMRTRsXAgMBAAECggEAT8Dwb+4KfgkLxwFbEmvLDrsQek0uW3B4awFSwotNLmuz+RP6xVTF0XnirkSPjxbhL5AoVdUk+0KCJP7ctkJc1EPnWh0Xf7Zrawp3PqrCPO+krVSmCZaS8R30ht4F8ppCgwJgD/3Fkb7J0VKCbvxENzoeaQyLs+iTrxVDrrfscbxevx75juU0A0bmIOOYuFWGvVjVBMqxb5ZlayuB73nq3rDqzaC8MxVquN8j8KkU+in8e1MsXkCY/ZtT6YsC5zRcR85qF053pcYxATLpNxyKuBzDU4alf1zYGs/cVyONTxu2KTRQQ8tCyNwc0o7T6TLnxaBxeyXgXbNytGk+aSsruQKBgQD5mfGFQcYK+qlIAhk59uHiWfGHI711jV6O2YCkCanFpujIZkaqhmaCd9vszgvyVLd1MDwMSY+3dFM+L4l32NaOen5ljutszsZtnfV82RyzdemycoMe5KxZ1ahD3CuWrzg49X13dPA9bvHGFWutSPZwj3haabjjN3826kAOnBGguwKBgQDxJCCjA8ngJnjH+LRLlKsCRPNlG8KRaqpTaxftZVSLAkdeFGRejnl3SN1f7/JFF4L4V0uKbA+eqNwOKoBouSn1MGagJaRY/goomAyS48AvmQiwi3XelRdw0M5jdY4ySwCmBRL69JSA03PJdvvECQFRKFY7YPyfvdxyuWqcLJ7nVQKBgQDlgeTvuAQHMmcXfD5/6v/W5wdMUNOz1HK+/UXpD62YvZnMMycFQ6Hck6OYgfnAMJ+kVN7SGY3ZjU/BnWpU1gCrb/zrG1hka1lPj/AbhXN7nI9vcxYYAQJtdCVNiJRX8PPMhAaDIfaJNot/rVCePLnF1FZBJHdKDkyeTRTrmhwnYwKBgQCE+OISYmVw+GYEB44MW4fNcY4yBBPPsl0IMPb5zrXHDdOi+mW6iqBKeeCxJZSYKvXq0eBzDVGzsPPfz+oNVYXgkfcVeoxdEoExj17npTV2SdIz4EN4IQjTCiG1UL6/1wIdipDD2BkHzRJ9VuJQYJLcWPzsM3g68ixdCwfR5P0fHQKBgGSw75AZY7RVtcTy2TR5kP9PetRtKsRjLxMfbnwRGpx3EO0sTGdBbWBMh/+jCqMh4GVofKObvgrY2/fFNsu1n093hPIqHF9M3MKE3KO44n9zOareY8VewFzmob2VkdWuwSLm4BOPckQUuV+hUqcr9okzEcjoDjm3afxD6jA/xHvA";
  34. $options->alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAjkCziKKZaCde/Wyf29S7Z/lvVLcecLQzJa2V6EGCsBbN8GA/kF7dnHPbzps32eurMIysvmhhulAd+D3O/580lQh6cmcUVc3EZ01lfq2Ki+jM2B8EVTyegqS9ADsIVGa//1hJ7i2J2ulgD1Ros5WBZ8rebsd6Qhq/0uJeOksEFA/Fxv209yp+gKnidUozX7ACDalqHp38OeRw0YWRRICyKh1pPkW7n+hj2GElIBPZUc9SWPkNIkCHwExjV1ha6BkrdiBeLrkKjgh1ul6rTG7AeQdtW54nOWmt7caNJ/swnA7zi8n9j/FAzF9tz4mflVCvdOZYO0PCs+Gea4QVYh2X3wIDAQAB";
  35. $options->notifyUrl = 'https://huabook.swdz.com/api/pay/alipay_notify'; // https://huabook.swdz.com/api/pay/alipay_notify
  36. return $options;
  37. }
  38. /**
  39. * @return void
  40. * 构建支付
  41. */
  42. public function payment(Request $request){
  43. $member_id = $request->get('member_id');
  44. $pay_type = $request->get('pay_type');
  45. $money = $request->get('money');
  46. if(!$money || !$pay_type || !$member_id){
  47. return $this->error("缺少参数!");
  48. }
  49. $member = UserMember::query()->where('id',$member_id)->first();
  50. if(!$member){
  51. return $this->error("购买选项不存在!");
  52. }
  53. $data = [
  54. 'user_id' => $this->userId,
  55. 'days' => $member->month * 30,// 续费时间 = 月份 * 默认一个月30天
  56. 'pay_type' => $pay_type,
  57. 'status' => 0,
  58. 'order_no' => date('YmdHis') . str_pad(mt_rand(1, 999), 3, '0', STR_PAD_LEFT), // 订单号
  59. 'money' => $member->money // 续费金额
  60. ];
  61. $order = UserMemberOrder::query()->create($data);
  62. if(!$order){
  63. return $this->error("操作失败!");
  64. }
  65. if($pay_type == 1){ // 支付宝支付
  66. $protocol = isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? 'https' : 'http';
  67. $domain = $protocol . '://' . $_SERVER['HTTP_HOST'];
  68. $url = $domain."/#/me/member/join?order_id=".$order->id;
  69. $result = Factory::payment()->page()->pay("加入企业会员",$order->order_no,$order->money,$url);
  70. return $this->success($result->body);
  71. }else{
  72. return $this->error("正在开发中...");
  73. }
  74. }
  75. /**
  76. * @return void
  77. * 支付宝回调地址
  78. */
  79. public function alipayNotify(Request $request){
  80. $params = $request->all();
  81. $result = Factory::payment()->common()->verifyNotify($params);
  82. if ($result) {
  83. // 验证成功
  84. $out_trade_no = $params['out_trade_no'];
  85. // $trade_no = $params['trade_no'];
  86. $order = UserMemberOrder::query()->where('order_no','=',$out_trade_no)->first(); //查询订单信息
  87. $user = User::query()->where('id','=',$order->user_id)->first(); //查询用户信息
  88. $end_time = $order->days * 86400; // 天数换取时间戳(会员结束时间)
  89. // 剩下会员时长
  90. if(!empty($user->end_time)){
  91. if(strtotime($user->end_time) > time()){
  92. $user->end_time = date("Y-m-d H:i:s",strtotime($user->end_time) + $end_time);
  93. }else{
  94. $user->start_time = date("Y-m-d H:i:s",time()); // 当前时间
  95. $user->end_time = date("Y-m-d H:i:s",strtotime($user->end_time) + $end_time);
  96. }
  97. }else{
  98. $user->start_time = date("Y-m-d H:i:s",time()); // 当前时间
  99. $user->end_time = date("Y-m-d H:i:s",time() + $end_time); // 会员结束时间
  100. }
  101. $user->member_type = 2; // 变为企业会员
  102. $order->status = 1;
  103. $order->pay_time = date("Y-m-d H:i:s",time());
  104. $order->save();
  105. $user->save();
  106. return 'success';
  107. } else {
  108. // 验证失败
  109. return 'failure';
  110. }
  111. }
  112. }