微信公众号开发_Java(4)--access_token的获取

一、前言

  之前一直在说”微信公众平台接口”、”SDK”等概念,这里终于可以调用微信接口了,今天讲解access_token的调用。

二、access_token简介

2.1 access_token

  accessToken在微信开发者文档中是这样定义的:
  access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存(至于保存到数据库还是服务器缓存中就要看具体的业务需要了)。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。
  备注
  1.access_token是加密的字符串,其目的是为了接口安全考虑,不然随便就能调用微信服务器的接口会有很大风险;
  2.access_token:公众号的全局唯一票据(登陆后的凭据,证明你已经登陆,相当于你拿着票去看演唱会,说明你已经买票了,才会让你进);

2.2 AppId和AppSecret

  AppID:开发者ID是公众号开发识别码,配合开发者密码可调用公众号的接口能力。
  AppSecret:开发者密码是校验公众号开发者身份的密码,具有极高的安全性。切记勿把密码直接交给第三方开发者或直接存储在代码中。如需第三方代开发公众号,请使用授权方式接入。
  如图:
  appid

2.3 ip白名单

  在配置AppSecret时需要设置ip白名单。
1.启用ip白名单的目的
微信公众平台目前已经发布通知在平台接口调用上为了提高安全性需要添加IP白名单并仅允许白名单IP调用。
目前微信公众平台面向开发者主要提供的开发者ID和开发者密钥,在调用时ID和密钥通过检验即可进行调用。
新增的IP白名单是当前各种安全模式中非常流行的安全策略,在泄露开发者ID和密钥的情况下也不易被盗用。
备注
1.该IP指的是调用该接口的服务器IP地址
2.当调用时返回错误代码40164即代表调用的IP地址不在白名单中,因此如遇此问题请检查IP白名单设置。
2.查询ip的方法
通过浏览器访问http://ip.qq.com/,可查看当前IP地址。

三、获取access_token

3.1 接口调用请求说明

1.接口调用请求说明
http请求方式: GET

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

2.参数说明

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

3.返回说明
正常情况下,微信会返回下述JSON数据包给公众号:

{"access_token":"ACCESS_TOKEN","expires_in":7200}
参数说明
access_token 获取到的凭证
aexpires_in凭证有效时间,单位:秒

错误时微信会返回错误码等信息,JSON数据包示例如下(该示例为AppID无效错误):

{"errcode":40013,"errmsg":"invalid appid"}

3.2 代码实现

package cn.edu.sdut.service;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import javax.faces.bean.ManagedBean;
import javax.enterprise.context.RequestScoped;

@SuppressWarnings("deprecation")
@RequestScoped
@ManagedBean(name = "accessTokenUtil")
public class AccessTokenUtil {
    public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token";
    public static final String APP_ID = "wxa549b28c24cf341e";
    public static final String SECRET = "78d8a8cd7a4fa700142d06b96bf44a37";
    private static HttpClient client;

    // 获取token
    @SuppressWarnings("finally")
    public static String getToken(String apiurl, String appid, String secret) {
        String turl = String.format("%s?grant_type=client_credential&appid=%s&secret=%s", apiurl, appid, secret);
        client = new DefaultHttpClient();
        HttpGet get = new HttpGet(turl);
        JsonParser jsonparer = new JsonParser();// 初始化解析json格式的对象
        String result = null;
        try {
            HttpResponse res = client.execute(get);
            String responseContent = null; // 响应内容
            HttpEntity entity = res.getEntity();
            responseContent = EntityUtils.toString(entity, "UTF-8");
            JsonObject json = jsonparer.parse(responseContent).getAsJsonObject();
            // 将json字符串转换为json对象
            if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
                if (json.get("errcode") != null) {// 错误时微信会返回错误码等信息,{"errcode":40013,"errmsg":"invalid
                                                    // appid"}
                } else {// 正常情况下{"access_token":"ACCESS_TOKEN","expires_in":7200}
                    result = json.get("access_token").getAsString();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭连接 ,释放资源
            client.getConnectionManager().shutdown();
            return result;
        }
    }

    public void printToken() throws Exception {
        System.out.println("=========1获取token=========");
        String accessToken = getToken(GET_TOKEN_URL, APP_ID, SECRET);// 获取token
        if (accessToken != null)
            System.out.println(accessToken);
    }

}

四、微信公众平台接口调试工具

https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B7%E5%8F%96access_token%E6%8E%A5%E5%8F%A3%20/token

五、代码库

