首页 > 其他分享 >生成openId,获取凭据

生成openId,获取凭据

时间:2023-05-05 10:46:50浏览次数:47  
标签:openId code String url 凭据 获取 secret append

问题及解决

在调用凭证access_token的时候出现的错误

 

当小程序出错出现代码40125,并显示:

errcode: 40125, errmsg: "invalid appSecret"

解决办法:

  1. 在mp.weixin.qq.com 里面重置你的app secret

  2. 或查看你的appid 是否没有对应上;

  3. 或查看你的url拼接是否出现空格,换行等等;使用trim()函数;

  4. 若你的小程序里面 project.config.json 里的appId 和你管理页面新增的appid不一致时, 将该小程序在编辑工具里面删除;(不会删除源代码),再重新导入;

 

学习重点及理解

生成openId

生成openId底层的代码,其实和微信公众平台上的是一样的,调用的也是这个接口

 /**
    *微信的生成openId
    * @param code
    * @return
    */
   @GetMapping("/login")
   public AjaxResult OpenId(String code){

       StringBuilder url = new StringBuilder("https://api.weixin.qq.com/sns/jscode2session?");
       url.append("appid=").append(appId);//appid设置
       url.append("&secret=").append(secret);//secret设置
       url.append("&js_code=").append(code);//code设置
       url.append("&grant_type=authorization_code");
       JSONObject res = null;
       try {
           res = JSONObject.parseObject(HttpUtil.get(url.toString()));    //构建一个GET请求
      } catch (Exception e) {
           e.printStackTrace();
      }
       //将获取的openId输出
       return AjaxResult.success(res);
  }

这就像微信公众上的接口是一样的,只是在用后台中用代码写出,将其中的一些参数写到其中罢了

 

获取凭据

/**
*获取接口调用凭据
* @return
*/
@GetMapping("/accessToken")
public AjaxResult getAccessToken(){

   StringBuilder url = new StringBuilder("https://api.weixin.qq.com/cgi-bin/token?");
   url.append("appid=").append(appId);//appid设置
   url.append("&secret=").append(secret);//secret设置
   url.append("&grant_type=client_credential");
   JSONObject res = null;
   try {
       res = JSONObject.parseObject(HttpUtil.get(url.toString()));    //构建一个GET请求
  } catch (Exception e) {
       e.printStackTrace();
  }

   return AjaxResult.success(res);
}

消息订阅

消息订阅这个接口是比较麻烦,其中的参数是要很多,其中包括了access_token的参数,这个参数要获取。模板的的类型要对应的上,不然会报错,说模型的id和和你要发送的消息的不一致的。


@GetMapping("/sendMessageWx")
@ApiOperation("订阅消息推送测试")
public static void SendMessage(String token, String openId, SendMessageDto sendMessageDto) {



   List<TemplateParam> templateParams = new ArrayList<>();
   //当前进度
   templateParams.add(TemplateParam.builder().key("thing5").value(sendMessageDto.getName()).build());
   //事项编码
   templateParams.add(TemplateParam.builder().key("thing2").value(sendMessageDto.getWarningName()).build());
   //事项名称
   templateParams.add(TemplateParam.builder().key("thing4").value(sendMessageDto.getWarningRemarks()).build());

   Template template = Template.builder()
          .template_id("RHyBM3s1xYPd97VsTYdPX7O20A6Wl4thsjC7WrGtZ3w")//模板 ID
          .touser(openId)//用户 openid
          .data(templateParams) //模板参数
          .page("pages/user/myDocument/index1/index1")//点击消息跳转页面
          .build();

   //请求地址
   String requestUrl = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token="+token;

   log.info("推送的模板参数信息:"+ template.toJSON());

   String jsonResult = null;
   jsonResult = cn.hutool.http.HttpUtil.post(requestUrl,template.toJSON());

   if (jsonResult != null) {
       JSONObject OpenidJSONO = JSONObject.parseObject(jsonResult);
       System.out.println(jsonResult);
       String errorCode = OpenidJSONO.get("errcode").toString();
       String errorMessage = OpenidJSONO.get("errmsg").toString();
       if ("0".equals(errorCode)) {
           log.info("推送订阅消息: Send Success");
      } else {
           log.info("订阅消息发送失败:"+ errorCode+errorMessage);
      }
  } else {
       log.info("订阅消息发送失败");
  }
}

 

 

扩展学习

