服务号实现第三方应用帐号绑定实现消息推送

微信公众号又分为订阅号(个人、机构),服务号。两者的区别在于权限的开放和一些功能的区别。附上链接:订阅号服务号权限差异

一、基本配置

引用官方的说明:

接入微信公众平台开发,开发者需要按照如下步骤完成:
1、填写服务器配置
2、验证服务器地址的有效性
3、依据接口文档实现业务逻辑

基本配置

登录服务号后(可添加多个运营者),点击 设置与开发-》基本配置

获取appId,appSecret,其中appSecret只能初次获取可查看,如果忘记只能重置。

配置第三方服务器

基本配置下方可启用第三方服务配置。
在这里插入图片描述
1)服务器部署
微信第三方接入会占用80,443端口。
开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:
在这里插入图片描述
开发者通过检验signature对请求进行校验。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。校验过程官网写的很详细,在此省略。自定义接口如下:

 @RequestMapping("wxConfig")
    @ResponseBody
    public String verifyConfig(HttpServletRequest request, HttpServletResponse response){
        String echostr = request.getParameter("echostr");
        //校验过程省略,自己开发可不用校验,直接返回echostr校验通过即可。
        if(StringUtils.isNotBlank(echostr)){
            return echostr;
        }
        return null;
    }

2)将项目部署到服务器,将部署的服务器接口地址填写到服务器URL:
在这里插入图片描述
3)点击提交后,微信平台会发送校验信息到服务器,如果校验成功则会保存成功。至此,服务器接入成功。

用户消息说明

1)配置好以上接口后,用户发送的消息都会推送到该接口。只是注意的一点是:消息需要以流的方式获取,消息且为XML格式。获取方式如下:

		ServletInputStream inputStream = request.getInputStream();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
        StringBuffer msg = new StringBuffer();
        String str = "";
        while((str = reader.readLine()) != null){
            msg.append(str);
        }

2)消息类型包含用户发送的普通消息,包含图片,文字,视频等,具体参照:被动用户消息说明
除以上内容外,接口还会接收到事件消息(event),比如:订阅,取消订阅消息,扫码信息,自定义菜单点击事件等。参照:事件消息说明
其中订阅消息xml格式如下:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[FromUser]]></FromUserName> //用户openId
  <CreateTime>123456789</CreateTime>
  <MsgType><![CDATA[event]]></MsgType>//消息类型
  <Event><![CDATA[subscribe]]></Event>//事件描述
</xml>

事件绑定

我们可以根据用户的subscribe关注事件关键字来进行事件绑定。

			case "event":{
                if("subscribe".equals(msg.getString("Event"))){
                    Boolean aBoolean = bindUser(openid);
                    if(aBoolean){
                        return "用户已绑定";
                    } else {
                        return "用户未绑定";
                    }
                }
                if("SCAN".equals(msg.getString("Event"))){
                    wxLogin(openid);
                    return MsgModel.normalMsg(openid,"gh_fbb5873feedc", MsgConst.MSG_INTRODUCE);
                }
            }
在关注者与公众号产生消息交互后,公众号可获得关注者的OpenID(加密后的微信号,每个用户对每个公众号的OpenID是唯一的。
对于不同公众号,同一用户的openid不同)。公众号可通过本接口来根据OpenID获取用户基本信息,包括昵称、头像、性别、所在城市、语言和关注时间。

依据以上所说,我们可以将openId与系统账户绑定,来发送一些定制化消息,如:代办事项、消息通知,公告等信息的自主推送。
1)用户关注后,我们会获取到用户的openId,我们可以通过被动消息发送给用户(订阅号也有权限)。
2)用户关注后,如果查询用户未绑定账户,可以推送图文消息,让用户点击链接进行绑定。
在这里插入图片描述
3)图文消息格式如下:

<xml>
  <ToUserName><![CDATA[toUser]]></ToUserName>
  <FromUserName><![CDATA[fromUser]]></FromUserName>
  <CreateTime>12345678</CreateTime>
  <MsgType><![CDATA[news]]></MsgType>
  <ArticleCount>1</ArticleCount>
  <Articles>
    <item>
      <Title><![CDATA[title1]]></Title>
      <Description><![CDATA[description1]]></Description>
      <PicUrl><![CDATA[picurl]]></PicUrl> //图片展示url
      <Url><![CDATA[url]]></Url> //点击跳转URL
    </item>
  </Articles>
</xml>

我们可以根据官网提供的图文消息模版发送点击链接。picurl可选择上传素材文件链接。
点击跳转的链接为我们写好的绑定页面,如:http://ip:port/login.html?openId=123,将用户的openId拼接到url后面,后台进行获取绑定。
如果为服务号,可自主通过公众号发送消息给用户。

模版消息说明

公众号接收到的比如:消费提醒,账单提醒即为模版消息。

模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。
不支持广告等营销类消息以及其它所有可能对用户造成骚扰的消息。

模版消息官网提供了丰富的模版,一个公众号可绑定两个行业,可选择这两个行业中的适用模版进行消息推送。
模版消息的日发送上线为100000条。
官网对于群发接口的说明:

在公众平台网站上,为订阅号提供了每天一条的群发权限,为服务号提供每月(自然月)4条的群发权限。而对于某些具备开发能力的公众号运营者,可以通过高级群发接口,实现更灵活的群发能力。

请注意:

对于认证订阅号,群发接口每天可成功调用1次,此次群发可选择发送给全部用户或某个标签;
对于认证服务号虽然开发者使用高级群发接口的每日调用限制为100次,但是用户每月只能接收4条,无论在公众平台网站上,还是使用接口群发,用户每月只能接收4条群发消息,多于4条的群发将对该用户发送失败;
开发者可以使用预览接口校对消息样式和排版,通过预览接口可发送编辑好的消息给指定用户校验效果;
群发过程中,微信后台会自动进行图文消息原创校验,请提前设置好相关参数(send_ignore等);
开发者可以主动设置 clientmsgid 来避免重复推送。
群发接口每分钟限制请求60次,超过限制的请求会被拒绝。
图文消息正文中插入自己帐号和其他公众号已群发文章链接的能力。
对于已开启API群发保护的账号,群发全部用户时需要等待管理员进行确认,如管理员拒绝或30分钟内没有确认,该次群发失败。用户可通过“设置-安全中心-风险操作保护”中关闭API群发保护功能。

所以当不满足我们的发送需求的时候,发送模版消息也不失为一种不错的选择。
通过调用获取用户列表接口:

http请求方式: GET(请使用https协议)
https://api.weixin.qq.com/cgi-bin/user/get?access_token=ACCESS_TOKEN&next_openid=NEXT_OPENID

可获取到每个关注用户的openId,可以以循环发送的方式实现群发的效果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值