Bank.php 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  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\allwin\controller\api\v4;
  9. use app\allwin\controller\api\Base;
  10. use app\common\facade\WechatPay;
  11. use app\common\facade\Inform;
  12. use app\common\event\User;
  13. use app\common\model\SystemMemberSms;
  14. use app\common\model\SystemUserBank;
  15. use app\allwin\model\Bank as AppBank;
  16. use app\allwin\model\BankBill;
  17. use app\allwin\model\BankRecharge;
  18. use app\allwin\model\BankCash;
  19. use app\allwin\model\AllwinConfig;
  20. use app\allwin\model\MchId;
  21. use think\helper\Time;
  22. class Bank extends Base{
  23. /**
  24. * 初始化当前应用管理员是不是联盟城市账户
  25. * @return void
  26. */
  27. public function initialize() {
  28. parent::initialize();
  29. $this->isUserAuth();
  30. }
  31. /**
  32. * 帐号余额
  33. */
  34. public function index(){
  35. $param['signkey'] = $this->request->param('signkey');
  36. $param['sign'] = $this->request->param('sign');
  37. $rel = $this->apiSign($param);
  38. if($rel['code'] != 200){
  39. return enjson(500,'签名验证失败');
  40. }
  41. if(!$this->user->phone_uid){
  42. return json(['code'=>302,'msg'=>'请先绑定手机号','url'=>'/pages/helper/bindphone']);
  43. }
  44. //判断是否关联的公众号账户和输入提现信息
  45. $setting = AllwinConfig::getConfig($this->miniapp_id);
  46. if($setting->is_wechat_touser == 1){
  47. if(empty($this->user->official_uid)){
  48. return json(['code'=>302,'msg'=>'我的钱包,需先绑定公众号帐号','url'=>'/pages/helper/startup']);
  49. }
  50. }else{
  51. $bankInfo = SystemUserBank::where(['user_id' => $this->user->id])->find();
  52. if(empty($bankInfo)){
  53. return json(['code'=>302,'msg'=>'请先完善您的实名信息','url'=>'/pages/helper/bindbank']);
  54. }
  55. }
  56. //查询提现金额
  57. $info = AppBank::where(['user_id' => $this->user->id])->find();
  58. if(empty($info)){
  59. return json(['code'=>204,'msg'=>'empty']);
  60. }else{
  61. $data['money'] = money($info->money/100); //帐号余额
  62. $data['income_money'] = money($info->income_money/100); //获得收益
  63. $data['lack_money'] = money($info->lack_money/100); //锁定中
  64. $data['save_money'] = money($info->save_money/100); //共省钱
  65. $data['shop_money'] = intval($info->shop_money); //积分
  66. return json(['code'=>200,'msg'=>'success','data' => $data]);
  67. }
  68. }
  69. /**
  70. * 帐号余额
  71. */
  72. public function chickAccount(){
  73. $param['signkey'] = $this->request->param('signkey');
  74. $param['sign'] = $this->request->param('sign');
  75. $rel = $this->apiSign($param);
  76. if($rel['code'] != 200){
  77. return enjson(500,'签名验证失败');
  78. }
  79. //判断是否关联的公众号账户和输入提现信息
  80. $setting = AllwinConfig::getConfig($this->miniapp_id);
  81. if($setting->is_wechat_touser == 1){
  82. if(empty($this->user->official_uid)){
  83. return json(['code'=>302,'msg'=>'我的钱包,需先绑定公众号帐号','url'=>'/pages/helper/startup']);
  84. }
  85. }else{
  86. $bankInfo = SystemUserBank::where(['user_id' => $this->user->id])->find();
  87. if(empty($bankInfo)){
  88. return json(['code'=>302,'msg'=>'请先完善您的实名信息','url'=>'/pages/helper/bindbank']);
  89. }
  90. }
  91. if(!$this->user->phone_uid){
  92. return json(['code'=>302,'msg'=>'请先绑定手机号','url'=>'/pages/helper/bindphone']);
  93. }
  94. }
  95. /**
  96. * 账单
  97. */
  98. public function bill(){
  99. $param['today'] = $this->request->param('today/d',0);
  100. $param['page'] = $this->request->param('page/d',1);
  101. $param['sign'] = $this->request->param('sign');
  102. $rel = $this->apiSign($param);
  103. if($rel['code'] != 200){
  104. return enjson(500,'签名验证失败');
  105. }
  106. $condition[] = ['user_id','=',$this->user->id];
  107. $times = Time::today();
  108. if($param['today']){
  109. $condition[] = ['update_time','<',$times[1]]; //历史
  110. }else{
  111. $condition[] = ['update_time','>',$times[0]]; //今天
  112. }
  113. $info = BankBill::with(['user' => function($query) {
  114. $query->field('id,face,nickname');
  115. }])->where($condition)->order('id desc')->paginate(10)->toArray();
  116. if(empty($info['data'])){
  117. return json(['code'=>204,'msg'=>'empty']);
  118. }else{
  119. $list = [];
  120. foreach ($info['data'] as $key => $value) {
  121. $list[$key] = $value;
  122. $list[$key]['update_time'] = date('Y-m-d H:i:s',$value['update_time']);
  123. $list[$key]['money'] = money($value['money']);
  124. $list[$key]['user'] = empty($value['user']) ? [] : $value['user'];
  125. }
  126. return json(['code'=>200,'msg'=>'success','data' => $list]);
  127. }
  128. }
  129. /**
  130. * 提现申请
  131. **/
  132. public function cash(){
  133. if (request()->isPost()) {
  134. $data = [
  135. 'money' => input('post.money/f', '', 'htmlspecialchars'),
  136. 'safepassword' => input('post.safepassword/s', '','htmlspecialchars'),
  137. 'user_id' => $this->user->id,
  138. 'member_miniapp_id' => $this->miniapp_id,
  139. ];
  140. $validate = $this->validate($data, 'Bank.getcash');
  141. if (true !== $validate) {
  142. return json(['code'=>403,'msg'=>$validate]);
  143. }
  144. if($data['money'] < 0){
  145. return json(['code'=>403,'msg'=>'申请不能小于 0 元']);
  146. }
  147. //判断安全密码是否正确
  148. if(!password_verify(md5($data['safepassword']),$this->user->safe_password)) {
  149. return json(['code'=>403,'msg'=>'安全密码不正确']);
  150. }
  151. //判断是否关联的公众号账户和输入提现信息
  152. $setting = model('AllwinConfig')->getConfig($this->miniapp_id);
  153. if($setting->is_wechat_touser == 1){
  154. if(empty($this->user->official_uid)){
  155. return json(['code'=>302,'msg'=>'余额转出,请先【授权登录】','url'=>'/pages/helper/startup']);
  156. }
  157. }else{
  158. $bankInfo = model('SystemUserBank')->where(['user_id' => $this->user->id])->find();
  159. if(empty($bankInfo)){
  160. return json(['code'=>302,'msg'=>'请先完善您的个人信息','url'=>'/pages/helper/bindbank']);
  161. }
  162. }
  163. //判断提现周期
  164. $bankCash = BankCash::where(['user_id' => $this->user->id])->field('state,update_time')->order('id desc')->find();
  165. if(!empty($bankCash)){
  166. if($bankCash->state == 0){
  167. return json(['code'=>403,'msg'=>'上次申请还未到账,禁止连续提现']);
  168. }
  169. }
  170. //减少
  171. $info =AppBank::cash($this->miniapp_id,$this->user->id,$data['money']);
  172. if(!$info){
  173. return json(['code'=>403,'msg'=>"金额不足"]);
  174. }
  175. //增加申请记录
  176. $cash['member_miniapp_id'] = $data['member_miniapp_id'];
  177. $cash['user_id'] = $data['user_id'];
  178. $cash['money'] = $data['money'];
  179. $cash['realmoney'] = 0;
  180. $cash['state'] = 0;
  181. $cash['update_time'] = time();
  182. $rel = BankCash::insert($cash);
  183. if($rel){
  184. BankBill::add(['miniapp_id'=>$this->miniapp_id,'store_id' => 0,'uid'=>$this->user->id,'pay_uid' => $this->user->id,'money'=>-$data['money']],'[待审]申请转出');
  185. //后台通知
  186. SystemMemberSms::sms($this->miniapp_id,'您有一条提现待审核',url('allwin/bank/cash'));
  187. //申请者微信通知
  188. Inform::sms($this->user->id,$this->miniapp_id,['title' =>'业务进展通知','type' => '提现申请','content' =>'您的提现申请正在审核中']);
  189. //后台管理员微信通知
  190. Inform::sms(User::isFounder($this->miniapp_id)->user_id,$this->miniapp_id,['title' =>'业务进展通知','type' => '提现申请','content' =>'您有一条新的提现申请待审核']);
  191. return enjson(200,"申请已提交,请等待审核.");
  192. }
  193. return enjson(403,"金额不足");
  194. }
  195. }
  196. /**
  197. * 帐号充值
  198. * @access public
  199. */
  200. public function recharge(){
  201. if(request()->isPost()){
  202. $data = [
  203. 'money' => input('post.money/d', '','htmlspecialchars'),
  204. 'safepassword' => input('post.safepassword/s','','htmlspecialchars'),
  205. 'user_id' => $this->user->id,
  206. 'member_miniapp_id' => $this->miniapp_id,
  207. ];
  208. if($data['money'] < 100){
  209. return json(['code'=>403,'msg'=>'充值金额最小100元']);
  210. }
  211. $validate = $this->validate($data, 'Bank.getcash');
  212. if (true !== $validate) {
  213. return json(['code'=>403,'msg'=>$validate]);
  214. }
  215. //判断安全密码是否正确
  216. if(!password_verify(md5($data['safepassword']),$this->user->safe_password)) {
  217. return json(['code'=>403,'msg'=>'安全密码不正确']);
  218. }
  219. $order_no = 'RE_'.$this->user->invite_code.order_no();
  220. $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]);
  221. if($rel){
  222. $payparm = [
  223. 'openid' => $this->user->miniapp_uid,
  224. 'miniapp_id' => $this->miniapp_id,
  225. 'name' => '会员积分充值',
  226. 'order_no' => $order_no,
  227. 'total_fee' => $data['money']*100,
  228. 'notify_url' => api(4,'allwin/banknotify/index',$this->miniapp_id),
  229. ];
  230. //读取配置
  231. $setting = AllwinConfig::getConfig($this->miniapp_id);
  232. if($setting->is_psp == 1){
  233. $default_mchid = MchId::getMch(0,$this->miniapp_id); //默认收款账户
  234. if (empty($default_mchid)) {
  235. return json(['code'=>403,'msg'=>'未找到默认商户号']);
  236. }
  237. $payparm['mchid'] = $default_mchid->mchid;
  238. }
  239. $ispay = WechatPay::orderPay($payparm);
  240. if($ispay['code'] == 0){
  241. return json(['code'=>403,'msg'=>$ispay['msg']]);
  242. }
  243. return enjson(200,"成功",$ispay['data']);
  244. }
  245. return enjson(403,"充值失败,请重试");
  246. }
  247. }
  248. }