UserController.php 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. $user = User::where('id',$user['id'])->first()->toArray();
  41. return out([
  42. 'overage' => $user['overage'],
  43. ]);
  44. }
  45. // 收益
  46. public function income()
  47. {
  48. $user = auth('api')->user();
  49. $builder = UserShare::with(['child'])->where('user_id',$user['id']);
  50. $data = $builder->paginate($req['per_page'] ?? 15);
  51. $total_num = $builder->sum('id');
  52. $custom = collect([
  53. 'total_num' => $total_num,
  54. ]);
  55. $data = $custom->merge($data);
  56. return out($data);
  57. }
  58. // 购买会员
  59. public function buy()
  60. {
  61. $user = auth('api')->user();
  62. $shareConfig = Setting::first()->toArray();
  63. \DB::beginTransaction();
  64. $app = Factory::payment(config('wechat.payment.default'));
  65. $jssdk = $app->jssdk;
  66. try {
  67. $order = UserVip::where('user_id', $user['id'])->first();
  68. if(empty($order) || empty($order->prepay_id)){
  69. $orderId = get_order_id($user['id']);
  70. if(empty($order)){
  71. $order = UserVip::create([
  72. 'order_id' => $orderId,
  73. 'user_id' => $user['id'],
  74. 'order_fee' => $shareConfig['member_price']
  75. ]);
  76. }else{
  77. $order->order_id = $orderId;
  78. }
  79. $payment = $app->order->unify([
  80. 'body' => '三哥桥梁-购买会员',
  81. 'out_trade_no' => $orderId,
  82. 'total_fee' => $shareConfig['member_price']*100, // 分
  83. 'notify_url' => config('wechat.payment.default.notify_url'), // 支付结果通知网址,如果不设置则会使用配置里的默认地址
  84. 'trade_type' => 'JSAPI', // 请对应换成你的支付方式对应的值类型
  85. 'openid' => $user['openid'],
  86. ]);
  87. if($payment['return_code'] != "SUCCESS" || $payment['result_code'] != 'SUCCESS'){
  88. throw new \Exception($payment['return_msg']);
  89. }
  90. $order->prepay_id = $payment['prepay_id'];
  91. $order->save();
  92. }
  93. if($order->status == 0){
  94. $data = $jssdk->bridgeConfig($order->prepay_id,false);
  95. }else{
  96. return out([],10013,'您已经是会员了!');
  97. }
  98. \DB::commit();
  99. }catch (\Exception $ex){
  100. \DB::rollBack();
  101. return out([],10012,$ex->getMessage());
  102. }
  103. return out($data);
  104. }
  105. // 查询购买订单
  106. public function query()
  107. {
  108. $user = auth('api')->user();
  109. $order = UserVip::where('user_id', $user['id'])->first();
  110. if(!$order){
  111. return out(2);
  112. }
  113. $order = $order->toArray();
  114. return out($order['status']);
  115. }
  116. // 推广人数
  117. public function shares()
  118. {
  119. $user = auth('api')->user();
  120. $builder = User::where('parent_id', $user['id'])->orderBy('become_child_at','desc');
  121. $data = $builder->paginate($req['per_page'] ?? 15);
  122. $total_num = $builder->sum('id');
  123. $custom = collect([
  124. 'total_num' => $total_num,
  125. ]);
  126. $data = $custom->merge($data);
  127. return out($data);
  128. }
  129. public function bind()
  130. {
  131. $req = request()->post();
  132. $this->validate(request(), [
  133. 'scene' => 'required',
  134. ]);
  135. $user = auth('api')->user();
  136. $user = User::where('id', $user['id'])->first();
  137. if($user->parent_id){
  138. return out();
  139. }
  140. $parent = User::where('scene_code', $req['scene'])->first();
  141. if(!$parent){
  142. return out();
  143. }
  144. $user->parent_id = $parent->id;
  145. $user->become_child_at = Carbon::now()->toDateTimeString();
  146. $user->save();
  147. return out();
  148. }
  149. public function bindPhone()
  150. {
  151. $req = request()->post();
  152. $this->validate(request(), [
  153. 'encryptedData' => 'required',
  154. 'iv' => 'required',
  155. ]);
  156. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  157. $user = auth('api')->user()->makeVisible('remember_token');
  158. $decryptedData = $app->encryptor->decryptData($user['remember_token'], $req['iv'], $req['encryptedData']);
  159. $user = User::where('id', $user['id'])->first();
  160. if($user->phone_num != $decryptedData['phoneNumber']) {
  161. $user->phone_num = $decryptedData['phoneNumber'];
  162. $user->save();
  163. }
  164. return out($user);
  165. }
  166. public function update()
  167. {
  168. $req = request()->post();
  169. $this->validate(request(), [
  170. 'encryptedData' => 'required',
  171. 'iv' => 'required',
  172. ]);
  173. $app = Factory::miniProgram(config('wechat.mini_program.default'));
  174. $user = auth('api')->user()->makeVisible('remember_token');
  175. $decryptedData = $app->encryptor->decryptData($user['remember_token'], $req['iv'], $req['encryptedData']);
  176. $user = User::where('id', $user['id'])->first();
  177. $user->nickname = $decryptedData['nickName'];
  178. $user->head_img = $decryptedData['avatarUrl'];
  179. $user->save();
  180. return out($user);
  181. }
  182. }