微信小程序调用微信登陆获取openid及java做为服务端示例

  

<强>一,微信小程序
  第一步:调用wx。登录获取代码文档地址
  第二步:判断用户是否授权读取用户信息文档地址
  第三步:调用wx。getUserInfo读取用户数据文档地址
  第四步:由于小程序后台授权域名无法授权微信的域名,所以我们只能通过我们自己的服务器去调用微信服务器去获取用户信息,故我们将wx。登录获取代码和天气。getUserInfo获取的encryptedData与四世通过wx。请求请求传入后台

  

微信小程序调用微信登陆获取openid及java做为服务端示例

  

服务器返回的数据:

  

微信小程序调用微信登陆获取openid及java做为服务端示例

  

小程序代码:

     //调用登录接口,获取代码   wx.login ({   成功:函数(res) {   wx.getSetting ({   成功(setRes) {//判断是否已授权   如果(! setRes.authSetting [' scope.userInfo ']) {//授权访问   wx.authorize ({   范围:“scope.userInfo”,   成功(){//获取用户信息   wx.getUserInfo ({   朗:“zh_CN”,   成功:函数(userRes) {//发起网络请求   wx.request ({   url: config.loginWXUrl,   数据:{   代码:res.code,   encryptedData: userRes.encryptedData,   四:userRes.iv   },   标题:{   “内容类型”:“应用程序/x-www-form-urlencoded”   },   方法:“文章”,//服务端的回掉   成功:函数(结果){   var=https://www.yisu.com/zixun/result.data.result数据;   数据。expireTime=nowDate + expireTime;   wx。setStorageSync(“用户信息”数据);   用户信息=数据;   }   })   }   })   }   })   其他}{//获取用户信息   wx.getUserInfo ({   朗:“zh_CN”,   成功:函数(userRes) {//发起网络请求   wx.request ({   url: config.loginWXUrl,   数据:{   代码:res.code,   encryptedData: userRes.encryptedData,   四:userRes.iv   },   标题:{   “内容类型”:“应用程序/x-www-form-urlencoded”   },   方法:“文章”,   成功:函数(结果){   var=https://www.yisu.com/zixun/result.data.result数据;   数据。expireTime=nowDate + expireTime;   wx。setStorageSync(“用户信息”数据);   用户信息=数据;   }   })   }   })   }   }   })   }   })      之前      

<强>二、java服务端
  

  

根据代码获取openid与解码用户信息代码
  

  

所需要的jar包
  

        & lt; dependency>   & lt; groupId> org.codehaus.xfire   & lt; artifactId> xfire-core   & lt; version> 1.2.6   & lt;/dependency>   & lt; dependency>   & lt; groupId> org.bouncycastle   & lt; artifactId> bcprov-jdk16   & lt; version> 1.46 & lt;/version>   & lt;/dependency>之前         /* *   *微信小程序信息获取   *   * @author zhy   */公开课WXAppletUserInfo {   私有静态日志记录器=Logger.getLogger (WXAppletUserInfo.class);/* *   *获取微信小程序session_key和openid   *   * @author zhy   * @param代码调用微信登陆返回的代码   * @return   */公共静态JSONObject getSessionKeyOropenid(字符串代码){//微信端登录代码值   字符串wxCode=代码;   ResourceBundle资源=ResourceBundle.getBundle (“weixin”);//读取属性文件   字符串requestUrl=resource.getString (“url”);//请求地址https://api.weixin.qq.com/sns/jscode2session   String> Map<字符串;requestUrlParam=new HashMap<字符串,String> ();   requestUrlParam。put (“appid resource.getString (appid "));//开发者设置中的appId   requestUrlParam。把(“秘密”,resource.getString (appSecret "));//开发者设置中的appSecret   requestUrlParam。把(“js_code”, wxCode);//小程序调用wx.login返回的代码   requestUrlParam。put (" grant_type”、“authorization_code”);//默认参数//发送帖子请求读取调用微信https://api.weixin.qq.com/sns/jscode2session接口获取openid用户唯一标识   JSONObject JSONObject=JSON.parseObject (UrlUtil。sendPost (requestUrl requestUrlParam));   返回jsonObject;   }/* *   *解密用户敏感数据获取用户信息   *   * @author zhy   * @param sessionKey数据进行加密签名的密钥   * @param encryptedData包括敏感数据在内的完整用户信息的加密数据   * @param iv加密算法的初始向量   * @return   */公共静态JSONObject getUserInfo (sessionKey字符串encryptedData,字符串,字符串(四){//被加密的数据   byte [] dataByte=Base64.decode (encryptedData);//加密秘钥   byte [] keyByte=Base64.decode (sessionKey);//偏移量   byte [] ivByte=Base64.decode (iv);   尝试{//如果密钥不足16位,那么就补足。这个如果中的内容很重要   int基地=16;   如果(keyByte。长度%基地!=0){=keyByte int组。/基地+ (keyByte长度。长度%基地!=0 & # 63;1: 0);   byte [] temp=新字节(组*基地);   数组。填充(临时(字节)0);   系统。arraycopy (keyByte 0临时0 keyByte.length);   keyByte=temp;   }//初始化   安全。addProvider(新BouncyCastleProvider ());   密码密码=. getinstance (“AES/CBC/PKCS7Padding”、“公元前”);   SecretKeySpec规范=new SecretKeySpec (keyByte AES);   AlgorithmParameters参数=AlgorithmParameters.getInstance (AES);   参数。init(新IvParameterSpec (ivByte));   cipher.init(密码。DECRYPT_MODE、规格、参数);//初始化   byte [] resultByte=cipher.doFinal (dataByte);   如果(null !=resultByte,,resultByte。长度比;0){   字符串的结果=新的字符串(resultByte“utf - 8”);   返回JSON.parseObject(结果);   }   }捕捉(NoSuchAlgorithmException e) {   log.error (e.getMessage (), e);   }捕捉(NoSuchPaddingException e) {   log.error (e.getMessage (), e);   }捕捉(InvalidParameterSpecException e) {   log.error (e.getMessage (), e);   }捕捉(IllegalBlockSizeException e) {   log.error (e.getMessage (), e);   }捕捉(BadPaddingException e) {   log.error (e.getMessage (), e);   }捕捉(UnsupportedEncodingException e) {   log.error (e.getMessage (), e);   }捕捉(InvalidKeyException e) {   log.error (e.getMessage (), e);   }捕捉(InvalidAlgorithmParameterException e) {   log.error (e.getMessage (), e);   }捕捉(NoSuchProviderException e) {   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

微信小程序调用微信登陆获取openid及java做为服务端示例