关闭

Java微信公众号开发之接入

标签: java微信
36人阅读 评论(0) 收藏 举报
分类:

微信官方接入指南

一、环境准备

1、申请一个公众号,公众号接口权限说明如下:
这里写图片描述
这里写图片描述
根据不同的需求申请不同的公众号。

个人只能申请订阅号,而且不能进行微信认证,但是可以申请公众平台测试账号,拥有全部的权限,(首页—>开发者工具—>公众平台测试账号)

2、准备一台外网服务器(腾讯云、阿里云、百度云)

二、接入微信公众平台开发
第一步:填写服务器配置
登录微信公众平台官网后,在公众平台官网的开发-基本设置页面,勾选协议成为开发者,点击“修改配置”按钮,填写服务器地址(URL)、Token和EncodingAESKey。

URL是开发者用来接收微信消息和事件的接口URL。
Token可由开发者可以任意填写,用作生成签名(该Token会和接口URL中包含的Token进行比对,从而验证安全性)。
EncodingAESKey由开发者手动填写或随机生成,将用作消息体加解密密钥。
这里写图片描述

如果是测试账号:
这里写图片描述

第二步:验证消息的确来自微信服务器
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上。
在外网服务器上用Java写后台,所以我们用到了Servlet来接受GET和POST请求,上一步中的URL地址就是Servlet的访问地址

GET请求携带参数如下表所示:

参数 描述
signature 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp 时间戳
nonce 随机数
echostr 随机字符串

验证步骤:
1、在外网服务器上建好Servlet,并填写好配置信息后,点击提交,外网服务器上会收到Get请求,并收到以下参数:

signature=63603f83cb6f12d376a5460779c8a3f59d150990&echostr=12631531042608380285&timestamp=1517668717&nonce=3442480512

2、将token(之前服务器配置中所填写)、timestamp、nonce三个参数进行字典序排序

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

public static String CheckSignature(String str){
        String[] content=str.split("&");
        String signature=content[0].split("=")[1];
        String timestamp=content[2].split("=")[1];
        String nonce=content[3].split("=")[1];
        //第一步中填写的token一致
        String token="wxsxw";

        ArrayList<String> list=new ArrayList<String>();
        list.add(nonce);
        list.add(timestamp);
        list.add(token);

        //字典序排序
        Collections.sort(list);
        //SHA1加密
        String checksignature=SHA1Util.encode(list.get(0)+list.get(1)+list.get(2));
        System.out.println(signature);
        System.out.println(checksignature);

        if(checksignature.equals(signature)){
            return content[1].split("=")[1];
        }
        return null;    
    }

4、开发者获得加密后的字符串可与signature对比,如果两者一致,确认此次GET请求来自微信服务器,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取Get请求携带参数
        String content=request.getQueryString();
        System.out.println(content);
        if(content.startsWith("signature")){
            //检查消息是否来自微信服务器
            String echostr=WechatUtil.CheckSignature(content);

            //返回echostr给微信服务器
            OutputStream os=response.getOutputStream();
            os.write(URLEncoder.encode(echostr,"UTF-8").getBytes());
            os.flush();
            os.close();
        }

    }

交互过程:
这里写图片描述

三、获取access_token
官方文档

3.1、access_token简介

1、access_token是公众号接口调用的全局唯一票据,每次主动调用接口时必须携带的参数。
2、目前Access_token的有效期通过返回的expire_in来传达,目前是7200秒之内的值
3、公众号可以使用AppID和AppSecret调用本接口来获取access_token。AppID和AppSecret可在“微信公众平台-开发-基本配置”页中获得(需要已经成为开发者,且帐号没有异常状态)。调用接口时,请登录“微信公众平台-开发-基本配置”提前将服务器IP地址添加到IP白名单中,点击查看设置方法,否则将无法调用成功。

3.2、接口调用请求说明

https请求方式: GET
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET

参数说明:

参数 是否必须 说明
grant_type 获取access_token填写client_credential
appid 第三方用户唯一凭证
secret 第三方用户唯一凭证密钥,即appsecret

返回说明:

{"access_token":"ACCESS_TOKEN","expires_in":7200}

参数说明:

参数 说明
access_token 获取到的凭证
expires_in 凭证有效时间,单位:秒



