UserController.php 6.9 KB

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