success('获取成功',htmlspecialchars_decode(sysconf('agreement'))); } /** * @title 隐私政策 * @desc 隐私政策 * @author QGF * @url /api/Login/privacy_policy * @method GET * @tag 隐私政策 * @return name:-- type:string default:-- desc:隐私政策(富文本) */ public function privacy_policy(){ $this->success('获取成功',htmlspecialchars_decode(sysconf('privacy_policy'))); } /** * @title 注册 * @desc 注册 * @author QGF * @url /api/Login/register * @method POST * @tag 注册 * @param name:phone type:int require:1 default:-- desc:手机号 * @param name:code type:int require:1 default:-- desc:短信验证码 * @param name:pid type:int require:0 default:-- desc:邀请者ID(优惠券扫码注册) */ public function register(){ $phone = input('phone'); $code = input('code'); $pid = input('pid',0); if(empty($phone) || empty($code)){ $this ->error('参数错误'); } $sms_id = $this->verify_sms($phone,$code); if(empty($sms_id)){ $this->error('验证码不正确'); } $member_id = Db::name('store_member')->where('phone',$phone)->value('id'); if(!empty($member_id)){ $this->error('该手机号已被注册'); } $data = array( 'phone'=>$phone, 'name' => substr($phone,-4), 'headimg' => 'https://zjth2021.oss-cn-beijing.aliyuncs.com/0909a49add201291/a20687c6493d3eab.jpg', 'pid' => $pid ); Db::name('store_member')->insert($data); $member_id = Db::name('store_member')->where('phone',$phone)->value('id'); //发放优惠券 $this->send_coupon($member_id); Db::name('store_member_sms')->where('id',$sms_id)->update(array('used'=>1)); $token = self::create_jwt($member_id); $this->success('注册成功',$token); } /** * @title 微信登录/授权 * @desc 微信登录 * @author QGF * @url /api/Login/we_chat_app * @method POST * @tag 登录 授权 * @param name:code type:int require:1 default:-- desc:code值 * @return name:-- type:json default:-- desc:微信注册返回授权后的信息(openid:微信openid,name:微信昵称,headimgurl:微信头像地址,token:token值(这时为空)注:仅微信注册有) * @return name:token type:string default:-- desc:用户微信登录成功后的token值(仅用户登录有) */ public function we_chat_app(){ $code = input('code'); if(empty($code)){ $this->error('参数错误'); } $res = requestGet('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.config('app_program')['app_id'].'&secret='.config('app_program')['secret'].'&code='.$code.'&grant_type=authorization_code'); $res = json_decode($res,true); $user_info = requestGet('https://api.weixin.qq.com/sns/userinfo?access_token='.$res['access_token'].'&openid='.$res['openid']); $user_info = json_decode($user_info,true); $data['openid'] = $user_info['openid']; $data['name'] = $user_info['nickname']; $data['headimg'] = $user_info['headimgurl']; $data['token'] = ''; $member_id = Db::name('store_member')->where('openid',$data['openid'])->value('id'); if(empty($member_id)){ $this->success('授权成功',$data); }else{ $token = self::create_jwt($member_id); $data['token'] = $token; $this->success('登录成功',$data); } } /** * @title 验证码登录 * @desc 验证码登录 * @author QGF * @url /api/Login/code_login * @method POST * @tag 验证码登录 * @param name:phone type:int require:1 default:-- desc:手机号 * @param name:code type:string require:1 default:-- desc:短信验证码 * @return name:token type:string default:-- desc:用户登录成功后的token值 */ public function code_login(){ $phone = input('phone'); $code = input('code'); if(empty($phone) || empty($code)){ $this ->error('参数错误'); } $sms_id = $this->verify_sms($phone,$code); if(empty($sms_id)){ $this->error('验证码不正确'); } $member_id = Db::name('store_member')->where('phone',$phone)->value('id'); if(empty($member_id)){ $this->error('该手机号未注册'); } $token = self::create_jwt($member_id); $this->success('登录成功',$token); } /** * @title 绑定手机号(点击微信登录时还没注册,绑定完手机号提交信息去注册) * @desc 绑定手机号 * @author QGF * @url /api/Login/binding_phone * @method POST * @tag 绑定手机号 * @param name:phone type:int require:1 default:-- desc:要绑定的手机号 * @param name:code type:int require:1 default:-- desc:短信验证码 * @param name:openid type:string require:1 default:-- desc:微信授权返回的openid * @param name:name type:string require:1 default:-- desc:微信授权返回的用户昵称 * @param name:headimg type:string require:1 default:-- desc:微信授权返回的用户头像地址 * @return name:token type:string default:-- desc:绑定成功后的token值 */ public function binding_phone(){ $phone = input('phone'); $code = input('code'); $openid = input('openid'); $name = input('name'); $headimg = input('headimg'); if(empty($phone) || empty($code) || empty($openid) || empty($name) || empty($headimg)){ $this ->error('参数错误'); } $sms_id = $this->verify_sms($phone,$code); if(empty($sms_id)){ $this->error('验证码不正确'); } $member_id = Db::name('store_member')->where('phone',$phone)->value('id'); if(!$member_id){ $data = array( 'phone'=>$phone, 'name' => $name, 'headimg' => $headimg, 'openid' => $openid ); Db::name('store_member')->insert($data); $member_id = Db::name('store_member')->where('phone',$phone)->value('id'); //发放优惠券 $this->send_coupon($member_id); }else{ Db::name('store_member')->where('id',$member_id)->update(array('openid'=>$openid)); } Db::name('store_member_sms')->where('id',$sms_id)->update(array('used'=>1)); $token = self::create_jwt($member_id); $this->success('绑定成功',$token); } //注册成功送优惠券 public function send_coupon($uid){ if(empty($uid)){ return false; } $coupon_list = Db::name('store_coupon_config')->where('status',1)->where('is_deleted',0)->where('type',2)->select(); if(empty($coupon_list)){ return false; } foreach ($coupon_list as $value){ $data = array( 'config_id' => $value['id'], 'user_id' => $uid, 'title' => $value['title'], 'low_amount' => $value['low_amount'], 'amount' => $value['amount'], 'is_new' => 1, 'start' => date('Y-m-d'), 'end' => date('Y-m-d', strtotime('+'.$value['low_day'].' days') ) ); Db::table('store_coupon_list')->insert($data); } return true; } /** * @title 发送短信验证码 * @desc 发送短信验证码 * @author QGF * @url /api/Login/send_sms * @method POST * @tag 短信验证码 * @param name:phone type:int require:1 default:-- desc:要获取验证码的手机号 * @return name:code type:string default:-- desc:验证码 */ public function send_sms(){ $phone = input('phone'); if(empty($phone)){ $this ->error('参数错误'); } $code = rand(0,9).rand(0,9).rand(0,9).rand(0,9); AlibabaCloud::accessKeyClient('LTAI5tSMNtYuD3TdEkM65fyp', 'lcmARfziFDS4PUJ0K7AKTf3Ytl3Z8O')->regionId('cn-hangzhou')->asDefaultClient(); try { $result = AlibabaCloud::rpc() ->product('Dysmsapi') ->version('2017-05-25') ->action('SendSms') ->method('POST') ->host('dysmsapi.aliyuncs.com') ->options([ 'query' => [ 'RegionId' => "cn-hangzhou", 'PhoneNumbers' => $phone, 'SignName' => "唐山光速信息技术有限公司", 'TemplateCode' => "SMS_223005098", 'TemplateParam' => json_encode(array("code"=>$code)), ], ])->request(); $result = $result->toArray(); $sms_data = array( 'phone'=>$phone, 'code'=>$code, 'result'=>$result['Message'] ); Db::name('store_member_sms')->insert($sms_data); } catch (ClientException $e) { echo $e->getErrorMessage() . PHP_EOL; } catch (ServerException $e) { echo $e->getErrorMessage() . PHP_EOL; } $this->success('发送成功',$code); } //校验短信验证码 public function verify_sms($phone = '',$code = ''){ $store_member_sms = Db::name('store_member_sms')->field('id,code')->where('phone',$phone)->where('used',0)->order('id desc')->find(); if($store_member_sms['code'] == $code){ return $store_member_sms['id']; }else{ return 0; } } //token加密 public function create_jwt($uid) { $key = md5(config('app.jwt')); //jwt的签发密钥,验证token的时候需要用到 $time = time(); //签发时间 $expire = $time + config('app.jwt_time'); //过期时间 $token = array( "uid" => $uid, "iss" => "https://zain.com",//签发组织 "aud" => "https://zain.com", //签发作者 "iat" => $time, "nbf" => $time, "exp" => $expire ); $jwt = JWT::encode($token, $key); return $jwt; } public function get_token(){ $goods_price = Db::name('store_goods_list')->where('goods_id',1)->where('goods_spec','like','%加急处理(5分钟急速响应)%')->where('goods_spec','like','%iphone11%')->value('price_market'); var_dump($goods_price);exit(); } }