小程序交流群:528215729,加入和小伙伴们一起探讨开发疑难、运营idea吧

admin

admin

发表于 2018-04-14 16:30:47

摘要:java实现微信小程序第三方登录-保存用户至自己的服务器 (微信小程序开发 - 微信 小程序外包开发-微信小程序 开发教程-微信小程序开发者社区,尽在 www.mntuku.cn)

梳理一下最近自己编写的代码。微信小程序交给第三方管理,首先要编写接口获取授权码,component_access_token,还需要第三方的component_appid,如果这两步没有完成,就无法完成以下步骤。

在小程序中获取用户信息有两种方式。

其一,在小程序中可以使用wx.getUserInfo这个接口获取当前打开小程序用户的信息。但是,我们知道小程序就只是前端而已,它的大小最大也就几M而已,所以在小程序中就仅有一些处理前端展示的逻辑代码,大部分数据交互都是与我们的第三方服务器,它的所有数据都要来源于第三方的服务器,为什么要叫第三方,我的认为是第二方也就是微信的服务器,也就是小程序所在的微信的服务器。
所以要做小程序,我们就必须把客户的信息存储在我们自己的服务器上,这个时候也就引入正文。

其二,小程序与我们第三方服务器交互,也就是我们需要编写接口,实现小程序的登录,保存用户的信息,在我们的数据库中。
(1)微信小程序调用微信接口wx.login,这时候微信会通过这个接口在success方法中返回参数code,我们学要这个参数去微信服务器换取这个用户的唯一标识openid。
(2)然后在success中发起网络请求,将code发送到我们编写的接口中。
    wx.login({
          success: function (res) {
            if (res.code) {
              //发起网络请求
              wx.request({
             url:https://www.zhishidai.net/zsd/zsd/customerApi/login,

                data: {
                  code: res.code
                },
                success: function (a) {
                  console.log("获取用户openid")
                  console.log(a.data.obj.openid)
                  that.globalData.openid = a.data.obj.openid
                }
              })
            } else {
              console.log(获取用户登录态失败! + res.errMsg)
            }
          }
        });
(3)接口代码编写,根据传入得code,去微信服务器换取openid
@RequiresUser(required = false)
    @RequestMapping("/login")
    @ResponseBody
    public Result getCode(HttpServletRequest request, HttpSession session){
        //获取用户登录传过来的code
        String code=request.getParameter("code");
        System.out.println("code:"+code);
        PreCode pre= preCodeManager.findCode();//获取第三方接口调用凭据
        System.out.println("第三方接口调用凭据实体:"+pre);
        String grant_type="authorization_code";//固定值
        //使用登录凭证 code 获取 session_key 和 openid。 
        Map<String,String> map=new HashMap<String,String>();
        map.put("appid", appid);//小程序的appid
        map.put("component_appid",WeChatContants.AppId);//第三方appid
        map.put("js_code",code);//传入得用户code
        map.put("grant_type",grant_type);
                    map.put("component_access_token",pre.getComponentAccessToken());
        System.out.println("获取openid的url参数map为:"+map);
        String result="";
        try {
            result= HttpUtils.sendGet(WeChatContants.URL_WEIXIN_LOGIN_CODE,map);
            System.out.println("获取openid结果为:"+result);
        } catch (Exception e) {
            e.printStackTrace();
        }
        //解析返回的json数据,获得OPPID
        Map<String,String> mps= JsonParse.getJsonStr(result);
        String openid=mps.get("openid");
        String session_key=mps.get("session_key");
        Result returnResult = null;
        if(openid!=null){
            /*在此处添加自己的逻辑代码,将openid保存在数据库,或是,使用session_key去微信服务器换取用户头像、昵称等信息。我在这里并没有用到,因此我只保存了用户的openid*/

        }
        return returnResult;
    }
微信小程序开发,弄清楚微信这个接口那些参数必须要有,并且各式正确,就能很快掌握。无非就是正确传参数、调用接口、网络访问。
397阅读 | 1评论
你的回应
  • Ellchieby

    2018-05-31 12:47:20 Ellchieby

    Prix Du Viagra Pharmacie France En Caen Uricon With Out Precritpion For Dogs Antibiotics Online Overnight generic cialis overnight delivery Cialis 5 Prix Acheter Kamagra Thailande 10 Discount On Future Amoxil Orders