Java代码:

    public static String getToken(){
        HttpURLConnection conn=null;
        if(access_token==null||access_token.equals("")
                ||(new Date().getTime()-access_token_date.getTime())>((accessTokenInvalidTime-200L)*1000L)){
            try{
                String Strurl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+AppID+"&secret="+AppSecret;
                URL url = new URL(Strurl);
                conn = (HttpURLConnection) url.openConnection();
                conn.setConnectTimeout(5000);
                conn.setRequestMethod("GET");
                if (HttpURLConnection.HTTP_OK == conn.getResponseCode()){
                    access_token_date=new Date();
                    InputStream in=conn.getInputStream();
                    String backcontent= IOUtil.readString(in);
                    backcontent= URLDecoder.decode(backcontent,"UTF-8");

                    JSONObject json = JSONObject.fromObject(backcontent);
                    access_token=json.getString("access_token");
                    if(access_token!=null){
                        System.out.println("获取token成功:"+access_token);
                    }  
                }
            }catch(Exception e){
                e.printStackTrace();
            }finally {
                conn.disconnect();
            }
        }else{
            System.out.println("token获取失败或尚未失效:"+access_token);
        }
        return access_token;
    }
0
0
查看评论

微信公众平台接入java示例代码

第一步:申请消息接口 需要申请消息接口,很简单只需要在微信公众平台后台填写Servlet地址即可,这里不多说。 第二步:验证URL有效性 需要编写URL有效性验证代码,这里以Java代码做示例,官网已给出PHP示例 开发者提交信息后,微信服务器将发送GET请求到填写的URL上...
  • lihao97049855
  • lihao97049855
  • 2015-12-30 10:25
  • 1906

Java微信公众号--1--基本配置接入开发者模式

近期自己在研究微信公众号的开发,所以写下来以便日后自己可以观看。当然也会有很多不足,观看时如果发现有什么问题可以私我,错误的地方我会及时改正,但是目前贴上来的代码是没有问题的,执行OK 目前我这篇博客就是讲微信公众号开发如何接入开发者模式 第一步:首先我们看下文档:他这里有四个参数,还需要进...
  • qq_38637558
  • qq_38637558
  • 2017-11-25 14:25
  • 944

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

转载自崔用志博客:http://www.cuiyongzhi.com/ 前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接! (一)接入流程解析 ...
  • Winhye
  • Winhye
  • 2017-11-28 10:51
  • 1170

微信公众平台开发文档 语音识别

开通语音识别功能,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段。 注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24小时生效。开发者可以重新关注此帐号进行测试。 开启语音识别后的语音XML数据包如...
  • txw1958
  • txw1958
  • 2014-10-21 11:00
  • 843

微信公众号开发之接入

概述 接入微信公众平台开发,开发者需要按照如下步骤完成: 1、填写服务器配置 2、验证服务器地址的有效性 3、依据接口文档实现业务逻辑 下面详细介绍这3个步骤。 第一步:填写服务器配置 登录微信公众平台官网后,在公众平台后台管理页面 - 开发者中心页,点击“修改配置”按...
  • hans201507
  • hans201507
  • 2015-12-29 20:04
  • 1406

基于java的微信公众平台开发视频教程

微信作为当前流行的通信社交软件已经有了几个亿的用户量,并且每天还在继续增加。几乎每一部智能手机都安装了微信。其公众平台拥有强大的功能。但是由于微信的示例代码基本使用php编写,市场上的java开发资料十分稀缺。 因此主讲老师经过潜心研究、认真准备了这套针对java语言开发的”基于java的微信公众...
  • nbdota
  • nbdota
  • 2016-02-17 20:43
  • 3153

微信公众号开发接入微信

一、申请一个微信公众号,具体申请流程就不一一诉说了。二、进入公众号平台,在下方开发者中心中基本配置查看AppID(应用ID)、AppSecret(应用密钥)如图1所示:三、设置你的服务器请求地址(注:服务器必须能外网访问),并设置token(令牌),令牌作用为验证链接的令牌,当设置链接的时候,微信服...
  • qq_22445455
  • qq_22445455
  • 2016-02-02 10:28
  • 444

java微信公众号开发 - 微信服务器的接入和验证

个人学习java微信公众号开发过程中的一些经验总结,希望这个博客能记录下我的成长历程,每天进步一点。 也希望跟大家共同学习,欢迎评论,转载请注明出处
  • Nifury
  • Nifury
  • 2016-09-01 11:24
  • 6549

java-微信公众号开发之获取accessToken

众所周知,在进行微信公众号的开发时,有一个比较关键的名词---access_token 这个东西是公众号的全局唯一接口调用凭据,并且公众号调用各接口时都需使用access_token。 例如自定义菜单的配置,客服接口发送消息,还有获取用户信息等一系列的操作,都需要使用。 access_toke...
  • a15091772380
  • a15091772380
  • 2018-01-15 12:11
  • 90

Java微信公众号开发(附源码!!!)

本文中采用原生servlet和jdbc实现微信公众号开发,附源码,源码链接在文章最后。
  • fanguoddd
  • fanguoddd
  • 2017-02-03 15:20
  • 22927
    个人资料
    • 访问:5764次
    • 积分:683
    • 等级:
    • 排名:千里之外
    • 原创:61篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    最新评论