公众号开发新手快速上路(Java版本)

最近开始玩公众号开发了,首先得注册一个公众号

公众号后台网址:https://mp.weixin.qq.com

进入后可以看到公众号分为两大类(服务号和订阅号),服务号个人注册不太到,个人一般使用订阅号。
服务号和订阅号
订阅号也分认证和未认证。未认证的情况下,个人的接口调用有限制。
必须要认证或者服务号才能调用接口权限
所以这里我们可以申请微信公众平台接口测试帐号,里面啥权限都有了。
申请地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
进入以后如图:
微信公众平台接口测试帐号
授权登录以后,是这样的。
测试公众号授权登录
这里要填两个值(url和token),点击“提交”按钮的时候,微信会向我们的url发起一个请求。
我在这里随便跑了个项目,写了个controller,启动。访问地址localhost:8080/wx/get(测试走的通)
在这里插入图片描述
接下来我们可以把访问地址填在公众号后台的url里了。这里插一句嘴,我们一般开发的时候都是localhost:8080啥啥的,微信这边访问不到。(你可以试试在上面填个localhost:8080看人微信理你不。当然你要是有云平台那另说…)
我这个穷孩子的话就选一个免费的内网穿透工具ngrok。差不多就是把你的本地网址能让外界访问到。
ngrok内网穿透
以上通过ngrok就能把我的localhost:8080变成前面那一串,在把他丢在微信测试平台后台的url那一栏,在随便写个token。
我是这么填的。
在这里插入图片描述
点击提交,这时候,微信就向你的服务器上发起一个请求,并带过来四个参数。每次微信测试平台点“提交”都来一次请求哈!!

在这里插入图片描述
这里我在后台接收了这四个参数,并打印出来代表流程走通了。

	@GetMapping("/get")
    private String get(String signature, String timestamp, String nonce, String echostr) {
        System.out.println("signature="+signature);
        System.out.println("timestamp="+timestamp);
        System.out.println("nonce="+nonce);
        System.out.println("echostr="+echostr);
        return “”;
    }

接下来步骤按着微信官方文档来走。

开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序
2)将三个参数字符串拼接成一个字符串进行sha1加密
3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信。

 	//Controller完整代码
 	@GetMapping("/get")
    private String get(String signature, String timestamp, String nonce, String echostr) {
        System.out.println("signature="+signature);
        System.out.println("timestamp="+timestamp);
        System.out.println("nonce="+nonce);
        System.out.println("echostr="+echostr);

        boolean isSuccess = weChatService.check(signature, timestamp, nonce);
        if (isSuccess) {
            System.out.println("成功");
        }else {
            System.out.println("失败");
        }
		//若确认此次GET请求来自微信服务器,请原样返回echostr参数内容
        return echostr;
    }


//具体校验
@Service
public class WeChatServiceImpl implements WeChatService {

    private static final String TOKEN = "token";

    //    1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密
    //    3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
    @Override
    public boolean check(String signature, String timestamp, String nonce) {
        boolean isSuccess = true;

//       1)将token、timestamp、nonce三个参数进行字典序排序
        String [] arr = new String [] {TOKEN, timestamp, nonce};
        Arrays.sort(arr);

//       2)将三个参数字符串拼接成一个字符串进行sha1加密
        String mdResult = getMdAh1Result(arr[0] + arr[1] + arr[2]);

//       3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

        return signature.endsWith(mdResult);
    }


    //加密
    private String getMdAh1Result(String str) {
        char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f' };
        try {
            MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
            mdTemp.update(str.getBytes("UTF-8"));
            byte[] md = mdTemp.digest();
            int j = md.length;
            char buf[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
                buf[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(buf);
        } catch (Exception e) {
            return null;
        }
    }
}

后台校验写完以后再回到公众号点提交。校验完成以后就是配置成功了。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值