大连现在不错的java培训机构一览表,现在大连市面上的java培训机构有很多,但在师资力量课程安排上会有所差异,因此如何选择适合自己的机构就成为了目前面临的难题。小编在这里为您推荐大连迪派电脑学校,开设电脑设计培训,建工培训,小语种培训等课程适用于集体教学与个别指导相结合等方式”,培训整体偏重于实战型.为不影响您的学习,来校区前请先电话或QQ咨询,方便我校安排相关课程的专业老师为您解答~~接下来迪派教育的小编为您分享,Java实现微信小程序获取union
2.解密数据获取UnionID
此方式针对于没有主体公众号或者做不到让用户都关注公众号的情况下获取UnionID.大致流程如下
·前端js调取公开接口wx.getUserInfo获取encryptedData和iv
·根据code2Session获取session_key和openid,如果有unionid直接返回
·根据session_key,encryptedData和iv进行AES解密
package com.jinke.rusi.utils;
import com.alibaba.fastjson.JSONObject;
import com.jinke.utils.HttpUtil;
import lombok.extern.slf4j.Slf4j;
import java.util.HashMap;
import java.util.Map;
/**
* author zsc
* date 2020/7/17
*/
Slf4j
public class AppletsWeChatUtil{
//登录凭证校验地址
public final static String GetPageAccessTokenUrl="https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=CODE&grant_type=authorization_code";
//小程序的appId以及appSecret
private static final String appId="xxxxxxxxxxxxx";
private static final String appSecret="xxxxxxxxxxxxxxx";
/**
*小程序授权
* param code WxCode
* param encryptedData加密数据
* param iv偏移量iv
* return
*/
public static Map<String,String>oauth2GetUnionId(String code,String encryptedData,String iv){
String requestUrl=GetPageAccessTokenUrl.replace("APPID",appId).replace("SECRET",appSecret).replace("CODE",code);
Map<String,String>result=new HashMap<>();
try{
String response=HttpUtil.get(requestUrl);
JSONObject jsonObject=JSONObject.parseObject(response);
String openid=String.valueOf(jsonObject.get("openid"));
//获取解密所需的session_key
String session_key=String.valueOf(jsonObject.get("session_key"));
//通过AES解密encryptedData获取union_id,工具类见下方
String encryptedResult=AESUtil.decrypt(encryptedData,session_key,iv,"UTF-8");
/**
*此处解密之后数据包格式为:
*openid string用户标识
*nickName string昵称
*gender string性别
*city string城市
*province string省份
*country string
*avatarUrl string头像
*unionId string用户在开放平台的标识符
*watermark JSON数据水印,包括appid,timestamp字段为了校验数据的有效性
*/
JSONObject parseObject=JSONObject.parseObject(encryptedResult);
//ps:此处一定要注意解密的出来的字段名为驼峰命名的unionId,openId,并非直接授权的unionid
String unionid=String.valueOf(parseObject.get("unionId"));
result.put("openid",openid);
result.put("unionid",unionid);
}catch(Exception e){
log.info("授权获取unionid出现异常");
e.printStackTrace();
}
return result;
}
}
工具类及依赖
AESUtil:
package com.jinke.rusi.utils;
import net.sf.json.JSONObject;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.*;
import java.security.spec.InvalidParameterSpecException;
/**
* author zsc
* date 2020/07/17
*AES-128-CBC加密方式
*AES-128-CBC可以自己定义“密钥”和“偏移量“。
*AES-128是jdk自动生成的“密钥”。
*/
public class AESUtil{
static{
Security.addProvider(new BouncyCastleProvider());
}
/**
尊重原创文章,转载请注明出处与链接:http://www.soxsok.com/wnews580218.html 违者必究! 以上就是关于“大连现在不错的java培训机构”的全部内容了,想了解更多相关知识请持续关注本站。