微信公众号开发


微信公共号入门

微信公众号

概述:

是微信平台推出的一个面向企业和面向个人的一个服务平台

作用:

主要是推广,还有一些发布订阅的功能等…

分类:

第一次申请微信公众号时,需要选择一个微信公众号的分类
1.订阅号(未认证,已认证)
面向个人或者一些小型团体,主要作用就是用于推广
2.服务号(未认证,已认证)
企业面向大众的(需要营业执照等一些认证资料),主要作用是用于企业对外提供服务的,而不是推广
3.企业号
面向企业内部的,主要作用于企业内部管理,类似于OA,很少人使用
4.小程序
微信公众号内部的APP

界面分析

AppID和AppSecret
启动服务器配置(一旦开启,默认功能全部失效)

1.URL:
开发者自己服务器接口的地址,也就是我们的Controller的URL,由我们的代码来实现指定的功能
2.Token:
本身来说没有特殊要求和作用,随意编写即可
3.EncodingAESKey:
消息加密密钥由43位字符组成,随机生成即可(密钥)
4.消息加解密方式
明文模式:
不使用消息体加解密功能,安全系数较低
兼容模式:
明文、密文将共存,方便开发者调试和维护
安全模式:
消息包为纯密文,需要开发者加密和解密,安全系数高

开发程序接入微信公众号

开发者的服务器接入用户微信公众号的请求?

1.用户通过微信公众好(发送消息,点击菜单或者某个按钮)操作,发送请求,把消息发送到腾讯的服务器,然后腾讯的服务器通过开发者设置的URL,将消息转发给用户的URL中
2.用户在微信公众号中打开网页,在网页中的所有操作都是和开发者的服务器直接进行交互的

SpringBoot快速接入微信公众号
实现功能:用户定位
解决权限问题

使用开发者工具->公众平台测试账号

配置url,使用花生壳内网穿透

http://xuhengliang.imwork.net/wechat/helloWechat
能够访问,但是无法设置成功,因为暂时还没有返回值

阅读接入指南

第一步:填写服务器配置
第二步:验证消息的确来自微信服务器
1.参数描述:
signature :微信加密签名
结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp:时间戳
nonce 随机数
echostr 随机字符串,校验参数,直接返回即可URL设置成功
2.校验流程:
开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:
1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
校验代码:

 private static final String TOKEN = "mytoken";

 @RequestMapping("/helloWechat")
 public String helloWechat(String signature,String timestamp,String nonce,String echostr){
     System.out.println(signature + " ===" + timestamp + " ===" +nonce + " ===" +echostr );
     System.out.println("helloWechat");
     //校验请求是否来自微信服务器
     //1.将token、timestamp、nonce三个参数进行字典序排序
     Set<String> set = new TreeSet<>();
     set.add(TOKEN);
     set.add(timestamp);
     set.add(nonce);
     //2.将三个字符串进行拼接
     StringBuilder stringBuilder = new StringBuilder();
     Iterator<String> iterator = set.iterator();
     while(iterator.hasNext()){
         stringBuilder.append(iterator.next());
     }
     //3.将拼接后的字符串进行SHA1签名
     String sha1Str = SHA1.encode(stringBuilder.toString());

     //4.将签名后的字符串和signature进行对比
     if(sha1Str.equals(signature)){
         return echostr;
     }

     return null;
 }

Java实现SHA1

public final class SHA1 {

    private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5',
            '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

    /**
     * Takes the raw bytes from the digest and formats them correct.
     *
     * @param bytes the raw bytes from the digest.
     * @return the formatted bytes.
     */
    private static String getFormattedText(byte[] bytes) {
        int len = bytes.length;
        StringBuilder buf = new StringBuilder(len * 2);
        // 把密文转换成十六进制的字符串形式
        for (int j = 0; j < len; j++) {
            buf.append(HEX_DIGITS[(bytes[j] >> 4) & 0x0f]);
            buf.append(HEX_DIGITS[bytes[j] & 0x0f]);
        }
        return buf.toString();
    }

    public static String encode(String str) {
        if (str == null) {
            return null;
        }
        try {
            MessageDigest messageDigest = MessageDigest.getInstance("SHA1");
            messageDigest.update(str.getBytes());
            return getFormattedText(messageDigest.digest());
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}

查看消息管理

普通消息管理

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

获得消息

接受微信公众号的POST请求的方法method = RequestMethod.POST
从请求体中获得微信消息内容,格式是XML格式@RequestBody
参数介绍:
ToUserName 开发者微信号
FromUserName 发送方帐号(一个OpenID-是单微信公众号安全设计
CreateTime 消息创建时间 (整型)
MsgType text 当前消息类型-text:文本消息
Content 文本消息内容
MsgId 消息id,64位整型
…不同的消息有相同的参数,也有个性化参数,详细见文档

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流放Oo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值