学习微信公众号开发(一)

开发校验程序必须能够处理HTTP GET请求

请求校验流程

获取GET请求中的4个参数 signature、timestamp、nonce和echostr;

将token、timestamp、nonce3个参数按照字典排序

将排序后的3个参数按顺序拼接成一个字符串,并对该字符串进行SHA1加密

将加密后的字符串与参数signature进行对比,如果相等则证明该请求是来自微信服务器的,需要原样返回参数echostr.

String signature = request.getParameter("signature");//获取signature

String token ="";//用户自定义

String timestamp = request.getParameter("timestamp");//获取timestamp

String echostr = request.getParameter("echostr");//获取echostr

String [] paramstr = new String[] {token,timestamp,nonce};

Arrays.sort(paramstr);

String content = paramstr[0].concat(paramstr[1]).concat(paramstr[2]);

MessageDigset md = MessageDigset.getInstance("SHA-1");

byte[] digset = md.digset(content.getBytes());

String ciphertext = byteToStr(digset);

PrintWriter out = response.getWriter();

if(cipertext.equals(signature.toUpperCase())){

    out.print(echostr);

}

out.close();


将byte数组转换成十六进制字符串

private static String byteToStr(byte[] byteArray){
    String strDigSet = "";
    for(int i=0;i<bytesArray.length;i++){
        strDigSet + byteToHexStr(byteArray[i]);
    }
    return strDigSet;
 }

private static String byteToHexStr(byte ib){
    char[] Digit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
    char[] ob = new Char[2];
    ob[0]=Digit[(ib>>>4)&0x0f];
    ob[1]=Digit(ib&0x0f);
    String s = new String(ob);
    return s;
}


微信信息交互过程:

 接收消息:普通微信用户向公众账号发送消息时,微信服务器将POST消息的XML数据包发送到开发者填写的URL上

发送消息: 对于每一个POST请求,开发者在响应包中返回特定的响应结构,并对该消息进行响应(支持回复文本,图片,图文,语音、视频、音乐)


信息交互模型:

用户发送消息到微信服务器,微信服务器收到消息,根据开发者在接口配置中填写URL,将消息通过HTTP POST 方式传递到公众号服务器;

公众号服务器接收到消息后,会按照业务逻辑进行相应的处理

处理完成后,公众账号服务器会将处理结果返回微信服务器,

微信服务器将公众号服务器内容返回给用户



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值