微信公众号配置JAVA

微信公众号配置
step1:填写服务器配置
开发者文档:公众平台后台管理页面 - 开发者中心页,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey,其中URL是开发者用来接收微信消息和事件的接口URL。Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。
注:
TOKEN为自定义TOKEN,用于与后台接口进行验证,后台配置token与公众平台配置token需要保持一致性,
URL为服务器接收token验证地址,java代码只需要在后台配置一个servlet就可以,即:URL配置为http://域名/服务名称/servletName 配好就可以了(这里似乎需要是服务器域名,域名跟ip是绑定的,公司内部做的话会有专门的人去弄域名,个人做的话需要一台有配置域名的服务器,腾讯云服务的服务器一年好像是55块的样子)微信公众平台提交时是一个get请求,用doGet()方法去接收就可以了。下面附有验证流程代码:
(个人暂时还没有感觉到这个玩意有啥用,听PHP的一个经理说是为了保证是自己后台接受的,而不是任意一个人都可以做验证向微信发消息,不是很懂,哈哈)
第二步:验证服务器地址的有效性
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带四个参数:
参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。
加密/校验流程:(导包自行导入…)
@SuppressWarnings(“serial”)
public class WechatServlet extends HttpServlet {
private static final Logger logger = Logger
.getLogger(WechatServlet.class);

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// 微信传递过来的四个参数
String signature = req.getParameter(“signature”);
String timestamp = req.getParameter(“timestamp”);
String nonce = req.getParameter(“nonce”);
String echostr = req.getParameter(“echostr”);
logger.info(“signature================”+signature
+” timestamp================”+timestamp
+” nonce================”+nonce
+” echostr================”+echostr);
PrintWriter out = resp.getWriter();
// 通过检验 signature 对请求进行校验,若校验成功则原样返回 echostr,表示接入成功,否则接入失败
if(SignUtil.checkSignature(signature, timestamp, nonce)){
logger.info(“===================signature校验成功===============”);
out.print(echostr);
logger.info(“===================返回echostr:”+echostr+”===============”);
}else{
out.print(“signature校验失败”);
}
out.close();
out = null;
}

public void doPost(HttpServletRequest request, HttpServletResponse response)  
        throws ServletException, IOException {   
}  

}

public class SignUtil {

private static String token = “jkkkkkkkk”;

public static boolean checkSignature(String signature, String timestamp, String nonce){  
    String[] arr = new String[]{token, timestamp, nonce};  
    // 将 token, timestamp, nonce 三个参数进行字典排序  
    Arrays.sort(arr);  
    StringBuilder content = new StringBuilder();  
    for(int i = 0; i < arr.length; i++){  
        content.append(arr[i]);  
    }  
    MessageDigest md = null;  
    String tmpStr = null;  
    try {  
        md = MessageDigest.getInstance("SHA-1");  
        // 将三个参数字符串拼接成一个字符串进行 shal 加密  
        byte[] digest = md.digest(content.toString().getBytes());  
        tmpStr = byteToStr(digest);  
    } catch (NoSuchAlgorithmException e) {  
        // TODO Auto-generated catch block  
        e.printStackTrace();  
    }  
    content = null;  
    // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信  
    return tmpStr != null ? tmpStr.equals(signature.toUpperCase()): false;  
}  


private static String byteToStr(byte[] digest) {  
    // TODO Auto-generated method stub  
    String strDigest = "";  
    for(int i = 0; i < digest.length; i++){  
        strDigest += byteToHexStr(digest[i]);  
    }  
    return strDigest;  
}  


private static String byteToHexStr(byte b) {  
    // TODO Auto-generated method stub  
    char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};  
    char[] tempArr = new char[2];  
    tempArr[0] = Digit[(b >>> 4) & 0X0F];  
    tempArr[1] = Digit[b & 0X0F];    
    String s = new String(tempArr);  
    return s;  
}  

}

step2:网页授权
两种授权方式看需求吧,我这里做的都是静默授权,只需要拿到openid就可以了,多余的信息对我所作的项目意义不大,即选取:Scope为snsapi_base形式:
在高级接口中配置:有网页授权的,去找找就能看到,网页授权域名:就是申请的域名(为域名名称,不带目录)
请求方法:
https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
appid即微信的appid,公众号唯一标识
REDIRECT_URI是域名下面需要授权重定向的页面地址,即如:http(s)://域名/index.html形式即可,会自动跳转到index.html页面,此时index.html已被授权,会传递code值,后续操作为code的使用(各种换,网上代码一大把)

step3:模板发送消息(已关注公众号,即:openid已知,只需要根据openid就可以主动发消息了)
按公众号开发文档配置就可以了,这一块儿还是挺简单的!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值