搜索
简帛阁>技术文章>小程序消息推送

小程序消息推送

小程序消息推送

文章目录

  • 前言
  • 使用步骤
    • 1.开通小程序消息推送功能
    • 2.接收消息推送并自动应答
  • 总结

前言

最近公司一个项目需要实现小程序客服自动为用户发送企业微信二维码功能
主要用到了小程序的消息推送功能
本文大概记录一下整个开通以及实现流程

使用步骤

1.开通小程序消息推送功能

进入到小程序公众平台–>开发–>开发管理–>开发设置–>消息推送
开启消息推送功能后会进入到消息推送配置页面。

配置好服务器地址,token,encodingAESKey后提交,这时候配置的url会收到一个验证请求,需要返回响应的数据才能保存成功,具体处理方法见代码

public class MsgController extends BaseController{<!-- -->

    @Autowired
    private WxConfig wxConfig;

    @RequestMapping(value = "/reply",method = {<!-- -->RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    public String reply(@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce, @RequestParam("echostr") String echostr) throws Exception {<!-- -->
        MpSignService signService=new MpSignService(signature,wxConfig.getMpMsgReplyToken(),nonce,timestamp);
        if(signService.validate()){<!-- -->
           return echostr;
        }
        return null;
    }
}

public class MpSignService {<!-- -->

    private String signature;

    private String token;

    private String nonce;

    private String timestamp;

    public boolean validate() throws NoSuchAlgorithmException {<!-- -->
        List<String> list=new ArrayList<>();
        list.add(nonce);
        list.add(timestamp);
        list.add(token);
        Collections.sort(list);
        StringBuffer sb=new StringBuffer();
        for(String s:list){<!-- -->
            sb.append(s);
        }
        return this.sha1(sb.toString()).equals(this.signature);
    }

    private String sha1(String data) throws NoSuchAlgorithmException {<!-- -->
        MessageDigest md = MessageDigest.getInstance("SHA1");
        md.update(data.getBytes());
        StringBuilder buf = new StringBuilder();
        byte[] bits = md.digest();
        for (int bit : bits) {<!-- -->
            int a = bit;
            if (a < 0) a += 256;
            if (a < 16) buf.append("0");
            buf.append(Integer.toHexString(a));
        }
        return buf.toString();
    }
}

验证成功后消息推送服务就已经配置成功

2.接收消息推送并自动应答

当用户操作引发事件推送时,微信服务器会将消息以及数据包发送到配置的url,我们需要根据自身业务逻辑对不同的消息类型进行相应处理
项目中的需求是当用户打开客服聊天页面后,自动回复企业微信的二维码图片
具体代码如下

public class MsgController extends BaseController{<!-- -->

    @Autowired
    private WxConfig wxConfig;

    @Autowired
    private MpService mpService;

    @RequestMapping(value = "/reply",method = {<!-- -->RequestMethod.GET, RequestMethod.POST})
    @ResponseBody
    public String reply(@RequestParam("signature") String signature, @RequestParam("timestamp") String timestamp, @RequestParam("nonce") String nonce, @RequestBody Map<String,String> param) throws Exception {<!-- -->
        mpService.msgReply(signature,timestamp,nonce,param,wxConfig);
        return "success";
    }
}

public class MpService {<!-- -->

	@Autowired
	private AccessTokenUtils accessTokenUtils;

	@Resource(name = "redisTemplateBusiness")
	private RedisTemplate redisTemplate;

	public void msgReply(String signature,String timestamp,String nonce, Map<String,String> param,WxConfig wxConfig) throws Exception {<!-- -->
		MpSignService signService=new MpSignService(signature,wxConfig.getMpMsgReplyToken(),nonce,timestamp);
		if(!signService.validate()){<!-- -->
			return;
		}
		log.info(JsonUtil.toJson(param));
		String fromUserName=param.get("FromUserName");
		String msgType=param.get("MsgType");
		String event=param.get("event");
		if(msgType.equals("event")&& StringUtils.isNotEmpty(event)&&event.equals("user_enter_tempsession"))
		{<!-- -->
			//查询openid是否已经添加过客服
			if(isNewUser(fromUserName)) {<!-- -->
				String token = accessTokenUtils.getToken(wxConfig.getMpAppId(), wxConfig.getMpAppSecret());
				this.sendQywxImage(fromUserName, token);
			}
		}
	}

	private void sendQywxImage(String openId,String accessToken) throws Exception {<!-- -->
		String url=String.format(PushConstants.WxUrl.MP_MSG_SEND_MSG_URL,accessToken);
		Map<String,Object> map = new HashMap();
		map.put("touser",openId);
		map.put("msgtype","image");
		Map<String,String> m=new HashMap();
		m.put("media_id",(String)redisTemplate.opsForValue().get(CachePrefix.QYWX_QRCODE));
		map.put("image",m);
		String result=HTTPUtils.httpPost(url,map);
		log.info(result);
	}
}

如果要回复其他内容,可以通过不同msgtype来指定,具体配置内容见官方文档
https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/customer-message/customerServiceMessage.send.html

总结

本文主要实现了配置消息推送的接收服务器,以及实现用户的打开客服页面自动回复企业微信二维码的功能,下篇文章会讲到用户通过二维码添加客服企业微信后绑定到小程序用户。

程序消息推送文章目录前言使用步骤1开通程序消息推送功能2接收消息推送并自动应答总结前言最近公司一个项目需要实现程序客服自动为用户发送企业微信二维码功能主要用到了程序消息推送功能本文大概记录
最近公司在搞微信小程序:抽奖程序,打卡程序;自己作为项目的负责人随时跟踪进度,程序的前端参与写了一点点2,3个简单的页面,后台系统的搭建和开发我来搞等,感觉微信小程序的前端页面等很想vue,标
用步骤1、获取access_token2、调用订阅消息下发接口获取access_token这边就不说了,直接调用接口可以获得,这边主要是实现下发订阅消息。因为完整的可用的业务代码,获取access_
关于程序订阅消息推送详细过程背景1、订阅消息分类:1、一次性订阅2、长期订阅2、一次性订阅:就是点击或者支付完成后、会立刻拉起授权模板弹窗、有用户需要授权的选项。3、长期订阅:用户第一次授权会拉起
当订单状态变更时,程序如何实现消息推送来通知到用户呢。微信开放了一个叫模板消息的功能。https://developersweixinqqcom/miniprogram/dev/api/notic
信的东西,第一次玩,记录下全过程,略过申请程序步骤1:配置类目,建议在申请程序的时候多选几个类目,类目越多,可选的消息模版越多,修改地址(传送门路径:设置基本设置服务类目)2:设置推送消息模版地
第一步:官网下载对应版本的cryptoDemophp下载地址:https://wximggtimgcom/shake_tv/mpwiki/cryptoDemozipjson第二步:建立检查文件wxch
先,我们先了解下微信上程序客服消息怎么使用?以及消息推送的规则!再教大家更巧妙地使用程序客服消息,更智能的处理消息,提高客服的工作效率。一、怎么使用?程序自公开发布起就有消息推送功能,微信的克
段时间剁手了PS4,在浏览商店时,发现官方商店真的不好用,主要是网络原因,次要是页面设计。所以就想自己做一个游戏查询的程序,可以关注某个游戏,然后在这个游戏打折的时候发送通知给用户。最后发现有个很
感觉自己把所有的坑踩了一遍_||1、40003,不合法的OpenID。不合法造成的原因:确认程序Appid、secret、公众号Appid和OpenID是不是一套。确认是一套无误后,确认在传Ope