有搞微信开发的吗?请教一个问题

2018-08-18 17:50:26 +08:00
 waffur
需求:
根据用户的两次回复情况作出特定的回复。例如用户两次分别发送信息“ 1 ”和“ 2 ”,然后服务器求和返回“ 3 ”。
问题:
如何储存第一次的用户发送过来的信息?
看了不少零零散散的教程,有提到说用缓存。因自己是用 Flask 为主,于是参考了第三方库 flask-cache 和 redis。但还是有点模糊,不明白它们在其中分别作为什么角色呢。
有没有前辈能提供一点思路,小弟不胜感激。
3680 次点击
所在节点    Python
20 条回复
shoaly
2018-08-18 18:44:03 +08:00
这不是微信相关的, 是 session 去处理的....
bombless
2018-08-18 19:03:02 +08:00
存哪无所谓,可以存文件里
看要不要区分用户,区分的话可以一个 openid 对应一个文件
notedown
2018-08-18 20:53:20 +08:00
redis 咯.
检测是活动关键字 触发..存起来... hset quaere:001 openid:xxxxxx {用户填写的内容一些东西 obj to string}
主要是看你的活动流程.而不是怎么储存
opengps
2018-08-18 20:58:13 +08:00
微信的一问一答不太适合你的需求,硬要做也行
首先,你得有记录,
然后,你得有办法识别。某个计算之前多少条信息参与计算
hlwjia
2018-08-18 21:07:28 +08:00
楼主,你先说说你会什么吧
waffur
2018-08-18 23:42:15 +08:00
@shoaly 好吧,只是现在我在微信场景下要解决这个问题。以为有特定的解决方式....
waffur
2018-08-18 23:48:08 +08:00
@hlwjia 就是不会的太多思路受限,如果能提点下一般解决方法就能专项补习啦。
waffur
2018-08-18 23:50:05 +08:00
@bombless
@notedown
@opengps 感谢指点~~
InternetExplorer
2018-08-19 00:01:04 +08:00
你想哈,有个叫 session 的东西,自带过期时间,每个用户一个,微信服务器发请求过来的时候,获取来源用户的 session,然后根据 session 来还原出 之前的环境,然后进行操作。
zhjits
2018-08-19 00:15:05 +08:00
写一个状态机,给每个 user id 存储当前状态
hlwjia
2018-08-19 00:46:29 +08:00
@waffur 先存数据库吧,最简单的了
eb22fbb4
2018-08-19 01:31:15 +08:00
问题的核心不在于存储,数据库、文件、缓存什么的可以,重要的是区分两次消息是否来自同一个人,服务端接收到消息里会包含用户 OpenID,用 OpenID 作为区分用户的唯一标识,把消息内容每次都存起来(只存两条也可以),判断回复时只需要根据 OpenID 取出前两次的消息内容就可以了。
tudage
2018-08-19 01:47:33 +08:00
不太明白需求啊,是用户第一次发送信息,数据库记录,第二次发送信息,数据库记录,然后返回吗,那就直接存数据就是了啊,在返回的时候删除记录的数据
cz5424
2018-08-19 02:00:39 +08:00
12 楼正解
ivanlw
2018-08-19 04:25:52 +08:00
大家别看不起,楼主的态度至少是在学习,是非常积极的,要给予肯定!
换个人来,分分钟就是“有搞微信开发的吗?我这里有个简单的 idea,谁来帮我实现下,100 块钱”
sky101001
2018-08-19 08:01:29 +08:00
如果需要找到第一次请求的信息,那就得用上 openid 之类的标识符,每次请求都需要有读写操作,可能效率不是很高。
虽然不清楚具体需求,但仅对微信而言,其实可以把每次请求的内容存在 localstorage 里,处理后一并发出。避免服务器端消耗资源去找该用户上一次的请求内容
asd123456cxz
2018-08-19 09:18:07 +08:00
@sky101001 请教下 这个处理是指 预存带有 OpenId 标识的 localstorage 然后添加消息内容 满足条件后发出吗?那该如何在没有和服务器通信之前获取 OpenId 呢?本人比教新手,不太懂前端,谢谢指教
hhacker
2018-08-19 10:06:57 +08:00
微信公众号接收普通消息(比如文本)时,你会受到微信的主动推送,消息体内就包含有该用户的 openid,你可以对同一个用户短时间内发送的消息视为一次上下文相关的对话,相当于第一次收到消息时开启了一次会话,当你认为收到了足够的会话信息时(比如你需要用户发送的 1 和 2 ),你就可以对该推送进行回复,回复的内容完全是你自己决定的(比如你想要的 3 )
kalman03
2018-08-19 10:14:33 +08:00
难道 16 楼不才是正解吗?
sky101001
2018-08-19 22:27:16 +08:00
@asd123456cxz
如果是在客户端用 localstorage 存储请求,那就不需要 openid,只要将每次请求的内容记录在本地即可。比如 localstorage 中已经记录的数据是 1 (当然 post 出去的数据不仅仅是 1 ),目前想要发送的数据是 2,那就生成一段用于 post 的数据{'previous':1,'current':2},然后刷新 localstorage。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/481013

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX