Java项目-苍穹外卖-Day06-微信小程序开发

news2025/2/24 3:01:18

文章目录

  • 前言
  • 1.HttpClient
    • httpclient是什么
    • 入门案例
      • 发送GET请求
      • 发送POST请求
      • Httpclient工具类
  • 2.微信小程序
    • 介绍
    • 准备工作
      • 注册小程序和完善对应信息
      • 下载开发者工具
    • 入门案例

前言

本篇主要是主要是wx小程序开发入门和HttpClient的使用介绍
完成了苍穹外卖用户端的 微信登陆 和 导入商品浏览功能代码(没写跟之前day04的类似)

1.HttpClient

httpclient是什么

简而言之,该工具包可以使我们使用java编码的方式发送http请求,之前我们都是接收浏览器的http请求的,现在是发送
在这里插入图片描述
然后我们配置依赖项的话
我们使用的aliyun.oss已经通过依赖传递传过来了这个jar包
所以可以直接用
在这里插入图片描述

入门案例

发送GET请求

    @Test
    public void testGet() throws Exception{
        //创建httpClient对象
        CloseableHttpClient aDefault = HttpClients.createDefault();
        //创建请求对象
        HttpGet httpGet = new HttpGet("http://localhost:8080/user/shop/status");

        //发送请求
        CloseableHttpResponse response = aDefault.execute(httpGet);

        //获取服务端返回的状态码
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("服务器返回的状态码为: "+statusCode);

        HttpEntity entity = response.getEntity();
        String body = EntityUtils.toString(entity);
        System.out.println("服务端返回的数据为: "+body);
        //关闭资源
        response.close();
        aDefault.close();
    }

测试结果
测试记得保证redis开启
在这里插入图片描述

发送POST请求

    /**
     * 测试通过httpclient发送POST方式的请求
     */
    @Test
    public void testPost() throws Exception {
        //创建httpclient对象
        CloseableHttpClient client = HttpClients.createDefault();
        //创建请求对象
        HttpPost httpPost = new HttpPost("http://localhost:8080/admin/employee/login");
        //这个请求需要请求体,里面是JSON形式的命名和用户名
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("username","admin");
        jsonObject.put("password","123456");
        StringEntity stringEntity = new StringEntity(jsonObject.toString());
        //指定编码方式
        stringEntity.setContentEncoding("utf-8");
        //指定传输数据格式
        stringEntity.setContentType("application/json");
        httpPost.setEntity(stringEntity);



        //发送请求
        CloseableHttpResponse response = client.execute(httpPost);

        //解析返回结果
        int statusCode = response.getStatusLine().getStatusCode();
        System.out.println("响应码: "+statusCode);

        HttpEntity entity = response.getEntity();
        String s = EntityUtils.toString(entity);
        System.out.println("响应数据为: "+s);

        //关闭资源
        response.close();
        client.close();
    }

测试结果
在这里插入图片描述

Httpclient工具类

可以看到之前的操作还是比较的机械式的
所以我们创建一个工具类
基本上就是封装一下我们之前写的代码

/**
 * Http工具类
 */
public class HttpClientUtil {

    static final  int TIMEOUT_MSEC = 5 * 1000;

