一直在用Weixin PHP Private API实现一些很有用的功能,但今天突然发现这个功能挂掉了,仔细看了一下https://mp.weixin.qq.com/cgi-bin/singlesend 接口的返回内容:{"base_resp":{"ret":10706,"err_msg":"customer block"}},返回错误码10706,第一反应肯定是微信官方接口又调整参数了,顾不上去管这个错误码的原因,直接登录微信公众平台后台,给自己发一个消息,抓个包分析了一下!果然,是该接口的参数都被规范了一下,之前这个接口中,部分参数为Get,部分为Post,现在都是Post的了(指的是:token和t参数)。修改后:
public function send($id, $content) { $post = array(); $post['tofakeid'] = $id; $post['type'] = 1; $post['content'] = $content; $post['ajax'] = 1; $post['token'] = $this->webToken; $post['t'] = "ajax-response"; $url = "https://mp.weixin.qq.com/cgi-bin/singlesend"; $re = $this->httpClient->post($url, $post, $this->cookie); return json_decode($re['body']); }
部署后再测试了一遍,运行完美!返回:{"base_resp":{"ret":0,"err_msg":"ok"}}。
顺便把整个Weixin-PHP-Private-API重构了一下,有需要的,可以跟我说一声,单发;当然,在Github上还有大牛整理的更完整的版本,可以去获取,获取之前看看最后更新时间。
以下内容于2013-11-30日更新
的确,根据这两天的情况看来,返回10706错误码的问题,应该跟接口参数有调整没太大关系,而是微信公众平台会验证当前账号是否在24小时内于公众平台有信息交互行为!这个24小时的障碍,很恶心,会导致这个private api的稳定性减弱。
所以,目前为了保证这个singlesend接口能正常提供服务,只好每天早上主动给自己的微信公众平台账号发送一条消息,以实现24小时内与微信公众平台保持连接状态!
这两天没时间,过些天再看看能否通过定时任务模拟主动发送信息给微信公众平台,以解决24小时限制。
以下内容于2014-04-09日更新
这两天发现blog的留言无法被及时通过微信公众平台推送,今天总算抽出来点儿时间看了一看。看到发送消息的接口返回{"base_resp":{"ret":-3,"err_msg":"invalid session"}},一看便知是请求不合法,必然是cookie或者webToken出问题了,问题应该就定位到模拟登陆的地方了,果然,通过微信公众平台后台登陆抓包看了一下,login接口的返回值格式发生了变化,更改一下即可!目前Private API已升级!
/** * 登录后从结果中解析出webToken * @param [String] $loginRet * @return [Boolen] */ private function getWebToken($loginRet) { $loginRet = json_decode($loginRet, true); $msg = $loginRet["redirect_url"]; $msgArr = explode("&token=", $msg); if(count($msgArr) != 2) { return false; } else { $this->webToken = $msgArr[1]; file_put_contents($this->webTokenPath, $this->webToken); return true; } }
以下内容于2014-04-15日更新
介于好多网友都需要这个API,那就放出来吧。weixin-php-private-sdk.zip