当前位置:Gxlcms > PHP教程 > 微信信息发送

微信信息发送

时间:2021-07-01 10:21:17 帮助过:38人阅读

模拟登陆微信用户获取用户分组、发送消息
  1. error_reporting( E_ALL ^ E_NOTICE );
  2. // 使用说明:
  3. // 开始要登录
  4. $param = array();
  5. $param['username'] = '用户名';
  6. $param['pwd'] = '密码';
  7. echo '
    1. ';<li></li><li>$wx = new Weixin();</li><li>$flag = $wx->login($param);</li><li></li><li>echo "登录:\n";</li><li>var_dump($flag);</li><li></li><li>echo "\n";</li><li>echo "获取分组:\n";</li><li>$group = $wx->getGroup();</li><li>var_dump($group);</li><li></li><li>echo "\n";</li><li>echo "分组成员:\n";</li><li>$group = $wx->getFriendByGroup('0');</li><li>var_dump($group);</li><li></li><li>echo "\n";</li><li>echo "最新消息\n";</li><li>$msg = $wx->newmesg();</li><li>var_dump($msg);</li><li></li><li>echo "\n";</li><li>echo "获取图文:\n";</li><li>$mesg = $wx->getMsg();</li><li>var_dump($mesg);</li><li></li><li>echo "\n";</li><li>echo "发送消息:\n";</li><li></li><li>// 说明:如果$content为文字发送文本消息</li><li>// 说明:如果$content为图文ID则发送图文消息</li><li>//$content = '测试文本'; // 文本</li><li>//$content = '10000023'; // 图文 素材id</li><li>//$mesg = $wx->battchMesgByGroup('101', $content);</li><li>//var_dump($mesg);</li><li>$arr = array(</li><li>'fakeId'=>'985865180',</li><li>"nickName"=>"逄锦涛",</li><li>"remarkName"=>'',</li><li>'content'=>'10000002'</li><li>);</li><li>$s=$wx->sendmesg($arr);</li><li>var_dump($s);</li><li>echo "df";</li><li>/**</li><li> * 微信公众平台操作</li><li> * 基本于PHP-CURL</li><li> * </li><li> * @author phpbin</li><li> *</li><li> */</li><li>class Weixin</li><li>{</li><li>
    2. </li><li>
    3. /**</li><li>
    4. * PHP curl头部分</li><li>
    5. * </li><li>
    6. * @var array</li><li>
    7. */</li><li>
    8. private $_header;</li><li>
    9. </li><li>
    10. /**</li><li>
    11. * 通讯cookie</li><li>
    12. * </li><li>
    13. * @var string</li><li>
    14. */</li><li>
    15. private $_cookie;</li><li>
    16. </li><li>
    17. /**</li><li>
    18. * 令牌</li><li>
    19. * </li><li>
    20. * @var string</li><li>
    21. */</li><li>
    22. private $_token;</li><li>
    23. </li><li>
    24. /**</li><li>
    25. * 初始化,设置header</li><li>
    26. */</li><li>
    27. public function __construct()</li><li>
    28. {</li><li>
    29. $this->_header = array();</li><li>
    30. $this->_header[] = "Host:mp.weixin.qq.com";</li><li>
    31. $this->_header[] = "Referer:https://mp.weixin.qq.com/cgi-bin/getmessage";</li><li>
    32. }</li><li>
    33. </li><li>
    34. /**</li><li>
    35. * 用户登录</li><li>
    36. * 结构 $param = array('username'=>'', 'pwd'=>'');</li><li>
    37. * </li><li>
    38. * @param array $param</li><li>
    39. * @return boolean</li><li>
    40. */</li><li>
    41. public function login($param)</li><li>
    42. {</li><li>
    43. $url = 'https://mp.weixin.qq.com/cgi-bin/login?lang=zh_CN';</li><li>
    44. $post = 'username='.urlencode($param['username']).'&pwd='.md5($param['pwd']).'&imgcode=&f=json';</li><li>
    45. $stream = $this->_html($url, $post);</li><li>
    46. </li><li>
    47. // 判断是不是登录成功</li><li>
    48. $html = preg_replace("/^.*\{/is", "{", $stream);</li><li>
    49. $json = json_decode($html, true);</li><li>
    50. //获取 token</li><li>
    51. preg_match("/lang=zh_CN&token=(\d+)/is", $json['ErrMsg'], $match);</li><li>
    52. $this->_token = $match[1];</li><li>
    53. </li><li>
    54. // 获取cookie</li><li>
    55. $this->_cookie($stream); </li><li>
    56. return (boolean)$this->_token;</li><li>
    57. }</li><li>
    58. </li><li>
    59. /**</li><li>
    60. * 获取图文消息</li><li>
    61. *</li><li>
    62. * @return array</li><li>
    63. */</li><li>
    64. public function getMsg()</li><li>
    65. {</li><li>
    66. $url = 'https://mp.weixin.qq.com/cgi-bin/operate_appmsg?token='.$this->_token.'&lang=zh_CN&sub=list&type=10&subtype=3&t=wxm-appmsgs-list-new&pagesize=10&pageidx=0&lang=zh_CN';</li><li>
    67. $stream = $this->_html($url);</li><li>
    68. </li><li>
    69. // 分析分组中好友</li><li>
    70. preg_match_all('/"appId"\:"(\d+)".*?"title"\:"(.*?)".*?/is', $stream, $matches);</li><li>
    71. if ( !is_array($matches[1])) return false;</li><li>
    72. </li><li>
    73. $returns = array();</li><li>
    74. foreach ( $matches[1] as $key=>$val) {</li><li>
    75. $temp = array();</li><li>
    76. $returns[$matches[1][$key]] = $matches[2][$key];</li><li>
    77. }</li><li>
    78. return $returns;</li><li>
    79. }</li><li>
    80. </li><li>
    81. /**</li><li>
    82. * 获取平台分组</li><li>
    83. * </li><li>
    84. * @return array</li><li>
    85. */</li><li>
    86. public function getGroup()</li><li>
    87. {</li><li>
    88. $url = 'https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=10&pageidx=0&type=0&groupid=0&token='.$this->_token.'&lang=zh_CN';</li><li>
    89. $stream = $this->_html($url);</li><li>
    90. </li><li>
    91. // 分组</li><li>
    92. preg_match('/"groups"\:(.*?)\\}\).groups/is', $stream, $match);</li><li>
    93. $jsonArr = json_decode($match[1], true);</li><li>
    94. $returns = array();</li><li>
    95. foreach ( $jsonArr as $key=>$val) {</li><li>
    96. $returns[$val['id']] = $val['name'].'('.$val['cnt'].')';
    97. </li><li>
    98. }</li><li>
    99. return $returns;</li><li>
    100. }</li><li>
    101. </li><li>
    102. /**</li><li>
    103. * 获取分组成员</li><li>
    104. * </li><li>
    105. * @param integer $gId</li><li>
    106. * @return array;</li><li>
    107. */</li><li>
    108. public function getFriendByGroup($gId)</li><li>
    109. {</li><li>
    110. $url = 'https://mp.weixin.qq.com/cgi-bin/contactmanage?t=user/index&pagesize=10&pageidx=0&type=0&groupid='.$gId.'&token='.$this->_token.'&lang=zh_CN';</li><li>
    111. $stream = $this->_html($url);</li><li>
    112. </li><li>
    113. // 分析分组中好友</li><li>
    114. preg_match('/"contacts"\:(.*?)\\}\).contacts/is', $stream, $match);</li><li>
    115. $jsonArr = json_decode($match[1], true);</li><li>
    116. </li><li>
    117. if ( !is_array($jsonArr)) return false;</li><li></li><li>
    118. $returns = array();</li><li>
    119. foreach ( $jsonArr as $key=>$val) {</li><li>
    120. $temp = array();</li><li>
    121. $temp['fakeId'] = $val['id'];</li><li>
    122. $temp['nickName'] = $val['nick_name'];</li><li>
    123. $temp['remarkName'] = $val['remark_name'];</li><li>
    124. $returns[] = $temp;</li><li>
    125. }</li><li>
    126. return $returns;</li><li>
    127. }</li><li>
    128. </li><li>
    129. /**</li><li>
    130. * 批量按组发送</li><li>
    131. * </li><li>
    132. * @param integer $gId 分组ID</li><li>
    133. * @param string $content</li><li>
    134. * @return array</li><li>
    135. */</li><li>
    136. public function battchMesgByGroup($gId, $content)</li><li>
    137. {</li><li>
    138. $mebInfo = $this->getFriendByGroup($gId);</li><li>
    139. </li><li>
    140. if ( false == $mebInfo) return false;</li><li>
    141. </li><li>
    142. // 循环发送</li><li>
    143. $returns = array();</li><li>
    144. foreach ( $mebInfo as $key=>$val)</li><li>
    145. {</li><li>
    146. $val['content'] = $content;</li><li>
    147. $this->sendmesg($val) ? $returns['succ'] ++ : $returns['err']++;</li><li>
    148. }</li><li>
    149. return $returns;</li><li>
    150. }</li><li>
    151. </li><li>
    152. </li><li>
    153. /**</li><li>
    154. * 发送消息</li><li>
    155. * </li><li>
    156. * 结构 $param = array(fakeId, content, msgId);</li><li>
    157. * @param array $param</li><li>
    158. * @return boolean</li><li>
    159. */</li><li>
    160. public function sendmesg($param)</li><li>
    161. {</li><li>
    162. $url = 'https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response';</li><li>
    163. </li><li>
    164. // 分类型进行推送</li><li>
    165. if ( (int)$param['content']>100000)</li><li>
    166. {</li><li>
    167. $post = 'error=false&tofakeid='.$param['fakeId'].'&type=10&fid='.$param['content'].'&appmsgid='.$param['content'].'&quickreplyid='.$param['msgId'].'&token='.$this->_token.'&ajax=1';</li><li>
    168. } else {</li><li>
    169. $post = 'error=false&tofakeid='.$param['fakeId'].'&type=1&content='.$param['content'].'&quickreplyid='.$param['msgId'].'&token='.$this->_token.'&ajax=1';</li><li>
    170. }</li><li></li><li>
    171. $this->_header[1] = "Referer:https://mp.weixin.qq.com/cgi-bin/singlemsgpage?msgid=&source=&count=20&t=wxm-singlechat&fromfakeid=".$param['fakeId']."&token=".$this->_token;</li><li>
    172. $stream = $this->_html($url, $post);</li><li>
    173. </li><li>
    174. // 是不是设置成功</li><li>
    175. $html = preg_replace("/^.*\{/is", "{", $stream);</li><li>
    176. $json = json_decode($html, true);</li><li>
    177. return (boolean)$json['msg'] == 'ok';</li><li>
    178. }</li><li>
    179. </li><li>
    180. /**</li><li>
    181. * 从Stream中提取cookie</li><li>
    182. * </li><li>
    183. * @param string $stream</li><li>
    184. */</li><li>
    185. private function _cookie($stream)</li><li>
    186. {</li><li>
    187. preg_match_all("/Set-Cookie: (.*?);/is", $stream, $matches);
    188. </li><li>
    189. $this->_cookie = @implode(";", $matches[1]);</li><li>
    190. }</li><li>
    191. </li><li>
    192. /**</li><li>
    193. * 获取Stream</li><li>
    194. * </li><li>
    195. * @param string $url</li><li>
    196. * @param string $post</li><li>
    197. * @return mixed</li><li>
    198. */</li><li>
    199. private function _html($url, $post = FALSE)</li><li>
    200. {</li><li>
    201. ob_start();</li><li>
    202. $ch = curl_init($url);</li><li>
    203. curl_setopt($ch, CURLOPT_HEADER, true);</li><li>
    204. curl_setopt($ch, CURLOPT_HTTPHEADER, $this->_header);</li><li>
    205. curl_setopt($ch, CURLOPT_TIMEOUT, 60);</li><li>
    206. if ( $post){</li><li>
    207. curl_setopt($ch, CURLOPT_POST, true);</li><li>
    208. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);</li><li>
    209. }</li><li>
    210. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);</li><li>
    211. curl_setopt($ch, CURLOPT_COOKIE, $this->_cookie);</li><li>
    212. //curl_setopt($ch, CURLOPT_PROXY, 'http://10.100.10.100:3128');</li><li>
    213. curl_exec($ch);</li><li>
    214. curl_close($ch);</li><li>
    215. $_str = ob_get_contents();</li><li>
    216. $_str = str_replace("script", "", $_str);</li><li>
    217. </li><li>
    218. ob_end_clean();</li><li>
    219. return $_str;</li><li>
    220. }</li><li>
    221. /**</li><li>
    222. * 获取最新消息</li><li>
    223. * </li><li>
    224. * 返回结构:id:msgId; fakeId; nickName; content;</li><li>
    225. * </li><li>
    226. * @return array</li><li>
    227. */</li><li>
    228. public function newmesg()</li><li>
    229. {</li><li>
    230. $url = 'https://mp.weixin.qq.com/cgi-bin/message?t=message/list&count=20&day=7&token='.$this->_token;</li><li>
    231. </li><li>
    232. $stream = $this->_html($url);</li><li>
    233. </li><li>
    234. preg_match('/"msg_item"\:(.*?)\\}\).msg_item/is', $stream, $match);</li><li>
    235. $jsonArr = json_decode($match[1], true);</li><li>
    236. </li><li>
    237. $returns = array();</li><li>
    238. foreach ( $jsonArr as $val){</li><li>
    239. if ( isset($val['is_starred_msg'])) continue;</li><li> $returns[] = $val;</li><li>
    240. }</li><li>
    241. return $returns;</li><li>
    242. }</li><li>}</li>

人气教程排行