Java微信公众平台开发(一)--接入微信公众平台

转自:http://www.cuiyongzhi.com/post/38.html

(一)接入流程解析

在我们的开发过程中无论如何最好的参考工具当然是我们的官方文档了:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html

通过文档我们可以看出其中接入微信公众平台开发,开发者需要按照如下步骤完成:

  • 填写服务器配置
  • 验证服务器地址的有效性
  • 依据接口文档实现业务逻辑

按照上面的逻辑可能是填写服务器配置信息是在第一步,但是我们在真实的开发过程中往往都是先做第二步【编写代码实现验证服务器地址的有效性】,因为没有第二步的完成第一步的配置是不能达到任何效果的!

(二)验证服务器有效性代码编写

按照开发文档我们知道我们的应用服务器需要接受微信服务器的get请求,其中包含四个参数(signature、timestamp、nonce、echostr)然后通过校验方式校验服务器的可靠性,校验方式如下:

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

①我在这里写了一个工具类去实现其中的前两步,将三个参数排序并返回sha1加密后的字符串,代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

package com.cuiyongzhi.wechat.util;

import java.security.MessageDigest;  

import java.security.NoSuchAlgorithmException;  

import java.util.Arrays;  

  

/**

 * ClassName: SignUtil

 * @Description: 请求校验工具类 

 * @author dapengniao

 * @date 2016年3月4日 下午6:25:41

 */

public class SignUtil {  

    // 与接口配置信息中的Token要一致   

    private static String token = "dapengniaowechat";  

    /** 

     * 验证签名 

     * @param signature 

     * @param timestamp 

     * @param nonce 

     * @return 

     */

    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");  

            // 将三个参数字符串拼接成一个字符串进行sha1加密   

            byte[] digest = md.digest(content.toString().getBytes());  

            tmpStr = byteToStr(digest);  

        catch (NoSuchAlgorithmException e) {  

            e.printStackTrace();  

        }  

  

        content = null;  

        // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信   

        return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;  

    }  

  

    /** 

     * 将字节数组转换为十六进制字符串 

     * @param byteArray 

     * @return 

     */

    private static String byteToStr(byte[] byteArray) {  

        String strDigest = "";  

        for (int i = 0; i < byteArray.length; i++) {  

            strDigest += byteToHexStr(byteArray[i]);  

        }  

        return strDigest;  

    }  

  

    /** 

     * 将字节转换为十六进制字符串 

     * @param mByte 

     * @return 

     */

    private static String byteToHexStr(byte mByte) {  

        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[(mByte >>> 4) & 0X0F];  

        tempArr[1] = Digit[mByte & 0X0F];  

        String s = new String(tempArr);  

        return s;  

    }  

}

②将我们的工具类应用到我们的服务器验证过程中,这里我新建一个controller为WechatSecurity,实现同一个get用于接收参数和返回验证参数,简单代码如下:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

package com.cuiyongzhi.wechat.controller;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.apache.log4j.Logger;

import org.springframework.stereotype.Controller;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.RequestParam;

import com.cuiyongzhi.wechat.util.SignUtil;

@Controller

@RequestMapping("/wechat")

public class WechatSecurity {

    private static Logger logger = Logger.getLogger(WechatSecurity.class);

    /**

     

     * @Description: 用于接收get参数,返回验证参数

     * @param @param request

     * @param @param response

     * @param @param signature

     * @param @param timestamp

     * @param @param nonce

     * @param @param echostr

     * @author dapengniao

     * @date 2016年3月4日 下午6:20:00

     */

    @RequestMapping(value = "security", method = RequestMethod.GET)

