文档章节

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

lifephp
 lifephp
发布于 2013/07/26 22:21
字数 764
阅读 10540
收藏 71

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

本程序已复活, 多谢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, 多谢!

© 著作权归作者所有

共有 人打赏支持
lifephp
粉丝 25
博文 17
码字总数 11134
作品 2
松江
程序员
加载中

评论(19)

lifephp
lifephp

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

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

多谢, 现在我那个应用已经关闭了, 最近也没关注微信公众平台, github源码打算关闭, 所以没办法帮你了, 如果你能解决, 烦请发布到github上, 公开出来. 多谢!
小六子_33
小六子_33
貌似是我自己微信号的原因,random参数好像也没啥影响
小六子_33
小六子_33
貌似微信发送的接口又修改了,用户必须24小时内和公众号互动才可以主动发送,而且现在的主动发送回携带一个random参数。我研究了一会,估计彻底不行了。
11
lifephp
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) {

微信的访问接口, 返回值变化很快
EchoCyw
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) {
f
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;
}
}
lifephp
lifephp

引用来自“foolay”的评论

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

多谢指出, 已更新include / LeaWeiXinClient.php. github已更新
f
foolay
昨晚 微信平台更新了··· 好像文件失效了··· 能帮忙把新程序弄一下不?
lifephp
lifephp

引用来自“marskenny”的评论

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

登录之后会把cookie和webToken保存到缓存文件中,你看下这两个文件是否有信息?如果没有,每次访问接口都需要登录的。
f
foolay
不错 对初学者很有帮助! 谢谢!
微信开发中微信墙的技术实现

微信公众平台开发中,用户发送给平台的时候,只能获取到用户的openid,不能获取fakeId,也就是无法获取用户的信息。 我看到微信墙的功能中,只要我发一条消息过去,就会把我的头像、地理位置、...

龚程
2013/08/05
3.7K
4
(转)微信Openid和fakeid对应简单实现

好久没有写日志了,最近一直在微信公众平台5.0出来以后才拿到appid,下手比较晚很多功能没有赶上。微信虽说开放了,但是开发的功能实在有限,就 那么几个简单的接口,实在是做不了什么事,谁...

lixiaokai2008
2013/09/27
0
2
【微信公众平台开发】之三:LBS的开发

1、相关资料 *基于SAE和百度LBS微信公众平台周边搜索的实现{Java} *当有道翻译遇到微信公众平台{有道翻译API、百度LBS} *百度地图车联网API文档(http://developer.baidu.com/map/index....

realsa
2014/09/23
0
0
如何获取到微信用户的fakeid

想实现给用户主动发送信息,前提是需要获取用户的fakeid,用网上的api模拟登陆抓取https://mp.weixin.qq.com/cgi-bin/contactmanagepage?t=wxm-friend&token=6641538&lang=zh_CN&pagesize=1...

苏生不惑
2013/08/02
10.2K
7
实战Nagios网络监控(3)——Nagios 微信报警

1. 下载微信公众平台私有接口 # yum install -y git # git clone https://github.com/lealife/WeiXin-Private-API 2. 修改微信公众平台私有接口代码,以配合 nagios 报警 # cp -r WeiXin-Pri...

willis_sun
2016/10/26
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IE浏览器http请求,中文传参报400错误-解决方法

做项目的时候,遇到一个小的问题.一个get请求列表数据的接口,在其它浏览器上是可以正常请求的.但是在ie浏览器上确出现奇怪的http请求400错误,其含义是你访问的页面域名不存在或者请求错误,自...

青衫旧巷
37分钟前
1
0
Spring中@RequestParam与@PathVariable的区别

@RequestParam与@PathVariable为spring的注解,都可以用于在Controller层接收前端传递的数据,不过两者的应用场景不同。 @PathVariable主要用于接收http://host:port/path/{参数值}数据。@Re...

王子城
40分钟前
0
0
数据运营者的福音:海量数据处理利器Greenplum

作者:李树桓 个推数据研发工程师 前言:近年来,互联网的快速发展积累了海量大数据,而在这些大数据的处理上,不同技术栈所具备的性能也有所不同,如何快速有效地处理这些庞大的数据仓,成为...

个推
40分钟前
1
0
进程和线程的区别介绍

1、首先是定义 进程:是执行中一段程序,即一旦程序被载入到内存中并准备执行,它就是一个进程。进程是表示资源分配的的基本概念,又是调度运行的基本单位,是系统中的并发执行的单位。 线程...

linuxprobe16
42分钟前
1
0
IntelliJ IDEA 工具的学习与使用

当前标签: IntelliJ IDEA IntelliJ IDEA(十一) :Debug的使用 JaJian 2018-08-04 02:32 阅读:402 评论:0 IntelliJ IDEA(十) :常用操作 JaJian 2018-05-22 18:43 阅读:1272 评论:0 Inte......

glen_xu
50分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部