微信公众号推送模板消息(二):Access_token的获取

简要说明

Access_token 是微信公众号的全局唯一的接口调用凭据,公众号在调用各种接口时都需使用access_token ,由此可以看出在微信公众号开发中access_token的重要性。

因为access_token是接口调用唯一凭据 很重要,所以再单独摘出来说明一下。

我了解的获取 access_token 的方式有两种 :

  1. 基础获取 access_token
  2. 网页授权获取 access_token

基础 access_token 和 网页 access_token 是有一定区别的!!
除了登陆获取的是网页授权的 access_token 之外,其余的都用普通的 access_token 就行

具体官方详介如下:【附:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html
网页授权access_token和普通access_token的区别

一、获取基础 access_token

微信官方文档地址:https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html

微信公众平台在线接口调试工具:https://mp.weixin.qq.com/debug/

微信官方接口使用说明:

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

测试代码

	@Test
    public void testToken() {
    	
    	RestTemplate restTemplate = new RestTemplate();
        // 获取你拿到的 appid 和 secret
        String appid = "你的APPID";
        String secret = "你的secrect";
        
        // 定义请求地址,替换参数
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+secret;
        //发送请求 得到返回结果
        ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);
        String body = responseEntity.getBody();
        //String转JSONObject
        JSONObject object = JSON.parseObject(body);
        String Access_Token = object.getString("access_token");
        String expires_in = object.getString("expires_in");// 过期时长(两小时)
        
        System.out.println(object);
        
    }

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

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

返回参数说明

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

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

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

其他或更详细的查看上面的微信官方文档!!

二、网页授权获取 access_token (前提是获得授权code)

微信官方文档:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_webpage_authorization.html

具体而言,网页授权流程大体分为四步:

1、引导用户进入授权页面同意授权,获取code

2、通过code换取网页授权access_token(与基础支持中的access_token不同)

3、如果需要,开发者可以刷新网页授权access_token,避免过期

4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制)

首先配置回调域名,回调域名是用来获取 code 的返回值,下图是在微信测试号配置回调域名,类似于设置一个白名单
如果没有配置 或 配置错误会出现:scope参数错误或没有scope权限 的错误,需要配置正确的回调域名(不需要写 http或https)。
在这里插入图片描述
配置JS接口安全域名 可在该域名下调用微信开放的JS相关接口
配置JS接口安全域名
接口调用请求说明 (1.用户同意授权,获取code【需要在微信中访问】)

请求方式: GET https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect

传递参数说明

参数是否必须说明
appid公众号的唯一标识
redirect_uri授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
response_type返回类型,请填写code
scope应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
state重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
#wechat_redirect无论直接打开还是做页面302重定向时候,必须带此参数

测试代码

	@Test
    public void testCode() throws UnsupportedEncodingException {

        // 获取你拿到的 appid 和 secret
        String appid = "你的APPID";
        String secret = "你的secrect";

        // 使用 urlEncode 对链接进行处理 [授权回调域名(xxx.com)]
        String encodeurl = URLEncoder.encode("http://你配置的授权回调页面域名/getCode","UTF-8");

        //定义请求地址
        String 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";
        url = url.replace("APPID",appid).replace("REDIRECT_URI",encodeurl);
        // 获得拼接后的访问链接 复制到微信访问; 访问后的地址会含有code和state(例如:http://xxx.com/getCode?code=053NvJ0w3DU3DV2rkZZv3AbSVk1NvJ0R&state=STATE)
        System.out.println(url);

    }

这样会输出一个 URL 链接,复制 到微信里进行访问;然后再复制访问成功的链接 粘贴到其他地方进行查看 或 用默认浏览器打开进行查看链接:
进行授权获取code

获取code

接口调用请求说明 (2.根据 code 获取网页授权access_token、openid 信息)

请求方式: GET https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

传递参数说明

参数是否必须说明
appid公众号的唯一标识
secret公众号的appsecret
code填写第一步获取的code参数 (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
grant_type填写为authorization_code

测试代码

@Test
public void testWebpageAccessToken() {
	RestTemplate restTemplate = new RestTemplate();
    // 获取你拿到的 appid 和 secret
    String appid = "你的APPID";
    String secret = "你的secrect";
    String code = "你获取到的code";
    
    //定义请求地址
    String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
    url = url.replace("APPID",appid).replace("SECRET",secret).replace("CODE",code);
    //发送请求 得到返回结果
    JSONObject obj = JSON.parseObject(restTemplate.getForObject(url,String.class));
    String access_token = obj.getString("access_token");
    String refresh_token = obj.getString("refresh_token");
    String openid = obj.getString("openid");
    String scope = obj.getString("scope");
    String expires_in = obj.getString("expires_in");
    
    System.out.println(obj);
    System.out.println("access_token 和 有效时长:"+access_token +" : "+expires_in);
    
}

正确返回说明

正确时返回的JSON数据包如下:

{
  "access_token":"ACCESS_TOKEN",
  "expires_in":7200,
  "refresh_token":"REFRESH_TOKEN",
  "openid":"OPENID",
  "scope":"SCOPE" 
}

返回参数说明

参数说明
access_token网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
expires_inaccess_token接口调用凭证超时时间,单位(秒)
refresh_token用户刷新access_token
openid用户唯一标识,请注意,在未关注公众号时,用户访问公众号的网页,也会产生一个用户和公众号唯一的OpenID
scope用户授权的作用域,使用逗号(,)分隔

错误返回说明
错误时微信会返回JSON数据包如下(示例为Code无效错误):

{"errcode":40029,"errmsg":"invalid code"}

其他或更详细的查看上面的微信官方文档!!

在这里稍微介绍了一下Access_token 的获取,区别;一些具体介绍官方文档都有。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现微信小程序推送消息给公众号并获取模板消息库的模板编号,可以参照以下步骤: 1. 在微信公众平台上创建模板消息获取模板ID。 2. 在小程序端使用 wx.request() 方法向服务器发送请求,请求服务器将消息发送给公众号。 3. 在服务器端,可以使用 Python 的 requests 库向微信服务器发送请求,获取模板消息库的模板编号。 具体的代码实现可以参考以下示例: 小程序端代码: ``` wx.request({ url: 'https://yourserver.com/send_msg', method: 'POST', data: { template_id: 'your_template_id', openid: 'user_openid', form_id: 'form_id', data: { keyword1: { value: '消息内容' }, keyword2: { value: '消息时间' } } }, success: function(res) { console.log(res.data) } }) ``` 服务器端代码: ``` import requests import json def send_template_msg(openid, form_id, template_id, data): access_token = get_access_token() # 获取 access_token url = 'https://api.weixin.qq.com/cgi-bin/message/wxopen/template/send?access_token=' + access_token headers = {'Content-Type': 'application/json'} payload = { 'touser': openid, 'template_id': template_id, 'form_id': form_id, 'data': data } response = requests.post(url, data=json.dumps(payload), headers=headers) result = json.loads(response.text) if result['errcode'] == 0: return True else: return False def get_access_token(): # 获取 access_token 的代码 return access_token ``` 在上面的代码中,send_template_msg() 函数用于向微信服务器发送模板消息,其中需要传入 openid、form_id、template_id 和 data 参数。get_access_token() 函数用于获取 access_token,这里不再赘述。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值