Appshop.php 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. <?php
  2. /**
  3. * @copyright Copyright (c) 2017 https://www.sapixx.com All rights reserved.
  4. * @license Licensed (http://www.apache.org/licenses/LICENSE-2.0).
  5. * @author pillar<ltmn@qq.com>
  6. * 应用管理
  7. */
  8. namespace app\system\controller\passport;
  9. use app\common\event\Passport;
  10. use app\common\model\SystemMember;
  11. use app\common\model\SystemMemberMiniapp;
  12. use app\common\model\SystemMiniapp;
  13. use app\common\model\SystemMemberMiniappOrder;
  14. use app\common\model\SystemMemberBank;
  15. use app\common\model\SystemMemberBankBill;
  16. class Appshop extends Common{
  17. public function initialize(){
  18. parent::initialize();
  19. if($this->user->parent_id){
  20. $this->error('仅创始人有权限访问');
  21. }
  22. $this->assign('pathMaps', [['name'=>'应用商店','url'=>url('system/passport.appshop/index')]]);
  23. }
  24. /* 列表
  25. * @access public
  26. */
  27. public function index(){
  28. $view['list'] = SystemMiniapp::where(['is_lock' => 0,'is_diyapp' => 0])->order('id desc')->paginate(10);
  29. return view()->assign($view);
  30. }
  31. /**
  32. * 阅读内容
  33. * @return void
  34. */
  35. public function review(int $id){
  36. $view['info'] = SystemMiniapp::where(['id' => $id,'is_lock' => 0,'is_diyapp' => 0])->find();
  37. if(!$view['info']){
  38. return $this->error("404 NOT FOUND");
  39. }
  40. $view['style_pic'] = empty($view['info']['style_pic']) ? [] :json_decode($view['info']['style_pic'],true);
  41. $view['miniapp'] = SystemMemberMiniappOrder::where(['member_id' => $this->user['id'],'miniapp_id' => $id])->count();
  42. $view['pathMaps'] = [['name'=>'应用商店','url'=>url('system/passport.appshop/index')],['name'=>$view['info']['title'],'url'=>url('passport.appshop/review',['id' => $id])]];
  43. return view()->assign($view);
  44. }
  45. /**
  46. * 购买小程序
  47. */
  48. public function buy($input){
  49. if(request()->isPost()){
  50. $data = [
  51. 'member_id' => $this->user->id,
  52. 'id' => $this->request->param('miniapp_id/d'),
  53. 'title' => $this->request->param('appname/s'),
  54. 'safepassword' => $this->request->param('safepassword/s'),
  55. ];
  56. $validate = $this->validate($data,'MemberBank.buy');
  57. if(true !== $validate){
  58. return json(['code'=>0,'msg'=>$validate]);
  59. }
  60. //判断安全密码是否正确
  61. $isPass = empty($this->user->safe_password) ? SystemMember::checkPasspord($this->user->id,$data['safepassword']) : SystemMember::checkSafePasspord($this->user->id,$data['safepassword']);
  62. if(!$isPass){
  63. return enjson(0,'密码不正确');
  64. }
  65. $miniapp = SystemMiniapp::where(['id' => $data['id'],'is_lock' => 0])->field('id,sell_price,template_id')->find();
  66. if(empty($miniapp)){
  67. return json(['code'=>0,'msg'=>'未找到应用']);
  68. }
  69. //如果价格<=0,就不在查询数据库
  70. if($miniapp->sell_price > 0){
  71. $rel = SystemMemberBank::moneyJudge($this->user->id,$miniapp->sell_price);
  72. if($rel){
  73. return json(['code'=>0,'msg'=>'余额不足,请充值']);
  74. }
  75. }
  76. //新增购买列表
  77. $order['member_id'] = (int)$data['member_id'];
  78. $order['miniapp_id'] = (int)$data['id'];
  79. $order['update_var'] = (int)$miniapp->template_id;
  80. $order['start_time'] = time();
  81. $order['end_time'] = time() + 31536000;
  82. //创建订单、账单、扣费
  83. $id = SystemMemberMiniappOrder::insertGetId($order);
  84. SystemMemberBank::moneyUpdate($this->user->id,-$miniapp->sell_price);
  85. SystemMemberBankBill::create(['state' => 1,'money' => $miniapp->sell_price,'member_id' => $this->user->id,'message' => '购买应用程序' . $data['title'],'update_time' => time()]);
  86. //同步创建客户应用并生成服务ID
  87. $member_miniapp_id = SystemMemberMiniapp::insertGetId(['miniapp_order_id' => $id,'member_id' => $this->user->id,'miniapp_id' => $data['id'],'appname' => $data['title'],'create_time' => time()]);
  88. SystemMemberMiniapp::where(['id' => $member_miniapp_id])->update(['service_id' => uuid(3,true,$member_miniapp_id)]); //生成应用服务ID
  89. //设置当前管理的应用ID
  90. Passport::setMiniapp(['member_id' => $this->user->id,'miniapp_id' => $miniapp->id,'member_miniapp_id' => $member_miniapp_id]); //设置登录
  91. return json(['code'=>200,'msg'=>'开通成功,授权你的公众号或小程序即可开始使用','parent' => 1]);
  92. }else{
  93. $view['info'] = SystemMiniapp::where(['id' => $input,'is_lock' => 0])->find();
  94. if(!$view['info']){
  95. return $this->error("404 NOT FOUND");
  96. }
  97. $view['bank'] = SystemMemberBank::where(['member_id' => $this->user->id])->find();
  98. $view['miniapp'] = SystemMemberMiniappOrder::where(['member_id' => $this->user->id,'miniapp_id' => $input])->count();
  99. return view()->assign($view);
  100. }
  101. }
  102. }