    public void doGet(

            HttpServletRequest request,

            HttpServletResponse response,

            @RequestParam(value = "signature", required = true) String signature,

            @RequestParam(value = "timestamp", required = true) String timestamp,

            @RequestParam(value = "nonce", required = true) String nonce,

            @RequestParam(value = "echostr", required = true) String echostr) {

        try {

            if (SignUtil.checkSignature(signature, timestamp, nonce)) {

                PrintWriter out = response.getWriter();

                out.print(echostr);

                out.close();

            else {

                logger.info("这里存在非法请求!");

            }

        catch (Exception e) {

            logger.error(e, e);

        }

    }

    @RequestMapping(value = "security", method = RequestMethod.POST)

    // post方法用于接收微信服务端消息

    public void DoPost() {

        System.out.println("这是post方法!");

    }

}

那么到这里我们的服务器验证的代码就基本完成了,下面我们就进入验证过程!

(三)服务器验证

这里我用来验证的是我的个人公众号【崔用志】,如果大家有兴趣可以搜索看到的,通过微博认证的一个私人号,当然有想法在这里我们也是可以一起交流的,验证方法如下图:

点击【提交】成功之后如下图所示:

点击图中【启用】即可,那么到这里我们的服务器接入配置就完成了,【下一篇我们将讲述如何接收消息并进行消息处理】,感谢你的翻阅,如有疑问可以留言讨论!

原文地址:https://www.cnblogs.com/sharpest/p/10231259.html

时间: 2024-12-18 20:26:09

Java微信公众平台开发(一)--接入微信公众平台的相关文章

第三方平台正式支持接入微信公众平台JS-SDK

之前微信公众平台面向开发者开放微信内网页开发工具包,现在第三方平台也能正式支持接入微信公众平台JS-SDK了,第三方平台可以在获得公众号的授权后,通过JS-SDK帮助公众号开发和实现网页业务. 公众号第三方平台支持JS-SDK接入FAQ(常见问题)如下: 公众号第三方平台是什么? 针对各行各业公众号的行业共性需求,第三方开发团队可以在自身熟悉的行业和领域内搭建公众号第三方平台,为公众号提供行业解决方案或功能优化方案,如电商行业的公众号商城解决方案.客户管理的功能优化方案等. 如何成为公众号第三方

微信公众平台开发(一) 申请微信公众账号

一.微信公众平台介绍 微信公众平台是腾讯公司在微信的基础上新增的功能模块,通过这一平台,个人和企业都可以打造一个微信的公众号,可以群发文字.图片.语音.视频.图文消息五个类别的内容. 二.注册微信公众号 1.注册地址: https://mp.weixin.qq.com/ 点击右上角的"立即注册"申请微信公众账号. 2.填写基本信息 3.激活邮箱账号 到邮箱中收取邮件,激活公众平台账号. 4.信息登记 通过邮箱激活后,填写基本信息.选择为"个人"后,后面只能选择&qu

微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码

教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 微信开放平台 公众号第三方平台开发 教程五 代公众号发起网页授权源码 由于最近比较忙,这个教程没有连续上,我会尽量连载.书节上回,上次我介绍了代公众号调用接口的方法和SDK的使用.不少朋友也都加了QQ群(2489462

PHP微信公众平台开发高级篇—微信JS-SDK

PHP微信公众平台开发高级篇—微信JS-SDK 第一步.绑定域名: 第二步.引入JS文件: 第三部.通过Config接口注入权限验证配置 第四部.通过Read接口处理成功验证 第五部.通过Error接口处理失败验证 实际案例:分享接口内容

【微信公众平台开发】借用微信内置图片浏览功能

开发微信公众平台时,碰到文章中有很多图片,需要可以点开图片浏览:那么点击图片直接调用微信客户端自带的图片播放组件会省很多事.否则你得去摆弄折腾各种图片浏览插件,比如photoswipe. 个人封装功能成一个js文件.把该文件放到你需要的网页里面即可,这样文章当你点击图片时,就会调用图片浏览功能! <script> function addLoadEvent(func){ //将函数作为参数,此函数就是 onload 触发时需要执行的某个函数 var oldonload=window.onloa

微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo

原文:微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 前几章中我讲解了微信开发平台提供第三方平台的好处,和使用流程,如果你看了我的文章相信你对开放平台有了初步的了解,但是在实际的开发过程

php之微信公众号开发三公牛牛房卡平台搭建使用php7要注意的地方

开启微信公众号开发三公牛牛房卡平台搭建网站(h5.fanshubbs.com联系Q1687054422),从微信开发文档中下载demo 如下载php示例代码 示例代码中是使用"$GLOBALS["HTTP_RAW_POST_DATA"]"接收来自客户端的消息:如下图所示 线上服务器使用的是php7以下的版本,发送消息会有回复. 但线上服务器使用的是php7以上的版本,发送消息一直得不到回复.查找资料得知 php7已经弃用了HTTP_RAW_POST_DATA 用 p

微信开放平台开发(2) 网站应用微信登录

关键字:微信公众平台 微信开放平台 微信登录 微信扫码登录 使用微信账号登录网站作者:方倍工作室 原文:http://www.cnblogs.com/txw1958/p/weixin-qrlogin.html 在这篇微信公众平台开发教程中,我们将介绍如何使用微信开放平台接口实现微信扫码登录的功能. 准备工作 网站应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥

微信公众号开发系列-获取微信OpenID

在微信开发时候在做消息接口交互的时候须要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID.接收事件推送方式和网页授权获取用户基本信息方式获取. 1.通过接收被动消息方式获取OpenId(接收事件推送方式).下面事件中都能够获取到OpenID 关注/取消关注事件 用户在关注与取消关注公众号时.微信会把这个事件推送到开发人员填写的URL.方便开发人员给用户下发欢迎消息或者做帐号的解绑. 微信server在五秒内收不到响应会断掉连接,而且又一次发起请求,总共重试三次 关于