  详细完整代码,请移步:
  https://github.com/GaoZiqiang/WeChatDevelopment

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要获取微信公众号的code,需要使用Java编程语言和微信公众号开发接口。以下是详细步骤: 第一步,通过微信官方网站注册一个公众号,并在开发者中心中下载微信公众号的SDK。 第二步,使用Java进行开发,编写相应的代码,实现接收微信公众平台的消息、回复微信公众平台的消息等功能。同时,在代码中需要配置微信公众平台的各种参数,例如APPID、APPSECRET、SIGNATURE等。 第三步,通过调用微信公众平台提供的接口获取微信公众号的code。 在Java代码中,可以使用HttpClient这个类库来请求微信公众平台提供的获取code的接口,然后通过解析返回的json数据,获取到相应的code。 最后,获取到code之后,可以使用该code来获取access_token等重要信息,在公众号开发中应用。通过这些方法,可以成功获取微信公众号的code,进而实现更加多样化的公众号开发。 ### 回答2: Java 获取微信公众号code 的方法有以下两种: 1. 使用微信官方提供的开发接口 微信官方提供了开发者工具包 Weixin-java-tools,其中包含了获取微信公众号code 的方法。 具体步骤如下: a. 在 pom.xml 文件中引入 Weixin-java-tools 工具包: ```xml <dependency> <groupId>com.github.binarywang</groupId> <artifactId>weixin-java-tools</artifactId> <version>3.4.0</version> </dependency> ``` b. 在代码中调用 Weixin-java-tools 中的方法实现获取 code: ```java public String getCode() throws WxErrorException { WxMpService wxMpService = new WxMpServiceImpl(); wxMpService.setWxMpConfigStorage(wxMpInMemoryConfigStorage); String redirectUrl = wxMpService.oauth2buildAuthorizationUrl( "http://example.com/wx/oauth/callback", WxConsts.OAuth2Scope.SNSAPI_USERINFO, null); return redirectUrl; } ``` 2. 使用第三方开源库 除了使用微信官方提供的工具包外,还有第三方开源库 WeChat-Java-SDK,也可以实现获取微信公众号 code。 具体步骤如下: a. 在 pom.xml 文件中引入 WeChat-Java-SDK 工具包: ```xml <dependency> <groupId>com.github.sd4324530</groupId> <artifactId>wechat-java-sdk</artifactId> <version>1.3.8.2</version> </dependency> ``` b. 在代码中调用 WeChat-Java-SDK 中的方法实现获取 code: ```java public String getCode() { WeChat weChat = new WeChat(config); String redirectUrl = weChat.getOpenOauthUrl(WxConsts.OAuth2Scope.SNSAPI_USERINFO, callbackUrl, null); return redirectUrl; } ``` 以上就是 Java 获取微信公众号 code 的两种方法,开发者可以根据自己的需求选择相应的方法。 ### 回答3: 在 Java获取微信公众号 code 通常涉及到两个主要步骤,首先是在前端页面中获取 code,然后是使用 Java 后端将 code 传递给微信服务器进行验证,最终获得用户信息。 第一步,前端页面中获取 code 在前端页面中获取微信公众号 code 可以通过使用微信官方提供的 JS-SDK 来实现。首先需要在页面引入 JS-SDK,然后使用微信提供的方法获取 code。其中,获取 code 的过程需要用户在微信客户端内打开并登录公众号,否则获取 code 会失败。 以下是获取 code 的示例代码: ```javascript $.ajax({ type: 'GET', url: 'https://open.weixin.qq.com/connect/oauth2/authorize?appid={APPID}&redirect_uri={REDIRECT_URI}&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect', dataType: 'json', success: function (data) { var code = data.code; console.log(code); }, error: function (xhr, errorType, error) { console.log(error); } }); ``` 在以上代码中,{APPID} 是公众号的 AppID,{REDIRECT_URI} 指定了用户授权后重定向的页面路径。获取到的 code 可以通过 AJAX 请求发送到后端进行验证。 第二步,使用 Java 后端将 code 传递给微信服务器进行验证 在 Java 后端中,我们可以通过使用 Spring 框架提供的 RestTemplate 类进行 HTTP 请求。同样需要注意的是,在进行 HTTP 请求之前需要在公众号后台配置安全域名,否则会出现请求失败的情况。 以下是使用 RestTemplate 类进行 HTTP 请求的示例代码: ```java RestTemplate restTemplate = new RestTemplate(); String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={APPID}&secret={SECRET}&code={CODE}&grant_type=authorization_code"; String appId = "****"; // 公众号的 AppID String secret = "****"; // 公众号的 AppSecret String code = "****"; // 前端获取到的 code String result = restTemplate.getForObject(url, String.class, appId, secret, code); System.out.println(result); ``` 以上代码中,url 指定了微信接口的地址和参数,其中 appId、secret 和 code 分别是公众号的 AppID、AppSecret 和前端获取到的 code。getForObject() 方法用于发送 HTTP GET 请求,并返回接口返回的字符串结果。 最终,我们可以通过解析微信接口返回的 JSON 字符串,获取用户的 openid、access_token 等信息。获取到用户信息后,我们可以将其存储到数据库中,或者再次发送 HTTP 请求获取更多信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值