微信公众平台私有API, 得到用户fakeId
博客专区 > lifephp 的博客 > 博客详情
微信公众平台私有API, 得到用户fakeId
lifephp 发表于4年前
微信公众平台私有API, 得到用户fakeId
  • 发表于 4年前
  • 阅读 10256
  • 收藏 71
  • 点赞 0
  • 评论 19

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 微信公众平台私有API, 得到用户fakeId

-------最新内容--------------------

本程序已复活, 多谢forecho(他的github:https://github.com/forecho)维护

---------以下内容时间久远---------------

最新在工作之余玩起了微信公众平台, 并且快速做了一个玩骰子的小游戏(公共微信号cometoplay), 因为这个游戏需要主动发送信息给用户, 所以需要用到微信的私有api, 思路很简单, 因为公共平台可以通过web发送给信息给用户, 那么可以通过程序模拟登录再调发送信息的接口即可.

在github上发现一个api(https://github.com/zscorpio/weChat), 下下来不能用, 因为cookie和没考虑到webToken(每次登录会根据时间(估计)生成一个token)导致不能用, 自己改写了下, 完善了些功能, 暂且可用. 已放在github上, 有兴趣的朋友可以下来用用: https://github.com/lealife/WeiXin-Private-API.

这里简单介绍下我做的小游戏cometoplay玩玩, 就是一个字符型的玩骰子功能: 用户先输入对方微信号和Ta玩骰子, 于是再设置骰子的6个面对应的选项(比如, 买菜做饭做菜全包, 拖地, 洗衣服, 洗碗, 倒垃圾, happy睡大觉), 然后系统随机生成一个结果, 并把该结果发送给对方. (另, 这个功能主要是因为和女朋友总是因为在哪吃饭不能抉择而浪费了大量时间的问题才开发的)

这里很重要的一点是要解析用户的信息, 每次用户关注cometoplay, 就需要解析该用户的信息, 把用户的fakeId, 微信号从web上解析下来放在自己的数据中, 不然就不能实现双方玩骰子, 主动发送信息给用户的功能了.

怎么解析用户的信息得到fakeId, 微信号呢?

当有用户发送信息后, 如何得到用户的fakeId?
1. 从web上得到最近发送的信息
2. 将用户发送的信息与web上发送的信息进行对比, 如果内容和时间都正确, 那肯定是该用户, 便得到用户的fakeId, 再调用接口得到用户的详细信息, 保存到自己的数据库中.
    实践发现, 时间可能会不对, 相隔1-2s或10多秒也有可能, 此时如果内容相同就断定是该用户

关于解析用户信息的接口已在WeiXin.php中有所体现, 稍微修改即可使用.

----------------

2013/8/17. 用户反应不能解析用户信息, 查原因是不能使用http协议了, 今天重新用curl发https请求才行. github已更新.

---------------

另, 微信公众平台接口改变很频繁, 本程序的修改速度有一定的滞后性, 若有朋友得知接口已变, 烦请告知我, 若能一起维护更好, lifephp@gmail.com, 多谢!

共有 人打赏支持
粉丝 25
博文 15
码字总数 9653
作品 2
评论 (19)
苏生不惑
下载了您的文件,问下如果两个人隔1秒发了同样的内容呢?那取谁的fakeid呢
lifephp

引用来自“苏翰”的评论

下载了您的文件,问下如果两个人隔1秒发了同样的内容呢?那取谁的fakeid呢

这个问题我也想过, 可以这样解决, 用户一关注, 产生一些随机数提示用户发送, 这样用户发送内容相同的概率就大大降低.
苏生不惑
嗯,不错,太感谢了,最近正在弄微信,有问题再请教哈
cai_oo
微信公众平台
lifephp

引用来自“cai_oo”的评论

微信公众平台

多谢指出
小六子_33
请问现在这私有接口还能用吗?昨天晚上开始我就获取不到消息了。
lifephp

引用来自“小六子_33”的评论

请问现在这私有接口还能用吗?昨天晚上开始我就获取不到消息了。

不好意思, 没来急更新接口. 腾讯加了对referer的检查, 暂时问题解决, github已更新, 请更新
小六子_33

引用来自“lifephp”的评论

引用来自“小六子_33”的评论

请问现在这私有接口还能用吗?昨天晚上开始我就获取不到消息了。

不好意思, 没来急更新接口. 腾讯加了对referer的检查, 暂时问题解决, github已更新, 请更新

谢谢,我这边昨天晚上也发现了。。自己修改好了。
marskenny
请问我这边一直显示登录超时??是我的服务器环境问题么?
foolay
不错 对初学者很有帮助! 谢谢!
lifephp

引用来自“marskenny”的评论

请问我这边一直显示登录超时??是我的服务器环境问题么?

登录之后会把cookie和webToken保存到缓存文件中,你看下这两个文件是否有信息?如果没有,每次访问接口都需要登录的。
foolay
昨晚 微信平台更新了··· 好像文件失效了··· 能帮忙把新程序弄一下不?
lifephp

引用来自“foolay”的评论

昨晚 微信平台更新了··· 好像文件失效了··· 能帮忙把新程序弄一下不?

多谢指出, 已更新include / LeaWeiXinClient.php. github已更新
foolay
请教一下 getCookieAndWebToken()里头
1 $re = $this->getUserInfo(1); 这个 fakeId 1 是什么意思 不存在啊```
2 if(is_array($re)) return true; 怎么没有后半句 not array , 执行 $this->login() ???

if($this->cookie && $this->webToken) {
$re = $this->getUserInfo(1);
if(is_array($re)) {
return true;
}
}
EchoCyw
Array
(
[id] => 1495
[type] => 1
[fakeid] => 69720240
[nick_name] => 逗你玩
[date_time] => 1383627499
[content] => id@hyvgii
[source] =>
[msg_status] => 4
[has_reply] => 0
[refuse_reason] =>
)


funciton getLatestMsgByCreateTimeAndContent

里面
if($msg['dateTime'] == $createTime) {
参数错误
应为
if($msg['date_time'] == $createTime) {
lifephp

引用来自“EchoCyw”的评论

Array
(
[id] => 1495
[type] => 1
[fakeid] => 69720240
[nick_name] => 逗你玩
[date_time] => 1383627499
[content] => id@hyvgii
[source] =>
[msg_status] => 4
[has_reply] => 0
[refuse_reason] =>
)


funciton getLatestMsgByCreateTimeAndContent

里面
if($msg['dateTime'] == $createTime) {
参数错误
应为
if($msg['date_time'] == $createTime) {

微信的访问接口, 返回值变化很快
小六子_33
貌似微信发送的接口又修改了,用户必须24小时内和公众号互动才可以主动发送,而且现在的主动发送回携带一个random参数。我研究了一会,估计彻底不行了。
11
小六子_33
貌似是我自己微信号的原因,random参数好像也没啥影响
lifephp

引用来自“小六子_33”的评论

貌似微信发送的接口又修改了,用户必须24小时内和公众号互动才可以主动发送,而且现在的主动发送回携带一个random参数。我研究了一会,估计彻底不行了。
11

多谢, 现在我那个应用已经关闭了, 最近也没关注微信公众平台, github源码打算关闭, 所以没办法帮你了, 如果你能解决, 烦请发布到github上, 公开出来. 多谢!
×
lifephp
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: