IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 微信小程序-获取openId/accessToken/订阅消息等接口 -> 正文阅读

[移动开发]微信小程序-获取openId/accessToken/订阅消息等接口

微信小程序-获取openId/accessToken/订阅消息等接口

工具类

package test;

import com.fasterxml.jackson.databind.ObjectMapper;
import test.util.RequestSender;
importtest.response.Code2SessionResponse;
import test.response.GetAccessTokenResponse;
import test.response.SubscribeMessageSendResponse;

import java.io.IOException;
import java.net.URISyntaxException;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.HashMap;
import java.util.Map;

public class WxAppletHelper {

    /**
     * APPID
     */
    private static final String APPID = "wx6985e45642d2sdfs";

    /**
     * 秘钥
     */
    private static final String SECRET = "456648212asdfsdf5a4f6sdf4s2df1";

    /**
     * 小程序订阅消息模板ID
     */
    private static final String Template_Id = "Ru8464564asd1f2asdf456sd4fs2d1fs2fs3-Tg";

    /**
     * 扫码后跳转页
     */
    private static final String Page = "pages/index/index";

    /**
     * GET请求
     * <p>
     * 调用 auth.code2Session 接口,换取 用户唯一标识 OpenID 、 用户在微信开放平台帐号下的唯一标识UnionID(若当前小程序已绑定到微信开放平台帐号) 和 会话密钥 session_key。
     * 之后开发者服务器可以根据用户标识来生成自定义登录态,用于后续业务逻辑中前后端交互时识别用户身份
     * <p>
     * js_code,前端调用wx.login()获取的 code
     * grant_type,授权类型,此处只需填写 authorization_code
     * <p>
     * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html
     */
    private static final String URL_Code2Session = "https://api.weixin.qq.com/sns/jscode2session?appid={APPID}&secret={SECRET}&js_code={JSCODE}&grant_type=authorization_code";

    /**
     * GET请求
     * <p>
     * 获取小程序全局唯一后台接口调用凭据(access_token)。调用绝大多数后台接口时都需使用 access_token,开发者需要进行妥善保存。 如使用云开发,可通过云调用免维护 access_token 调用。如使用云托管,也可以通过微信令牌/开放接口服务免维护 access_token 调用。
     * <p>
     * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/access-token/auth.getAccessToken.html
     */
    private static final String URL_GetAccessToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={APPID}&secret={SECRET}";

    /**
     * POST请求
     * <p>
     * 发送订阅消息
     * <p>
     * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/subscribe-message/subscribeMessage.send.html
     */
    private static final String URL_SubscribeMessageSend = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={ACCESS_TOKEN}";


    /**
     * 登录 code2Session,获取openId等信息
     *
     * @param code 前端调用wx.login()获取的 code
     */
    public static Code2SessionResponse authCode2Session(String code) throws IOException, URISyntaxException {
        RequestSender requestSender = RequestSender.builder().url(URL_Code2Session.replace("{APPID}", APPID).replace("{SECRET}", SECRET).replace("{JSCODE}", code)).build();
        requestSender.doRequest();
        String result = requestSender.getResult();
        Code2SessionResponse code2SessionResponse = new ObjectMapper().readValue(result, Code2SessionResponse.class);

        return code2SessionResponse;
    }

    /**
     * 接口调用凭证 getAccessToken
     *
     * @return
     * @throws IOException
     * @throws URISyntaxException
     */
    public static GetAccessTokenResponse getAccessToken() throws IOException, URISyntaxException {
        RequestSender requestSender = RequestSender.builder().url(URL_GetAccessToken.replace("{APPID}", APPID).replace("{SECRET}", SECRET)).build();
        requestSender.doRequest();
        String result = requestSender.getResult();
        GetAccessTokenResponse accessTokenResponse = new ObjectMapper().readValue(result, GetAccessTokenResponse.class);

        return accessTokenResponse;
    }

    /**
     * 订阅消息
     *
     * @param
     * @return
     * @throws IOException
     * @throws URISyntaxException
     */
    public static SubscribeMessageSendResponse subscribeMessageSend(String openId, Map<String, Object> params) throws IOException, URISyntaxException {
        GetAccessTokenResponse accessToken = getAccessToken();

        RequestSender requestSender = RequestSender.builder()
                .url(URL_SubscribeMessageSend.replace("{ACCESS_TOKEN}", accessToken.getAccess_token()))
                .method("POST")
                .jsonFormated(true)
                .param("touser", openId)
                .param("template_id", Template_Id)
                .param("page", Page)
                .param("data", params)
                .build();

        requestSender.doRequest();
        String result = requestSender.getResult();
        SubscribeMessageSendResponse subscribeMessageSendResponse = new ObjectMapper().readValue(result, SubscribeMessageSendResponse.class);

        return subscribeMessageSendResponse;
    }

    public static void main(String[] args) throws IOException, URISyntaxException {
        //测试获取Code2SessionResponse,包含openId等信息
        Code2SessionResponse code2SessionResponse = WxAppletHelper.authCode2Session("12345");
        System.out.println(code2SessionResponse.toString());

        //测试订阅消息推送,注意参数格式,参考微信文档
        Map<String, Object> params = new HashMap<String, Object>();
        String time = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
        params.put("date1", new HashMap<String, Object>() {
            {
                put("value", time);
            }
        });
        params.put("thing1", new HashMap<String, Object>() {
            {
                put("value", "消息已回复,请查看详情");
            }
        });
        WxAppletHelper.subscribeMessageSend("oX5-i5Te8rGikPNstFKH47G1ufp8", params);
    }
}

各接口响应数据类

package test.response;

import lombok.Data;
import lombok.ToString;

@Data
@ToString
public class Code2SessionResponse {

    /**
     * 用户唯一标识
     */
    private String openid;

    /**
     * 会话密钥
     */
    private String session_key;

    /**
     * 用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台帐号下会返回,详见 UnionID 机制说明。
     */
    private String unionid;

    /**
     * 错误码值
     */

    private Integer errcode;

    /**
     * 错误信息
     */
    private String errmsg;
}

package test.response;

import lombok.Data;
import lombok.ToString;

@Data
@ToString
public class GetAccessTokenResponse {

    /**
     * 用户唯一标识
     */
    private String access_token;

    /**
     * 会话密钥
     */
    private Long expires_in;

    /**
     * 错误码值
     */
    private Integer errcode;

    /**
     * 错误信息
     */
    private String errmsg;
}

package test.response;

import lombok.Data;
import lombok.ToString;

@Data
@ToString
public class SubscribeMessageSendResponse {

    /**
     * 错误码值
     */
    private Integer errcode;

    /**
     * 错误信息
     */
    private String errmsg;
}

其中的RequestSender工具类的使用,参照该文章HttpClient的使用

其他微信公众平台使用小程序时需要配置的内容

    @GetMapping("/get")
    public void get(HttpServletRequest request, HttpServletResponse response) throws IOException {

        System.out.println("==================get====================");
        Map<String, String[]> parameterMap = request.getParameterMap();
        if(parameterMap != null && !parameterMap.isEmpty()){
            Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();

            for(Map.Entry<String,String[]> entry : entries){
                System.out.println(entry.getKey() + ":" + Arrays.toString(entry.getValue()));
            }
        }

        String echostr = request.getParameter("echostr");

        response.getWriter().print(echostr == null ? "" : echostr);
    }

    @PostMapping("/post")
    public void post(HttpServletRequest request, HttpServletResponse response) throws IOException {

        System.out.println("==================post====================");
        Map<String, String[]> parameterMap = request.getParameterMap();
        if(parameterMap != null && !parameterMap.isEmpty()){
            Set<Map.Entry<String, String[]>> entries = parameterMap.entrySet();

            for(Map.Entry<String,String[]> entry : entries){
                System.out.println(entry.getKey() + ":" + Arrays.toString(entry.getValue()));
            }
        }

        response.getWriter().print("success");
    }
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-03-21 21:02:21  更:2022-03-21 21:03:19 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 18:55:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码