You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

493 lines
18 KiB

7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
  1. <?php
  2. namespace App\Http\Controllers\Weixin;
  3. use App\Http\Controllers\Weixin\CommonController;
  4. use Illuminate\Http\Request;
  5. use App\Common\ReturnCode;
  6. use App\Common\WechatAuth;
  7. class UserController extends CommonController
  8. {
  9. public function __construct()
  10. {
  11. parent::__construct();
  12. }
  13. //个人中心
  14. public function index(Request $request)
  15. {
  16. //$_SESSION['weixin_user_info']['access_token'] = '72d623d26a1a6d61186a97f9ccf752f7';
  17. //获取会员信息
  18. $postdata = array(
  19. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  20. );
  21. $url = env('APP_API_URL')."/user_info";
  22. $res = curl_request($url,$postdata,'GET');
  23. $data['user_info'] = $res['data'];
  24. return view('weixin.user.index', $data);
  25. }
  26. //个人中心设置
  27. public function userinfo(Request $request)
  28. {
  29. //获取会员信息
  30. $postdata = array(
  31. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  32. );
  33. $url = env('APP_API_URL')."/user_info";
  34. $res = curl_request($url,$postdata,'GET');
  35. $data['user_info'] = $res['data'];
  36. return view('weixin.user.userinfo', $data);
  37. }
  38. //资金管理
  39. public function userAccount(Request $request)
  40. {
  41. $postdata = array(
  42. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  43. );
  44. $url = env('APP_API_URL')."/user_info";
  45. $res = curl_request($url,$postdata,'GET');
  46. $data['user_info'] = $res['data'];
  47. return view('weixin.user.userAccount', $data);
  48. }
  49. //用户充值
  50. public function userRecharge(Request $request)
  51. {
  52. return view('weixin.user.userRecharge');
  53. }
  54. //充值明细
  55. public function userRechargeOrder(Request $request)
  56. {
  57. $pagesize = 10;
  58. $offset = 0;
  59. if(isset($_REQUEST['page'])){$offset = ($_REQUEST['page']-1)*$pagesize;}
  60. $postdata = array(
  61. 'limit' => $pagesize,
  62. 'offset' => $offset,
  63. 'status' => 1,
  64. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  65. );
  66. $url = env('APP_API_URL')."/user_recharge_list";
  67. $res = curl_request($url,$postdata,'GET');
  68. $data['list'] = $res['data']['list'];
  69. $data['totalpage'] = ceil($res['data']['count']/$pagesize);
  70. if(isset($_REQUEST['page_ajax']) && $_REQUEST['page_ajax']==1)
  71. {
  72. $html = '';
  73. if($res['data']['list'])
  74. {
  75. foreach($res['data']['list'] as $k => $v)
  76. {
  77. $html .= '<li>';
  78. $html .= '<span class="green">+ '.$v['money'].'</span>';
  79. $html .= '<div class="info"><p class="tit">充值</p>';
  80. $html .= '<p class="time">'.$v['created_at'].'</p></div>';
  81. $html .= '</li>';
  82. }
  83. }
  84. exit(json_encode($html));
  85. }
  86. return view('weixin.user.userRechargeOrder', $data);
  87. }
  88. //用户充值第二步,支付
  89. public function userRechargeOrderDetail(Request $request)
  90. {
  91. $id = $request->input('id','');
  92. if($id == ''){$this->error_jump(ReturnData::PARAMS_ERROR);}
  93. //获取充值记录详情
  94. $postdata = array(
  95. 'id' => $id,
  96. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  97. );
  98. $url = env('APP_API_URL')."/user_recharge_detail";
  99. $res = curl_request($url,$postdata,'GET');
  100. $data['post'] = $res['data'];
  101. //微信支付-start
  102. require_once(resource_path('org/wxpay/WxPayConfig.php')); // 导入微信配置类
  103. require_once(resource_path('org/wxpay/WxPayPubHelper.class.php')); // 导入微信支付类
  104. $body = '充值';//订单详情
  105. $out_trade_no = '20177878738';//订单号
  106. $total_fee = floatval(0.01*100);//价格0.01
  107. $attach = 'pay_type=1'; //pay_type=1充值支付
  108. $notify_url = route('weixin_wxpay_notify');//通知地址
  109. $wxconfig= \WxPayConfig::wxconfig();
  110. //=========步骤1:网页授权获取用户openid============
  111. $jsApi = new \JsApi_pub($wxconfig);
  112. $openid = $jsApi->getOpenid();
  113. //=========步骤2:使用统一支付接口,获取prepay_id============
  114. //使用统一支付接口
  115. $unifiedOrder = new \UnifiedOrder_pub($wxconfig);
  116. //设置统一支付接口参数
  117. //设置必填参数
  118. //appid已填,商户无需重复填写
  119. //mch_id已填,商户无需重复填写
  120. //noncestr已填,商户无需重复填写
  121. //spbill_create_ip已填,商户无需重复填写
  122. //sign已填,商户无需重复填写
  123. $unifiedOrder->setParameter("openid","$openid");//微信用户
  124. $unifiedOrder->setParameter("body","$body");//商品描述
  125. $unifiedOrder->setParameter("out_trade_no","$out_trade_no");//商户订单号
  126. $unifiedOrder->setParameter("total_fee","$total_fee");//总金额
  127. $unifiedOrder->setParameter("attach","$attach"); //附加数据,选填,在查询API和支付通知中原样返回,可作为自定义参数使用,示例:a=1&b=2
  128. $unifiedOrder->setParameter("notify_url","$notify_url");//通知地址
  129. $unifiedOrder->setParameter("trade_type","JSAPI");//交易类型
  130. $prepay_id = $unifiedOrder->getPrepayId();
  131. //=========步骤3:使用jsapi调起支付============
  132. $jsApi->setPrepayId($prepay_id);
  133. $jsApiParameters = $jsApi->getParameters();
  134. $data['jsApiParameters'] = $jsApiParameters;
  135. $data['returnUrl'] = route('weixin_user_recharge_order'); //支付完成要跳转的url
  136. return view('weixin.user.userRechargeOrderDetail', $data);
  137. }
  138. //余额明细
  139. public function userMoneyList(Request $request)
  140. {
  141. $pagesize = 10;
  142. $offset = 0;
  143. if(isset($_REQUEST['page'])){$offset = ($_REQUEST['page']-1)*$pagesize;}
  144. $postdata = array(
  145. 'limit' => $pagesize,
  146. 'offset' => $offset,
  147. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  148. );
  149. $url = env('APP_API_URL')."/user_money_list";
  150. $res = curl_request($url,$postdata,'GET');
  151. $data['list'] = $res['data']['list'];
  152. $data['totalpage'] = ceil($res['data']['count']/$pagesize);
  153. if(isset($_REQUEST['page_ajax']) && $_REQUEST['page_ajax']==1)
  154. {
  155. $html = '';
  156. if($res['data']['list'])
  157. {
  158. foreach($res['data']['list'] as $k => $v)
  159. {
  160. $html .= '<li>';
  161. if($v['type']==0)
  162. {
  163. $html .= '<span class="green">+ '.$v['money'].'</span>';
  164. }
  165. else
  166. {
  167. $html .= '<span>- '.$v['money'].'</span>';
  168. }
  169. $html .= '<div class="info"><p class="tit">'.$v['des'].'</p>';
  170. $html .= '<p class="time">'.date('Y-m-d H:i:s',$v['add_time']).'</p></div>';
  171. $html .= '</li>';
  172. }
  173. }
  174. exit(json_encode($html));
  175. }
  176. return view('weixin.user.userMoneyList', $data);
  177. }
  178. //积分明细
  179. public function userPointList(Request $request)
  180. {
  181. $pagesize = 10;
  182. $offset = 0;
  183. if(isset($_REQUEST['page'])){$offset = ($_REQUEST['page']-1)*$pagesize;}
  184. $postdata = array(
  185. 'limit' => $pagesize,
  186. 'offset' => $offset,
  187. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  188. );
  189. $url = env('APP_API_URL')."/user_point_list";
  190. $res = curl_request($url,$postdata,'GET');
  191. $data['list'] = $res['data']['list'];
  192. $data['totalpage'] = ceil($res['data']['count']/$pagesize);
  193. if(isset($_REQUEST['page_ajax']) && $_REQUEST['page_ajax']==1)
  194. {
  195. $html = '';
  196. if($res['data']['list'])
  197. {
  198. foreach($res['data']['list'] as $k => $v)
  199. {
  200. $html .= '<li>';
  201. if($v['type']==0)
  202. {
  203. $html .= '<span class="green">+ '.$v['point'].'</span>';
  204. }
  205. else
  206. {
  207. $html .= '<span>- '.$v['point'].'</span>';
  208. }
  209. $html .= '<div class="info"><p class="tit">'.$v['des'].'</p>';
  210. $html .= '<p class="time">'.date('Y-m-d H:i:s',$v['add_time']).'</p></div>';
  211. $html .= '</li>';
  212. }
  213. }
  214. exit(json_encode($html));
  215. }
  216. return view('weixin.user.userPointList', $data);
  217. }
  218. //用户优惠券列表
  219. public function userBonusList(Request $request)
  220. {
  221. //商品列表
  222. $pagesize = 1;
  223. $offset = 0;
  224. if(isset($_REQUEST['page'])){$offset = ($_REQUEST['page']-1)*$pagesize;}
  225. $postdata = array(
  226. 'limit' => $pagesize,
  227. 'offset' => $offset,
  228. 'status' => 0,
  229. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  230. );
  231. $url = env('APP_API_URL')."/user_bonus_list";
  232. $res = curl_request($url,$postdata,'GET');
  233. $data['list'] = $res['data']['list'];
  234. $data['totalpage'] = ceil($res['data']['count']/$pagesize);
  235. if(isset($_REQUEST['page_ajax']) && $_REQUEST['page_ajax']==1)
  236. {
  237. $html = '';
  238. if($res['data']['list'])
  239. {
  240. foreach($res['data']['list'] as $k => $v)
  241. {
  242. $html .= '<div class="flow-have-adr">';
  243. $html .= '<p class="f-h-adr-title">'.$v['bonus']['name'].'</label><span class="ect-colory fr"><small>¥</small>'.$v['bonus']['money'].'</span><div class="cl"></div></p>';
  244. $html .= '<p class="f-h-adr-con">有效期至'.$v['bonus']['end_time'].' <span class="fr">满'.$v['bonus']['min_amount'].'可用</span></p>';
  245. //$html .= '<div class="adr-edit-del">说明</div>';
  246. $html .= '</div>';
  247. }
  248. }
  249. exit(json_encode($html));
  250. }
  251. return view('weixin.user.userBonusList', $data);
  252. }
  253. //浏览记录
  254. public function userGoodsHistory(Request $request)
  255. {
  256. //商品列表
  257. $pagesize = 10;
  258. $offset = 0;
  259. if(isset($_REQUEST['page'])){$offset = ($_REQUEST['page']-1)*$pagesize;}
  260. $postdata = array(
  261. 'limit' => $pagesize,
  262. 'offset' => $offset,
  263. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  264. );
  265. $url = env('APP_API_URL')."/user_goods_history_list";
  266. $res = curl_request($url,$postdata,'GET');
  267. $data['user_goods_history'] = $res['data']['list'];
  268. $data['totalpage'] = ceil($res['data']['count']/$pagesize);
  269. if(isset($_REQUEST['page_ajax']) && $_REQUEST['page_ajax']==1)
  270. {
  271. $html = '';
  272. if($res['data']['list'])
  273. {
  274. foreach($res['data']['list'] as $k => $v)
  275. {
  276. $html .= '<li><a href="'.$v['goods']['goods_detail_url'].'"><span class="goods_thumb"><img alt="'.$v['goods']['title'].'" src="'.env('APP_URL').$v['goods']['litpic'].'"></span></a>';
  277. $html .= '<div class="goods_info"><p class="goods_tit">'.$v['goods']['title'].'</p>';
  278. $html .= '<p class="goods_price">¥<b>'.$v['goods']['price'].'</b></p>';
  279. $html .= '<p class="goods_des fr"><span id="del_history" onclick="delconfirm(\''.route('weixin_user_goods_history_delete',array('id'=>$v['id'])).'\')">删除</span></p>';
  280. $html .= '</div></li>';
  281. }
  282. }
  283. exit(json_encode($html));
  284. }
  285. return view('weixin.user.userGoodsHistory', $data);
  286. }
  287. //浏览记录删除
  288. public function userGoodsHistoryDelete(Request $request)
  289. {
  290. $id = $request->input('id','');
  291. if($id == ''){$this->error_jump(ReturnData::PARAMS_ERROR);}
  292. $postdata = array(
  293. 'id' => $id,
  294. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  295. );
  296. $url = env('APP_API_URL')."/user_goods_history_delete";
  297. $res = curl_request($url,$postdata,'POST');
  298. if($res['code'] != ReturnCode::SUCCESS_CODE){$this->error_jump(ReturnCode::FAIL);}
  299. $this->success_jump(ReturnCode::SUCCESS);
  300. }
  301. //浏览记录清空
  302. public function userGoodsHistoryClear(Request $request)
  303. {
  304. $postdata = array(
  305. 'access_token' => $_SESSION['weixin_user_info']['access_token']
  306. );
  307. $url = env('APP_API_URL')."/user_goods_history_clear";
  308. $res = curl_request($url,$postdata,'POST');
  309. if($res['code'] != ReturnCode::SUCCESS_CODE){$this->error_jump(ReturnCode::FAIL);}
  310. $this->success_jump(ReturnCode::SUCCESS);
  311. }
  312. //微信网页授权登录
  313. public function oauth(Request $request)
  314. {
  315. $wechat_auth = new WechatAuth(sysconfig('CMS_WX_APPID'),sysconfig('CMS_WX_APPSECRET'));
  316. // 获取code码,用于和微信服务器申请token。 注:依据OAuth2.0要求,此处授权登录需要用户端操作
  317. if(!isset($_GET['code']))
  318. {
  319. $http_type = ((isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] == 'on') || (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https')) ? 'https://' : 'http://';
  320. $callback_url = $http_type . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; //回调地址,当前页面
  321. //-------生成唯一随机串防CSRF攻击
  322. $state = md5(uniqid(rand(), true));
  323. $_SESSION['weixin_oauth']['state'] = $state; //存到SESSION
  324. $authorize_url = $wechat_auth->get_authorize_url($callback_url, $state);
  325. header("Location: $authorize_url");exit;
  326. }
  327. // 依据code码去获取openid和access_token,自己的后台服务器直接向微信服务器申请即可
  328. if (isset($_GET['code']))
  329. {
  330. $_SESSION['weixin_oauth']['code'] = $_GET['code'];
  331. if($_GET['state'] != $_SESSION['weixin_oauth']['state'])
  332. {
  333. exit("您访问的页面不存在或已被删除!");
  334. }
  335. //得到 access_token 与 openid
  336. $_SESSION['weixin_oauth']['token'] = $wechat_auth->get_access_token($_GET['code']);
  337. }
  338. // 依据申请到的access_token和openid,申请Userinfo信息。
  339. if (isset($_SESSION['weixin_oauth']['token']))
  340. {
  341. $_SESSION['weixin_oauth']['userinfo'] = $wechat_auth->get_user_info($_SESSION['weixin_oauth']['token']['access_token'], $_SESSION['weixin_oauth']['token']['openid']);
  342. }
  343. $postdata = array(
  344. 'openid' => $_SESSION['weixin_oauth']['token']['openid'],
  345. 'nickname' => $_SESSION['weixin_oauth']['userinfo']['nickname'],
  346. 'sex' => $_SESSION['weixin_oauth']['userinfo']['sex'],
  347. 'head_img' => $_SESSION['weixin_oauth']['userinfo']['headimgurl'],
  348. 'parent_id' => '',
  349. 'parent_mobile' => '',
  350. 'mobile' => ''
  351. );
  352. $url = env('APP_API_URL')."/wx_oauth_register";
  353. $res = curl_request($url,$postdata,'POST');
  354. if($res['code'] != ReturnCode::SUCCESS_CODE){$this->error_jump('系统错误');}
  355. $_SESSION['weixin_user_info'] = $res['data'];
  356. header('Location: '.route('weixin_user'));exit;
  357. }
  358. //登录
  359. public function login(Request $request)
  360. {
  361. if(isset($_SESSION['weixin_user_info']))
  362. {
  363. if(isset($_SERVER["HTTP_REFERER"])){header('Location: '.$_SERVER["HTTP_REFERER"]);exit;}
  364. header('Location: '.route('weixin_user'));exit;
  365. }
  366. $return_url = '';
  367. if(isset($_REQUEST['return_url']) && !empty($_REQUEST['return_url'])){$return_url = $_SESSION['weixin_history_back_url'] = $_REQUEST['return_url'];}
  368. if($_SERVER['REQUEST_METHOD'] == 'POST')
  369. {
  370. if($_POST['user_name'] == '')
  371. {
  372. $this->error_jump('账号不能为空');
  373. }
  374. if($_POST['password'] == '')
  375. {
  376. $this->error_jump('密码不能为空');
  377. }
  378. $postdata = array(
  379. 'user_name' => $_POST['user_name'],
  380. 'password' => md5($_POST['password'])
  381. );
  382. $url = env('APP_API_URL')."/wx_login";
  383. $res = curl_request($url,$postdata,'POST');
  384. if($res['code'] != ReturnCode::SUCCESS_CODE){$this->error_jump('登录失败');}
  385. $_SESSION['weixin_user_info'] = $res['data'];
  386. if($return_url != ''){header('Location: '.$return_url);exit;}
  387. header('Location: '.route('weixin_user'));exit;
  388. }
  389. return view('weixin.user.login');
  390. }
  391. //注册
  392. public function register(Request $request)
  393. {
  394. if(isset($_SESSION['weixin_user_info']))
  395. {
  396. if(isset($_SERVER["HTTP_REFERER"])){header('Location: '.$_SERVER["HTTP_REFERER"]);exit;}
  397. header('Location: '.route('weixin_user'));exit;
  398. }
  399. $return_url = '';
  400. if(isset($_REQUEST['return_url']) && !empty($_REQUEST['return_url'])){$_SESSION['weixin_history_back_url'] = $_REQUEST['return_url'];}
  401. if(isset($_REQUEST['parent_id']) && !empty($_REQUEST['parent_id'])){$_SESSION['weixin_user_parent_id'] = $_REQUEST['parent_id'];} //推荐人id存在session,首页入口也存了一次
  402. return view('weixin.user.register');
  403. }
  404. public function logout(Request $request)
  405. {
  406. session_unset();
  407. session_destroy(); // 退出登录,清除session
  408. $this->success_jump('退出成功',route('weixin'));
  409. }
  410. }