面试题

  • 一、什么是 spring cloud?

    • spring cloud 是一系列框架的有序集合。它利用 spring boot 的开发便利性巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等,都可以用 spring boot 的开发风格做到一键启动和部署。

  • 二、spring cloud 断路器的作用是什么?

    • 在分布式架构中,断路器模式的作用也是类似的,当某个服务单元发生故障(类似用电器发生短路)之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

  • 三、spring cloud 的核心组件有哪些?

    • Eureka:服务注册于发现。

    • Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。

    • Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。

    • Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。

    • Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。

 

总结

今天的学习状态是不错的,也学到了很多的东西,用代码的方式将微信公众接口的执行效果是一样的,这个接口是要改,是因为前端小程序不能直接调用他们自带的接口,所以我们要在本地将其接口敲出来。

 

标签:openId,code,String,url,凭据,获取,secret,append
From: https://www.cnblogs.com/ikunba/p/17373435.html

相关文章

  • obsidian 日记本倒序汇总 获取标题显示 插件dataviewjs list
    obsidian日记本倒序汇总获取标题显示插件dataviewjslist//dataviewjsfunctionremoveDuplicate(arr){returnarr.filter((item,index)=>{returnarr.indexOf(item)===index})}constlist=dv.pages('"02日记本"').file.lists.map(item=>{ retu......
  • MFC-CListCtrl-LVM_GETITEMTEXT获取项信息
     LVITEMlvi;TCHARch[256];lvi.pszText=ch;lvi.cchTextMax=256;lvi.mask=LVIF_TEXT;::SendMessage(hWnd4,LVM_GETITEMTEXT,(WPARAM)0,(LPARAM)&lvi);//获取项信息/*参数3:WPARAM列表视图项的索引参数4:LPARAM指向LVIT......
  • 实例 042 获取一维数组最小值
      你可以使用以下代码来获取一维数组中的最小值:int[]arr={5,3,9,1,7};intmin=arr[0];for(inti=1;i<arr.length;i++){if(arr[i]<min){min=arr[i];}}System.out.println("最小值为:"+min);  在上面的代码中,我们首先初始......
  • C++获取阿里巴巴1688中国站店铺详情 API 接口返回值示例说明
    ​C++(cplusplus)是一种计算机高级程序设计语言,由C语言扩展升级而产生,最早于1979年由本贾尼·斯特劳斯特卢普在AT&T贝尔工作室研发。C++既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。......
  • MFC-CListCtrl-SendMessage获取项目总数
     intcount=(int)::SendMessage(hWnd4,LVM_GETITEMCOUNT,(WPARAM)0,(LPARAM)0);//获取项目总数/*参数4和参数4必须为0返回值:返回项目总数*/str.Format(_T("项目总数=%d\r\n"),count);OutputDebugString(str);    ......
  • MFC-CListCtrl-GetSelectedCount获取被选中项目的总数
     UINTn=mylist4.GetSelectedCount();//获取被选中项目的总数str.Format(_T("n=%d\r\n"),n);OutputDebugString(str);    ......
  • MFC-CListCtrl-GetColumn获取列中某项信息
     LVCOLUMNlvcol;TCHARstr[256];lvcol.mask=LVCF_TEXT;lvcol.pszText=str;lvcol.cchTextMax=256;BOOLb7=mylist4.GetColumn(1,&lvcol);//获取列中某项信息//参数1:列号//【不设置iSubItem,就是列头信息;设置......
  • C++获取微妙级时间戳
    使用C++11提供的std::chrono库#include<chrono>#include<ctime>#include<iomanip>#include<string>std::stringgetTime(){//获取当前时间点autonow=std::chrono::system_clock::now();//将时间长度转换为微秒数autonow_us=std::chrono......
  • 直播app开发搭建,图形和短信验证码的自动识别获取
    直播app开发搭建,图形和短信验证码的自动识别获取selenuim操作 driver=webdriver.Chrome()driver.get("https://locvps.wenjingnetwork.com/page.aspx?c=reg")driver.implicitly_wait(10)#设置超时时间driver.find_element_by_name("uname").send_keys()driver.find_element_by......
  • 解决上传md文件时出现的“<Fault 401: '请配置正确的用户名与访问令牌(access token),
    使用的工具:pycnbolg下载地址:https://github.com/dongfanger/pycnblog具体操作按这位大神的博客:如何在博客园上传markdown文件-NotYourferry-博客园(cnblogs.com)出现报错如图:偶然看到这两位的评论:于是我将config.yaml中的password改成了我的令牌,就上传成功了。......