spring boot 利用微信小程序登錄接口完成登錄


0.java web端

public class UserController {
    @Autowired UserService userService;
    @Autowired ObjectMapper objectMapper;
    private  String wxspAppid = "your_Appid";
    //小程序的 app secret (在微信小程序管理后台獲取)
    private  String wxspSecret = "your_Secret ";
    private String openid;
    private Logger logger = LoggerFactory.getLogger(UserService.class);
    @PostMapping ("/signinUser")
    public User signinUser(@RequestParam String code) throws IOException
    {
        RestTemplate restTemplate = new RestTemplate();// 發送request請求
        String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" +code;//參數
        String url = "https://api.weixin.qq.com/sns/jscode2session?"+params;// 微信接口 用於查詢oponid
        String response = restTemplate.getForObject(url,String.class);
        logger.info("response:"+response);
        WeixinRespense weixinRespense = objectMapper.readValue(response,WeixinRespense.class); // 逆序列化 ,將字符串中的有效信息取出
        String session_key = weixinRespense.getSession_key();//如果解密encryptData獲取unionId,會用的到
        openid= weixinRespense.getOpenid();//微信小程序 用戶唯一標識
        logger.info("session_key:"+session_key);
        logger.info("openid:"+openid);

        // 注冊用戶,將查詢到的oponid作為id
        User user = new User();
        user.setUid(openid);
        user.setBalence(Float.valueOf(0));
        if (userService.existbyid(openid))
        {
            return userService.getUserById(openid);
        }
        else {
            if (userService.signupUser(user) == 1)
            {
                return userService.getUserById(openid);
            }
            else {
                return null;
            }
        }
}

1.微信小程序端

  • wxml

   
 <view class="userinfo">
    <button wx:if="{{!hasUserInfo && canIUse}}" open-type="getUserInfo" bindgetuserinfo="getUserInfo">授權 </button>
  </view>
  • js
const app = getApp()
function getCom()
{
  var url = 'http://39.105.78.64:8081/micromarket/getCommodityList'
  var com = {}
  wx.request({
    url: url,
    data: { page: 0 },
    method: 'GET',
    dataType: 'json',
    success: function (res) {
      com = res;
    },
    fail: function (err) {
      console.log(err)
    }

  })
   page = page + 1
   return com

}
Page({
  data: {
    motto: 'Hello World',
    userInfo: {},
    hasUserInfo: false,
    canIUse: wx.canIUse('button.open-type.getUserInfo'),
    commodities:{}
  },
  //事件處理函數
  bindViewTap: function () {
    wx.navigateTo({
      url: '../logs/logs'
    })
  },
  onLoad: function () {
    var that = this
    if (app.globalData.userInfo) {
      this.setData({
        userInfo: app.globalData.userInfo,
        hasUserInfo: true
      })
    } else if (this.data.canIUse) {
      // 由於 getUserInfo 是網絡請求,可能會在 Page.onLoad 之后才返回
      // 所以此處加入 callback 以防止這種情況
      app.userInfoReadyCallback = res => {
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    } else {
      // 在沒有 open-type=getUserInfo 版本的兼容處理
      wx.getUserInfo({
        success: res => {
          app.globalData.userInfo = res.userInfo
          this.setData({
            userInfo: res.userInfo,
            hasUserInfo: true
          })
        }
      })
    }
    wx.login({
      success: function (r) {
        console.log("code:" + r.code + "\n end")
        if (r.code) {
          app.globalData.code = r.code;//登錄憑證  
          var url = 'http://39.105.78.64:8081/micromarket/signinUser'
          //發起網絡請求  
          wx.request({
            url: url,
            method: "POST",
            header: {
              "Content-Type": "application/x-www-form-urlencoded"
            },
            data: { code: app.globalData.code },
            dataType: 'json',
            success: function (result) {
              app.globalData.user = result.data
              console.log(app.globalData.user)
              console.log(app.globalData.user.balence)
            },
            fail: function () {
              console.log(" post error")
            }
          })
        }
      },
      fail: function () {
        console.log("error")
      }
    })
    commodities: getCom()
  },
  getUserInfo: function (info) {
    console.log(info)
    app.globalData.userInfo = info.detail.userInfo
    this.setData({
      userInfo: info.detail.userInfo,
      hasUserInfo: true
    })
  }
})


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM