springboot微信支付实战------第5章

    1、手机号或者邮箱注册
                    优点:
                        1)企业获取了用户的基本资料信息,利于后续业务发展
                            推送营销类信息
                        2)用户可以用个手机号或者邮箱获取对应的app福利
                            注册送优惠券
                        3)反馈信息的时候方便,直接报手机号即可
                            账户出问题,被盗等

                缺点:
                    1)步骤多           
                    2)如果站点不安全,如站点被攻击,泄漏了个人信息,如手机号,密码等
                    3)少量不良企业贩卖个人信息,如手机号

        2、OAuth2.0一键授权登录
            例子:
                豆瓣:www.douban.com
                小D课堂:www.xdclass.net

            优点:
                使用快捷,用户体验好,数据相对安全
            缺点:
                1、反馈问题麻烦,比较难知道唯一标识
                2、如果是企业下面有多个应用,其中有应用不支持Auth2.0登录,则没法做到用户信息打通,积分不能复用等
                    如app接入了微信授权登录,但是网站没有,则打不通,
                    或者授权方只提供了一种终端授权,则信息无法打通,

        3、选择方式:
            1)看企业和实际业务情况
            2)务必区分,普通密码和核心密码

-----------------01-----------------------------

 1、微信开放平台介绍(申请里面的网站应用需要企业资料)
                    网站:https://open.weixin.qq.com/
 2、什么是appid、appsecret、授权码code
            appid和appsecret是 资源所有者向申请人分配的一个id和秘钥
            code是授权凭证,A->B 发起授权,想获取授权用户信息,那a必须携带授权码,才可以向B获取授权信息
            (你要从我这里拿东西出去,就必须带身份证)

关于回调:

-------------------02-----前期准备----------

参考:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=&lang=zh_CN
        1、区分角色 用户(我),第三应用(小D课堂),微信开放平台(微信开放平台)
            画图讲解
        2、如果想看时序图知识,请跳转到微信支付章节,时序图知识讲解

流程:

1.请求后台

2.后台请求微信返回二维码

3.扫码请求微信

4.用户同意则通知小D课堂的后台带code

5.小D课堂的后台带CODE获取token再请求微信

appid是什么和appsecret是什么:

回调地址:域名+我们的额程序的接口。

---------------------03---交互流程-------------------

25:28:回调地址。

--------------------------------04-----url获取---------

接下来:我们根据微信回调我们重定向的接口,根据带的code信息获得assess_token。

没咋听这个以后复习。

-------------------------------05--------HttpClient-------------------

1、为什么要用这个,微信扫码需要配置回调,需要配置对应的域名
           在本地电脑开发,微信没法回调,所以需要配置个地址映射,就是微信服务器
           可以通过这个地址访问当前开发电脑的地址
2、使用文档:
            https://mp.weixin.qq.com/s/oakwABv56Jc6u450AHt9iA

没咋听这个以后复习。

映射的话修改这个域名。

--------------------------------06----------------------------------------------

code是票据

state是一个界面当前用户访问的页面

关键点:看微信文档,字段尽量用拷贝
        1、通过code获取access_token
        文档:
            https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=7e1296c8174816ac988643825ae16f25d8c7e781&lang=zh_CN
        2、通过access_token获取微信用户头像和昵称等基本信息
        文档:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316518&token=7e1296c8174816ac988643825ae16f25d8c7e781&lang=zh_CN

------------------------------------07------------------------------------------

  问题:
            微信回调 用户昵称乱码
            解决:
                nickname = new String(nickname.getBytes("ISO-8859-1"), "UTF-8");
        1、封装User对象
        2、插入数据库
            获取openid后,查询是否有此用户,如果有则不发请求去获取用户信息
            方法:保存用户,根据id查询用户,根据openid查询用户
        3、mybatis参数注意
            取值用 #{} ,别用${},因为存在sql注入风险

主要讲的是查到用户了进行保存的。

----------------------------------------------08---------------------------------

1、获取当前页面访问地址
2、根据User基本信息生成token
​3、重定向到指定页面

-----------------------------------------09---------------------JWT回写-----------------

1、实现接口 LoginInterceptor implements HandlerInterceptor
        2、重写preHandler
             String accessToken = request.getHeader("token");
            if(accessToken == null){
                accessToken = request.getParameter("token");
            }
            if (accessToken != null ) {
                Claims claims = JWTUtils.checkJWT(accessToken);
                Integer id = (Integer)claims.get("id");
                String  name = (String)claims.get("name");
                request.setAttribute("user_id",id);
                request.setAttribute("name",name);
                //普通用户
                return true;
            }
            return false;
        3、配置拦截器 
        @Configuration
        InterceptorConfig implements WebMvcConfigurer
         @Override
        public void addInterceptors(InterceptorRegistry registry) {

            registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/user/api/v1/*/**");

            WebMvcConfigurer.super.addInterceptors(registry);
        }

        4、响应前端数据
        
        public static void sendJsonMessage(HttpServletResponse response, Object obj) throws Exception {
            Gson g = new Gson();
            response.setContentType("application/json; charset=utf-8");
            PrintWriter writer = response.getWriter();
            writer.print(g.toJson(obj));
            writer.close();
            response.flushBuffer();
        }

-------课堂笔记

 

-----------------------------------------10---------------------后端拦截器------------------------------

----------------------------------------11-------------------------------------------------------

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值