鼎立不倒 發表於 2022-9-23 16:07:00

微信公众号(测试号)开发

<h1>总体概述:</h1>
<p>1.开发使用后台已经封装好的第三方sdk微信开发包开发,需要进行必要的jar引入,以及特定的spring配置及监控类开发,可拷贝git源代码</p>
<p>git链接:https://github.com/binarywang/weixin-java-mp-demo</p>
<pre><code class="language-XML">&lt;dependency&gt;
   &lt;groupId&gt;com.github.binarywang&lt;/groupId&gt;
   &lt;artifactId&gt;weixin-java-mp&lt;/artifactId&gt;
   &lt;version&gt;3.6.0&lt;/version&gt;
&lt;/dependency&gt;</code></pre>
<p>测试号申请网址:微信公众平台</p>
<h2>测试号配置:</h2>
<p><strong>接口配置信息</strong>:</p>
<p><strong>url:</strong>第一次授权公众号为开发者模式的时候,微信服务器会调用这个地址去校验服务器是否存在且真实</p>
<p>url前半部分是开发服务器域名(本机开发一般是内网,微信服务器访问不到,需要搞一个内网穿透工具,将本机127.0.0.1映射到外网去,微信访问外网ip,外网ip再映射到本机地址上)</p>
<p><strong>JS接口安全域名:</strong></p>
<p>这个是我们本地调用微信接口的时候,再此将服务器域名告诉给微信,让他知道我们的域名是合法 的,才能调用微信开放接口(也是使用内网穿透生成的域名,此处要删去https:开头)</p>
<p><img src="https://img-blog.csdnimg.cn/4dddd61c24a74aaa81d31f11a7d0169e.png"></p>
<p></p>
<h3>checkSignature接口实例(可查看文档,翻开该接口规则)</h3>
<pre><code class="language-java">    @RequestMapping(value = "/wx/checkSignature")
    @ResponseBody
    public String checkSignature(String signature, String timestamp, String nonce, String echostr) {
      if (StringUtils.isAnyBlank(signature, timestamp, nonce, echostr)) {
            throw new IllegalArgumentException("请求参数非法,请核实!");
      }

      if (wxService.checkSignature(timestamp, nonce, signature)) {
            return echostr;
      }

      return "非法请求";
    }</code></pre>
<p><img src="https://img-blog.csdnimg.cn/b760f837f92d4d1583f16720d7ef7364.png"></p>
<p></p>
<p>至此可在代码上执行添加一个按钮的操作(公众号就会出现一个新增的按钮),点击按钮之后,公众号就会自动跳转到自己设置的界面,并携带一个code参数,可根据这个code去获得用户openId(sdk有对应方法,可查看对应文档)</p>
<h2>公众号发送微信号推送方法封装</h2>
<pre><code class="language-java">/**
   * 公众号发送微信号推送
   *
   * @param userId   本地用户ID
   * @param templateId 微信推送模板ID
   * @param url      推送点击详情,跳转url
   * @param params   微信参数对象列表 模板通过{{key.DATA}} 插入占位符,key就是new WxMpTemplateData(key)
   * @return
   */
    public ResultMsg sendWxMsg(String userId, String templateId, String url, List&lt;MsgParamModel&gt; params) {
      //将本地userId转换为微信用户的openId
      WxUserModel wxUser = wxUserService.getByUserId(userId);
      if (BeanUtil.isEmpty(wxUser)) {
            String userName = tPubUserMapper.getUserNameByUserId(userId);
            return new ResultMsg(false, null, "用户【" + userName + "】未关注公众号,推送失败!");
      }

      WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder()
                .toUser(wxUser.getOpen_id())
                .templateId(templateId)
                .url(StringUtils.isNotEmpty(url) ? url : null)
                .build();

      /**
         * 插入模板占位符参数
         */
      for (MsgParamModel param : params) {
            templateMessage = templateMessage.addData(new WxMpTemplateData(param.getName(), param.getValue(), param.getColor()));
      }

      String msgId = null;
      try {
            // 发送模板消息
            msgId = wxService.getTemplateMsgService().sendTemplateMsg(templateMessage);
      } catch (WxErrorException e) {
            e.printStackTrace();
      }
      logger.info("用户【" + wxUser.getUser_id() + "】推送微信:" + msgId != null ? "推送成功" : "推送失败");

      return new ResultMsg(msgId != null, "", msgId != null ? "推送成功" : "推送失败");
    }</code></pre>
<p>为占位符封装对象</p>
<pre><code class="language-java">/**
* 微信消息推送参数实体类
*
* @author lirong
* @date 2022-10-11 15:41
**/
@Data
@AllArgsConstructor
public class MsgParamModel {

    /**
   * 占位符key
   */
    private String name;

    /**
   * 占位符value
   */
    private String value;

    /**
   * 占位符文字输出颜色 为空为黑色
   */
    private String color;

}</code></pre>
<p></p><br><br>
来源:https://www.cnblogs.com/rongxiansheng/p/17554178.html
頁: [1]
查看完整版本: 微信公众号(测试号)开发