UserController.php 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. <?php
  2. namespace App\Http\Controllers\Api;
  3. use App\Models\Setting;
  4. use App\Models\ShareConfig;
  5. use App\Models\User;
  6. use App\Models\UserShare;
  7. use App\Models\UserVip;
  8. use App\Models\UserWithdraw;
  9. use Carbon\Carbon;
  10. use EasyWeChat\Factory;
  11. use function Symfony\Component\Translation\t;
  12. class UserController extends Controller
  13. {
  14. public function get()
  15. {
  16. $user = auth('api')->user();
  17. $user = User::with(['parent'])->where('id',$user['id'])->first()->toArray();
  18. return out($user);
  19. }
  20. // 购买记录
  21. public function memberRecord()
  22. {
  23. $user = auth('api')->user();
  24. $record = UserVip::where('user_id',$user['id'])
  25. ->where('status',1)
  26. ->first();
  27. if(empty($record)){
  28. return out();
  29. }
  30. $record = $record->toArray();
  31. return out([
  32. 'order_fee' => $record['order_fee'],
  33. 'buy_time' => $record['pay_at'],
  34. ]);
  35. }
  36. // 余额
  37. public function overage()
  38. {
  39. $user = auth('api')->user();
  40. $shareConfig = ShareConfig::first()->toArray();
  41. $user = User::where('id',$user['id'])->first()->toArray();
  42. return out([
  43. 'overage' => $user['overage'],
  44. 'desc' => $shareConfig['withdraw_desc']
  45. ]);
  46. }
  47. // 收益
  48. public function income()
  49. {
  50. $user = auth('api')->user();
  51. $builder = UserShare::with(['child'])->where('user_id',$user['id']);
  52. $data = $builder->paginate($req['per_page'] ?? 15);
  53. $total_num = $builder->sum('id');
  54. $custom = collect([
  55. 'total_num' => $total_num,
  56. ]);
  57. $data = $custom->merge($data);
  58. return out($data);
  59. }
  60. // 购买会员
  61. public function buy()
  62. {
  63. $user = auth('api')->user();
  64. $shareConfig = ShareConfig::first()->toArray();
  65. \DB::beginTransaction();
  66. $app = Factory::payment(config('wechat.payment.default'));
  67. $jssdk = $app->jssdk;
  68. try {
  69. $order = UserVip::where('user_id', $user['id'])->first();
  70. if(empty($order) || empty($order->prepay_id) || strtotime($order->updated_at) < time() - 30 * 60){
  71. $orderId = get_order_id($user['id']);
  72. if(empty($order)){
  73. $order = UserVip::create([
  74. 'order_id' => $orderId,
  75. 'user_id' => $user['id'],
  76. 'order_fee' => $shareConfig['member_price']
  77. ]);
  78. }else{
  79. $order->order_id = $orderId;
  80. }
  81. $payment = $app->order->unify([
  82. 'body' => '三哥桥梁-购买会员',
  83. 'out_trade_no' => $orderId,
  84. 'total_fee' => $shareConfig['member_price']*100, // 分
  85. 'notify_url' => config('wechat.payment.default.notify_url'), // 支付结果通知网址,如果不设置则会使用配置里的默认地址
  86. 'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
  87. 'openid' => $user['openid'],
  88. ]);
  89. if($payment['return_code'] != "SUCCESS" || $payment['result_code'] != 'SUCCESS'){
  90. throw new \Exception($payment['return_msg']);
  91. }
  92. $order->prepay_id = $payment['prepay_id'];
  93. $order->save();
  94. }
  95. if($order->status == 0){
  96. $data = $jssdk->bridgeConfig($order->prepay_id,false);
  97. }else{
  98. return out([],10013,'您已经是会员了!');
  99. }
  100. \DB::commit();
  101. }catch (\Exception $ex){
  102. \DB::rollBack();
  103. return out([],10012,$ex->getMessage());
  104. }
  105. return out($data);
  106. }
  107. // 查询购买订单
  108. public function query()
  109. {
  110. $user = auth('api')->user();
  111. $order = UserVip::where('user_id', $user['id'])->first();
  112. if(!$order){
  113. return out(2);
  114. }
  115. $order = $order->toArray();
  116. return out($order['status']);
  117. }
  118. // 推广人数
  119. public function shares()
  120. {
  121. $user = auth('api')->user();
  122. $builder = User::where('parent_id', $user['id'])->orderBy('become_child_at','desc');
  123. $data = $builder->paginate($req['per_page'] ?? 15);
  124. $total_num = $builder->sum('id');
  125. $custom = collect([
  126. 'total_num' => $total_num,
  127. ]);
  128. $data = $custom->merge($data);
  129. return out($data);
  130. }
  131. public function bind()
  132. {
  133. $req = request()->post();
  134. $this->validate(request(), [
  135. 'scene' => 'required',
  136. 'parent_id' => 'required',
  137. ]);
  138. $user = auth('api')->user();
  139. $user = User::where('id', $user['id'])->first();
  140. if($user->parent_id){
  141. return out();
  142. }
  143. $parent = null;
  144. if($req['scene']){
  145. $parent = User::where('scene_code', $req['scene'])->first();
  146. }elseif($req['parent_id']){
  147. $parent = User::where('id', $req['parent_id'])->first();
  148. }
  149. if(!$parent){
  150. return out();
  151. }
  152. if($parent->id == $user->id){
  153. return out();
  154. }
  155. $user->parent_id = $parent->id;
  156. $user->become_child_at = Carbon::now()->toDateTimeString();
  157. $user->save();
  158. return out();
  159. }
  160. public function bindPhone()
  161. {
  162. $req = request()->post();
  163. $this->validate(request(), [
  164. 'encryptedData' => 'required',
  165. 'iv' => 'required',
  166. ]);
  167. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  168. $user = auth('api')->user()->makeVisible('remember_token');
  169. $decryptedData = $app->encryptor->decryptData($user['remember_token'], $req['iv'], $req['encryptedData']);
  170. $user = User::where('id', $user['id'])->first();
  171. if($user->phone_num != $decryptedData['phoneNumber']) {
  172. $user->phone_num = $decryptedData['phoneNumber'];
  173. $user->save();
  174. }
  175. return out($user);
  176. }
  177. public function update()
  178. {
  179. $req = request()->post();
  180. $this->validate(request(), [
  181. 'encryptedData' => 'required',
  182. 'iv' => 'required',
  183. ]);
  184. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  185. $user = auth('api')->user()->makeVisible('remember_token');
  186. $decryptedData = $app->encryptor->decryptData($user['remember_token'], $req['iv'], $req['encryptedData']);
  187. $user = User::where('id', $user['id'])->first();
  188. $user->nickname = $decryptedData['nickName'];
  189. $user->head_img = $decryptedData['avatarUrl'];
  190. $user->save();
  191. return out($user);
  192. }
  193. }