一个帮助现实中打牌的人记分的微信小程序,需要每局记分。问题:ab同时在小程序里,a发送结算通知,b能收到;a在小程序,b不在,a发送结算通知,b再进入小程序接收不到,需要a再发送。能否做到a发送了,b即使不在小程序,只要登录小程序就能接受到?或者有什么其他方法可以解决确认问题?
应该要把信息存起来或者直接利用第三方sdk等来处理吧
如果要做实时接收的,可以用微信的消息推送模板
如果说只需打开就能接收就相对简单点,a发送完把记录存在服务器,并标注未读状态,b打开时自动发送请求就可以了
一个帮助现实中打牌的人记分的微信小程序,需要每局记分。
问题:ab同时在小程序里,a发送结算通知,b能收到;a在小程序,b不在,a发送结算通知,b再进入小程序接收不到,需要a再发送。能否做到a发送了,b即使不在小程序,只要登录小程序就能接受到?或者有什么其他方法可以解决确认问题?
ab同时在小程序里,a发送,b能收到,
想要实现a发送了,b即使不在小程序,只要登录小程序就能接受到:
可以考虑以下方案:
当用户操作引发事件推送时,微信服务器会将消息以及数据包发送到配置的url,根据a用户和b用户对不同的消息类型进行相应处理
项目中的需求是当用户b打开后,自动回复a发送的结算通知。
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(用户b)是否已经接受消息
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);
}
}
如有帮助,请采纳,十分感谢!
朋友可以试试这样写
Id:
receiveid: %%注释:把a发送的结算通知存在服务端
sendid:
message:
readed:%%注释:可以存在Redis或数据库里
等b再进入小程序的时候,
然后让服务端把结算通知查出来推送给b
建议博主在项目里面加一个消息中间件吧,例如:rabbitMQ的消息推送功能,或者微信小程序的推送功能,参考这几个:https://www.php.cn/xiaochengxu-460483.html http://www.mpgcw.com/7354.html(建议开通微信小程序权限 试试这个)
把a做的操作用接口记录在后台,等b登陆的时候进行请求接口,查看是否有最新消息
数据存在表中,用户每次登录,拉取一下用户未处理消息展示给用户