微信小程序如何接收退出之前的信息?

一个帮助现实中打牌的人记分的微信小程序,需要每局记分。问题: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);
    }
}


  • 把a发送的结算通知存在服务端
  • 可以存在Redis或数据库里
  • 设置一个有效期,过了多长时间就不推送了
  • 等b进入小程序的时候,服务端把结算通知查出来推给b即可

如有帮助,请采纳,十分感谢!

朋友可以试试这样写
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登陆的时候进行请求接口,查看是否有最新消息

数据存在表中,用户每次登录,拉取一下用户未处理消息展示给用户