    /**
     * 发送GET方式请求
     * @param url
     * @param paramMap
     * @return
     */
    public static String doGet(String url,Map<String,String> paramMap){
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();

        String result = "";
        CloseableHttpResponse response = null;

        try{
            URIBuilder builder = new URIBuilder(url);
            if(paramMap != null){
                for (String key : paramMap.keySet()) {
                    builder.addParameter(key,paramMap.get(key));
                }
            }
            URI uri = builder.build();

            //创建GET请求
            HttpGet httpGet = new HttpGet(uri);

            //发送请求
            response = httpClient.execute(httpGet);

            //判断响应状态
            if(response.getStatusLine().getStatusCode() == 200){
                result = EntityUtils.toString(response.getEntity(),"UTF-8");
            }
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            try {
                response.close();
                httpClient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return result;
    }

    /**
     * 发送POST方式请求
     * @param url
     * @param paramMap
     * @return
     * @throws IOException
     */
    public static String doPost(String url, Map<String, String> paramMap) throws IOException {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);

            // 创建参数列表
            if (paramMap != null) {
                List<NameValuePair> paramList = new ArrayList();
                for (Map.Entry<String, String> param : paramMap.entrySet()) {
                    paramList.add(new BasicNameValuePair(param.getKey(), param.getValue()));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
                httpPost.setEntity(entity);
            }

            httpPost.setConfig(builderRequestConfig());

            // 执行http请求
            response = httpClient.execute(httpPost);

            resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return resultString;
    }

    /**
     * 发送POST方式请求
     * @param url
     * @param paramMap
     * @return
     * @throws IOException
     */
    public static String doPost4Json(String url, Map<String, String> paramMap) throws IOException {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";

        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);

            if (paramMap != null) {
                //构造json格式数据
                JSONObject jsonObject = new JSONObject();
                for (Map.Entry<String, String> param : paramMap.entrySet()) {
                    jsonObject.put(param.getKey(),param.getValue());
                }
                StringEntity entity = new StringEntity(jsonObject.toString(),"utf-8");
                //设置请求编码
                entity.setContentEncoding("utf-8");
                //设置数据类型
                entity.setContentType("application/json");
                httpPost.setEntity(entity);
            }

            httpPost.setConfig(builderRequestConfig());

            // 执行http请求
            response = httpClient.execute(httpPost);

            resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
        } catch (Exception e) {
            throw e;
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        return resultString;
    }
    private static RequestConfig builderRequestConfig() {
        return RequestConfig.custom()
                .setConnectTimeout(TIMEOUT_MSEC)
                .setConnectionRequestTimeout(TIMEOUT_MSEC)
                .setSocketTimeout(TIMEOUT_MSEC).build();
    }

}

2.微信小程序

介绍

以个人形式注册不能开放支付功能的
在这里插入图片描述
在这里插入图片描述

准备工作

在这里插入图片描述

注册小程序和完善对应信息

注册微信小程序
注册选择个人
然后你把小程序信息和分类项目填好就OK了
在这里插入图片描述
然后点击开发管理的开发设置选项

在这里插入图片描述
获取对应的id和秘钥即可

下载开发者工具

在这里插入图片描述
下载完就是一个exe程序
直接一直点下一步,选个安装路径就行
登录进后的画面
在这里插入图片描述
新建项目
小程序AppID用自己的!
在这里插入图片描述
点击确定就会生成对应的模拟器和开发工具
主要就是三个组件
编辑器,调试器和模拟器
在这里插入图片描述
在详情里面的本地设置
把这个勾选上,如果不勾选,请求是发送不出去的

在这里插入图片描述

入门案例

小程序开发其实本质上还是前端开发
主要用到的语言就是js
编码风格类似vue
在这里插入图片描述
page对应小程序页面,一个页面下又包含四个文件
在这里插入图片描述
app.js
pages里面把所有的page包含即可
titletext对应关系图里也标识了
在这里插入图片描述
index.wxml对应关系
也可以动态获取index.js的值进行动态展示
在这里插入图片描述
在index.js 定义变量和方法
在index.wxml进变量操作和方法绑定等
在这里插入图片描述
接下来也有点逆天
感觉对后端学习用处不大
主要是微信的一些内部方法

注意一下微信登陆那个方法,会返回一个授权码
然后回用这个码调用微信的接口就能拿到用户的唯一标识OPENId
一个授权码只能使用一次,每次登录授权码不同

在这里插入图片描述

发送请求-wx.request
在这里插入图片描述
发布小程序
上传
在这里插入图片描述
然后再版本管理看
提交审核
审核完成才可以发布
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/932224.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leetcode-每日一题【剑指 Offer 37. 序列化二叉树】

题目 请实现两个函数&#xff0c;分别用来序列化和反序列化二叉树。 你需要设计一个算法来实现二叉树的序列化与反序列化。这里不限定你的序列 / 反序列化算法执行逻辑&#xff0c;你只需要保证一个二叉树可以被序列化为一个字符串并且将这个字符串反序列化为原始的树结构。 …

抖店必须绑定抖音账号吗?聊6个抖店不为人知的小细节,别外传

我是王路飞。 现在做抖店&#xff0c;比如绑定一个抖音账号吗&#xff1f; 了解过抖店的朋友都知道&#xff0c;之前开通抖音小店&#xff0c;是需要绑定一个抖音号作为店铺的官方账号的。 而且属于硬性规定&#xff0c;必须要绑定&#xff0c;否则店铺无法正常运营。 但是…

Adams软件安装包分享(附安装教程)

目录 一、软件简介 二、软件下载 一、软件简介 Adams是一款由Mechanical Dynamics Inc&#xff08;MDI&#xff09;开发的有限元分析软件&#xff0c;主要用于模拟机械系统的运动和动力学行为。它广泛应用于汽车、航空航天、机械、电子等多个领域。以下是对Adams软件的详细介…

利用lammps模拟蓝宝石在水润滑环境下的抛光

一 问题描述 蓝宝石&#xff08;Al2O3&#xff09;由于其独特的晶体结构&#xff0c;优异的物理化学特性&#xff0c;被广泛应用于航空航天等领域。高精尖的应用领域要求蓝宝石具有纳米级的表面粗糙度以及严格可控的亚表面缺陷。影响超精密加工最终性能的因素主要集中在工件表…

Linux学习之Ubuntu 20使用systemd管理OpenResty服务

sudo cat /etc/issue可以看到操作系统的版本是Ubuntu 20.04.4 LTS&#xff0c;sudo lsb_release -r可以看到版本是20.04&#xff0c;sudo uname -r可以看到内核版本是5.5.19&#xff0c;sudo make -v可以看到版本是GNU Make 4.2.1。 需要先参考我的博客《Linux学习之Ubuntu 2…

Ngnix配置Minio动态代理:访问桶列表报错解决方案:

报错信息&#xff1a; Objects List unavailable. Please review your WebSockets configuration and try again nginx配置如下: [rootwww conf]# cat nginx.conf #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #erro…

朋友圈如何快速转发?怎么自动定时转发朋友圈?

微信朋友圈是微信的一个功能&#xff0c;可以让用户分享生活动态、照片、视频等&#xff0c;也可以看到好友分享的动态。朋友圈的分享可以增加社交互动&#xff0c;可以加强朋友之间的联系&#xff0c;分享彼此的生活和心情。 转发朋友圈的作用也是非常明显的。当用户看到有趣的…

ChatGPT安全吗?一文解析聊天机器人数据隐私和安全问题

ChatGPT大体上很安全&#xff0c;但你仍应谨慎对待。 无论是起草论文还是研究工作中的问题&#xff0c;ChatGPT已经成为处理任何文字任务的上佳工具。 的确&#xff0c;聊天机器人快速处理大量数据的能力使其极具价值&#xff0c;但是&#xff0c;这种便利是否意味着要付出代…

Zebec在Nautilus Chain 开启质押,ZBC 将极致通缩

前不久&#xff0c;Zebec Protocol 旗下的模块化公链 Nautilus Chain 上线了主网&#xff0c;模块化 Layer3 体系正式开启。在 Nautilus Chain 主网上线的初期阶段&#xff0c;将以 ZBC 通证作为链上主要的职能通证&#xff0c;用于 Gas 消耗、治理等诸多方面。据悉&#xff0c…

机器学习笔记:KD树

1 引入原因 K近邻算法需要在整个数据集中搜索和测试数据x最近的k个点&#xff0c;如果一一计算&#xff0c;然后再排序&#xff0c;开销过大 引入KD树的作用就是对KNN搜索和排序的耗时进行改进 2 KD树 2.1 主体思路 以空间换时间&#xff0c;利用训练样本集中的样本点&…

CUDA小白 - NPP(1) - NppCore

cuda小白 原文链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 先从最基本的开始&#xff0…

不能从真实机向VMware里直接拖文件怎么办

如果真实机的文件不能拖动到虚拟机里面有两种解决办法&#xff1a; 1.重启虚拟机 2.更新自己的vmtools工具&#xff0c;因为这个操作是由他来完成的。 在虚拟机-------更新vmtools里面

【Linux】socket 编程基础

文章目录 &#x1f4d5; 网络间的通信&#x1f4d5; socket 是什么1. socket 套接字2. 套接字描述符3. 基本的 socket 接口函数3.1 头文件3.2 socket() 函数3.3 bind() 函数struct sockaddr主机序列与网络序列 3.4 listen() 函数3.5 connect() 函数3.6 accept() 函数IP 地址风格…

死锁相关概念

死锁的概念 在并发环境下&#xff0c;各进程因竞争资源而造成的一种互相等待对方手里的资源&#xff0c;导致各进程都阻塞&#xff0c;都无法向前推进的现象&#xff0c;就是“死锁”。&#xff08;死锁进程一定处于阻塞态&#xff09; 死锁 各进程互相等待对方手里的资源&a…

SLAM十四讲学习笔记 第二期:部分课后实践代码

持续更新.... 前期准备第二讲实验一&#xff1a;简单输出 第五讲任务一&#xff1a;imageBasics&#xff08;Ubuntu配置opencv&#xff09;任务二&#xff1a;双目匹配点云&#xff08;Ubuntu配置pangolin&#xff09;检验部分我认为可以加深对CMake的理解 任务三&#xff1a;r…

vite打包部署问题总结

目录 Vue3 vite&#xff1a;is a JavaScript file. Did you mean to enable the allowJs option? 使用vscode搭建 vue3 vite 项目&#xff0c; 部署到服务器 js css文件路径访问不到的问题 Vue3 vite&#xff1a;is a JavaScript file. Did you mean to enable the allowJs …

thinkphp安装workman

需要加版本&#xff0c;版本太高了不行 composer require topthink/think-worker1.0.*

字符替换“6666”

将给定字符串中的连续“6”替换&#xff0c;个数大于3小于10替换成“9”&#xff0c;大于9替换成“27”。 (本笔记适合初通Python&#xff0c;熟悉六大基本数据类型(str字符串、int整型、float浮点型、list列表、tuple元组、set集合、dict字典)常规应用的 coder 翻阅) 【学习的…

Prometheus介绍

Prometheus介绍 1. Prometheus 简介2. Prometheus 的特点3. Prometheus 的架构4. Prometheus 的基本组件5. Prometheus工作流程6. Prometheus和Zabbix对比7. Prometheus的部署模式7.1 基本高可用模式7.2 基本高可用远程存储7.3 基本HA 远程存储 联邦集群方案 8. Prometheus能…

探索图结构:从基础到算法应用

文章目录 理解图的基本概念学习图的遍历算法学习最短路径算法案例分析&#xff1a;使用 Dijkstra 算法找出最短路径结论 &#x1f389;欢迎来到数据结构学习专栏~探索图结构&#xff1a;从基础到算法应用 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1f379;✨博客主页&#xff1a;I…