Bank.php 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258
  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\popupshop\controller\api\v1;
  9. use app\popupshop\controller\api\Base;
  10. use app\popupshop\model\Bank as BankModel;
  11. use app\popupshop\model\BankBill;
  12. use app\popupshop\model\BankRecharge;
  13. use app\popupshop\model\BankCash;
  14. use app\popupshop\model\BankInfo;
  15. use app\common\model\SystemUser;
  16. use app\popupshop\model\Config;
  17. use app\common\facade\WechatPay;
  18. use think\facade\Request;
  19. class Bank extends Base
  20. {
  21. public function initialize() {
  22. parent::initialize();
  23. if(!$this->user){
  24. exit(json_encode(['code'=>401,'msg'=>'用户认证失败']));
  25. }
  26. }
  27. /**
  28. * 个人钱包
  29. * @param string $no
  30. * @return void
  31. */
  32. public function index(){
  33. //查询提现金额
  34. $info = BankModel::where(['user_id' => $this->user->id])->find();
  35. if(empty($info)){
  36. return enjson(204,'未开通帐号');
  37. }else{
  38. $data['due_money'] = $info->due_money;
  39. $data['lack_money'] = $info->lack_money;
  40. $data['shop_money'] = $info->shop_money;
  41. return enjson(200,'成功',$data);
  42. }
  43. }
  44. /**
  45. * 个人收益记录
  46. * @param string $today 0是今天 1是历史
  47. * @return void
  48. */
  49. public function bill(int $today = 0){
  50. $list = [];
  51. $times = strtotime(date('Y-m-d 00:00:00'));
  52. $condition[] = ['user_id','=',$this->user->id];
  53. if($today){
  54. $condition[] = ['update_time','<=',$times];
  55. }else{
  56. $condition[] = ['update_time','>=',$times];
  57. }
  58. $info = BankBill::with(['formuser'=> function($query) {
  59. $query->field('id,face,nickname');
  60. }])->where($condition)->order('id desc')->paginate(10)->toArray();
  61. if(!empty($info['data'])){
  62. foreach ($info['data'] as $key => $value) {
  63. $list[$key] = $value;
  64. $list[$key]['update_time'] = date('Y-m-d H:i:s',$value['update_time']);
  65. $list[$key]['money'] = '¥'.$value['money'];
  66. $list[$key]['formuser'] = empty($value['formuser']) ? [] : $value['formuser'];
  67. }
  68. }
  69. return enjson(200,'成功',$list);
  70. }
  71. /**
  72. * 提现申请
  73. **/
  74. public function cash(){
  75. if (request()->isPost()) {
  76. $data = [
  77. 'money' => money(Request::param('money/d',0)),
  78. 'safepassword' => Request::param('safepassword/s'),
  79. 'user_id' => $this->user->id,
  80. 'member_miniapp_id' => $this->miniapp_id,
  81. ];
  82. $validate = $this->validate($data, 'Bank.getcash');
  83. if (true !== $validate) {
  84. return enjson(403,$validate);
  85. }
  86. //判断安全密码是否正确
  87. if(!password_verify(md5($data['safepassword']),$this->user->safe_password)) {
  88. return enjson(403,'安全密码不正确');
  89. }
  90. $config = Config::where(['member_miniapp_id' => $this->miniapp_id])->field('cycle,lack_cash')->find();
  91. if($data['money'] < $config->lack_cash){
  92. return enjson(403,'转出最少 '.money($config->lack_cash).' 元');
  93. }
  94. //判断提现周期
  95. $bankCash = BankCash::where(['user_id' => $this->user->id])->field('state,update_time')->order('id desc')->find();
  96. if(!empty($bankCash)){
  97. if($bankCash->state == 0){
  98. return json(['code'=>403,'msg'=>'上次申请还未到账,禁止连续提现']);
  99. }else{
  100. $cycle = intval($config->cycle); //计算天数
  101. $day = intval((time()-$bankCash->update_time)/(86400));
  102. if($day < $cycle){
  103. return json(['code'=>403,'msg'=>'距离上次申请必须间隔'.$cycle.'天']);
  104. }
  105. }
  106. }
  107. //积分减少
  108. $rel = BankModel::cash($this->miniapp_id,$this->user->id,$data['money']);
  109. if(!$rel){
  110. return json(['code'=>403,'msg'=>"剩余积分不够"]);
  111. }
  112. //增加申请记录
  113. BankCash::insert(['user_id'=> $data['user_id'],'money' => $data['money'],'member_miniapp_id' => $data['member_miniapp_id'],'update_time' => time(),'state' => 0,'realmoney' => 0]);
  114. return json(['code'=>200,'message'=>"申请已提交,请等待审核."]);
  115. }
  116. }
  117. /**
  118. * 帐号充值
  119. * @access public
  120. */
  121. public function recharge(){
  122. if(request()->isPost()){
  123. $data = [
  124. 'money' => Request::param('money/d',0),
  125. 'safepassword' => Request::param('safepassword/s'),
  126. 'user_id' => $this->user->id,
  127. 'member_miniapp_id' => $this->miniapp_id,
  128. ];
  129. if($data['money'] < 100){
  130. return enjson(403,'充值金额最小100元');
  131. }
  132. $validate = $this->validate($data, 'Bank.getcash');
  133. if (true !== $validate) {
  134. return enjson(403,$validate);
  135. }
  136. //判断安全密码是否正确
  137. if(!password_verify(md5($data['safepassword']),$this->user->safe_password)) {
  138. return enjson(403,'安全密码不正确');
  139. }
  140. $order_no = 'RE'.order_no();
  141. $rel = BankRecharge::insert(['state'=>0,'money' => $data['money'],'order_no' => $order_no,'update_time'=>time(),'user_id' => $this->user->id,'member_miniapp_id' => $this->miniapp_id]);
  142. if (empty($rel)) {
  143. return enjson(403,'创建充值信息失败');
  144. }
  145. $payparm = [
  146. 'openid' => $this->user->miniapp_uid,
  147. 'miniapp_id' => $this->miniapp_id,
  148. 'name' => '帐号充值',
  149. 'order_no' => $order_no,
  150. 'total_fee' => $data['money']*100,
  151. 'notify_url' => api(1,'popupshop/notify/recharge',$this->miniapp_id)
  152. ];
  153. $ispay = WechatPay::orderPay($payparm);;
  154. if($ispay['code'] == 0){
  155. return enjson(403,$ispay['msg']);
  156. }
  157. return enjson(200,'成功',$ispay['data']);
  158. }
  159. }
  160. /**
  161. * 把购物金转账给朋友
  162. * @return void
  163. */
  164. public function transfer(){
  165. if (request()->isPost()) {
  166. $data = [
  167. 'money' => Request::param('money/s',0),
  168. 'sms_code' => Request::param('code/s'),
  169. 'phone_id' => Request::param('phone/s'),
  170. 'safepassword' => Request::param('safepassword/s'),
  171. ];
  172. $validate = $this->validate($data, 'Bank.transfer');
  173. if (true !== $validate) {
  174. return enjson(403,$validate);
  175. }
  176. //判断安全密码是否正确
  177. if(!password_verify(md5($data['safepassword']),$this->user->safe_password)) {
  178. return enjson(403,'安全密码不正确');
  179. }
  180. //查找接收方用户存在不存在
  181. $info = SystemUser::where(['member_miniapp_id' => $this->miniapp_id,'phone_uid'=>$data['phone_id']])->field('id')->find();
  182. if($info->isEmpty()){
  183. return enjson(403,'未找到好友账户');
  184. }
  185. //积分减少
  186. $reldown = BankModel::transfer($this->miniapp_id,$this->user->id,$data['money'],false);
  187. if(!$reldown){
  188. return enjson(403,'剩余积分不够');
  189. }
  190. BankBill::add($this->miniapp_id,$this->user->id,-($data['money']*100),'转账给好友扣除积分'.money(-$data['money']));
  191. //积分增加
  192. $relup = BankModel::transfer($this->miniapp_id,$info->id,$data['money'],true);
  193. if(!$relup){
  194. return enjson(403,'未入账成功,请联系客服');
  195. }
  196. BankBill::add($this->miniapp_id,$info->id,$data['money']*100,'来自好友积分'.money($data['money']));
  197. return enjson(200,'好友转账成功');
  198. }
  199. }
  200. /**
  201. * 提交个人提现信息
  202. **/
  203. public function bindBankInfo(){
  204. if (request()->isPost()) {
  205. $data = [
  206. 'name' => Request::param('name/s'),
  207. 'bankname' => Request::param('bankname/s'),
  208. 'idcard' => Request::param('idcard/s'),
  209. 'bankid' => Request::param('bankid/s'),
  210. 'bankid_confirm' => Request::param('bankid_confirm/s'),
  211. 'safepassword' => Request::param('safepassword/s'),
  212. ];
  213. $validate = $this->validate($data, 'Bank.bankInfo');
  214. if (true !== $validate) {
  215. return enjson(403,$validate);
  216. }
  217. //判断安全密码是否正确
  218. if(!password_verify(md5($data['safepassword']),$this->user->safe_password)) {
  219. return enjson(403,'安全密码不正确');
  220. }
  221. //更新银行信息
  222. $rel = BankInfo::editer($this->miniapp_id,$this->user->id,$data);
  223. if($rel){
  224. return enjson(403,'银行信息绑定成功');
  225. }else{
  226. return enjson(403,'银行信息绑定失败');
  227. }
  228. }
  229. }
  230. /**
  231. * 获取银行信息
  232. */
  233. public function getBankInfo(){
  234. if(!$this->user->safe_password){
  235. return json(['code'=>302,'msg'=>'请先设置您的安全密码','url'=>'/pages/helper/safepasspord']);
  236. }
  237. //更新银行信息
  238. $rel = BankInfo::where(['member_miniapp_id'=>$this->miniapp_id,'user_id' => $this->user->id])->field('name,idcard,bankname,bankid')->find();
  239. if($rel){
  240. $data['name'] = $rel['name'];
  241. $data['idcard'] = $rel['idcard'];
  242. $data['bankname'] = $rel['bankname'];
  243. $data['bankid'] = $rel['bankid'];
  244. return enjson(200,'成功',$data);
  245. }else{
  246. return enjson(204,'失败');
  247. }
  248. }
  249. }