WeChatメッセージの送信

WBOY
WBOYオリジナル
2016-07-25 08:49:491141ブラウズ
WeChat ユーザーへのログインをシミュレートしてユーザー グループを取得し、メッセージを送信します
  1. error_reporting( E_ALL ^ E_NOTICE );
  2. // 使用手順:
  3. // ログインして始めます
  4. $param = array();
  5. $param['username'] = 'ユーザー名';
  6. $param['pwd'] = 'パスワード';
  7. エコー '
    ';
  8. $wx = new Weixin();
  9. $flag = $wx->login($param) ;
  10. echo "ログイン:n";
  11. var_dump($flag);
  12. echo "n";
  13. echo "グループを取得:n";
  14. $group = $wx->getGroup();
  15. var_dump($グループ);
  16. echo "n";
  17. echo "グループメンバー:n";
  18. $group = $wx->getFriendByGroup('0');
  19. var_dump($group);
  20. echo "n";
  21. echo "最新のメッセージ n";
  22. $msg = $wx->newmesg();
  23. var_dump($msg);
  24. echo "n";
  25. echo "画像とテキストを取得:n";
  26. $mesg = $ wx-> getMsg();
  27. var_dump($mesg);
  28. echo "n";
  29. echo "Send message: n";
  30. // 説明: $content がテキストの場合、テキスト メッセージを送信します
  31. //説明: $content が text の場合 画像とテキスト ID が使用される場合、画像とテキスト メッセージが送信されます
  32. //$content = 'test text' // Text
  33. //$content = '10000023';画像とテキスト素材のID
  34. //$mesg = $wx->batchMesgByGroup('101', $content);
  35. //var_dump($mesg);
  36. $arr = array(
  37. 'fakeId'=>'985865180 ',
  38. "nickName"=>"逄ジンタオ",
  39. "remarkName" =>'',
  40. 'content'=>'10000002'
  41. );
  42. $s=$wx->sendmesg($arr) );
  43. var_dump($s);
  44. echo "df";
  45. /* *
  46. * WeChatパブリックプラットフォームの運用
  47. * PHP-CURLに基​​づく
  48. *
  49. * @author phpbin
  50. *
  51. */
  52. class Weixin
  53. {
  54. /**
  55. * PHPカールヘッダー部分
  56. *
  57. * @var array
  58. */
  59. private $_header;
  60. /**
  61. * コミュニケーションクッキー
  62. *
  63. * @var 文字列
  64. */
  65. private $_cookie;
  66. /**
  67. * トークン
  68. *
  69. * @var 文字列
  70. * /
  71. private $_token;
  72. /**
  73. * 初期化、ヘッダーの設定
  74. */
  75. public function __construct()
  76. {
  77. $this->_header = array();
  78. $this->_header[] = "ホスト:mp .weixin.qq.com";
  79. $this->_header[] = "参照者:https://mp.weixin.qq.com /cgi-bin/getmessage";
  80. }
  81. /**
  82. * ユーザーログイン
  83. * 構造 $param = array('username'=>'', 'pwd'=>'');
  84. *
  85. * @param array $param
  86. * @return boolean
  87. */
  88. public function login($param)
  89. {
  90. $url = 'https://mp.weixin.qq.com/cgi-bin /login?lang=zh_CN';
  91. $post = 'username='.urlencode ($param['username']).'&pwd='.md5($param['pwd']).'&imgcode=&f=json ';
  92. $stream = $this->_html($url, $post );
  93. // ログインが成功したかどうかを判断します
  94. $html = preg_replace("/^.*{/is", "{", $stream);
  95. $json = json_decode($html, true);
  96. // トークンを取得
  97. preg_match("/lang=zh_CN&token=(d+)/is", $json['ErrMsg'], $match);
  98. $this->_token = $match[1];
  99. // Cookie を取得
  100. $this->_cookie($stream);
  101. return (boolean)$this->_token;
  102. }
  103. /**
  104. * グラフィックメッセージを取得します
  105. *
  106. * @return array
  107. */
  108. public function getMsg()
  109. {
  110. $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';
  111. $stream = $this->_html($url);
  112. // グループ内の友達を分析します
  113. preg_match_all(' /"appId":"(d+)".*?"title":"( .*?)".*?/is', $stream, $matches);
  114. if ( !is_array($matches[1]) ) return false;
  115. $returns = array();
  116. foreach ( $matches[ 1] as $key=>$val) {
  117. $temp = array();
  118. $returns[$matches[1][$ key]] = $matches[2][$key];
  119. }
  120. return $ returns;
  121. }
  122. /**
  123. * プラットフォームのグループ化を取得します
  124. *
  125. * @return array
  126. */
  127. public function getGroup()
  128. {
  129. $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';
  130. $stream = $this- >_html($url);
  131. // グループ化
  132. preg_match('/" groups":(.*?)\}).groups/is', $stream, $match);
  133. $jsonArr = json_decode($ match[1], true);
  134. $returns = array();
  135. foreach ( $jsonArr as $key=>$val) {
  136. $returns[$val['id']] = $val['name' ].'('.$val['cnt'].')'
  137. }
  138. return $returns;
  139. }
  140. /**
  141. * グループメンバーを取得します
  142. *
  143. * @param integer $gId
  144. * @return array;
  145. */
  146. public function getFriendByGroup($gId)
  147. {
  148. $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';
  149. $stream = $this->_html($url);
  150. // 分析分组中好友
  151. preg_match('/"contacts":(.*?)\}).contacts/is', $stream, $match);
  152. $jsonArr = json_decode($match[1], true);
  153. if ( !is_array($jsonArr)) return false;
  154. $returns = array();
  155. foreach ( $jsonArr as $key=>$val) {
  156. $temp = array();
  157. $temp['fakeId'] = $val['id'];
  158. $temp['nickName'] = $val['nick_name'];
  159. $temp['remarkName'] = $val['remark_name'];
  160. $returns[] = $ temp;
  161. }
  162. return $returns;
  163. }
  164. /**
  165. * グループにまとめて送信
  166. *
  167. * @param integer $gId グループID
  168. * @param string $content
  169. * @return array
  170. */
  171. public function batchMesgByGroup($gId, $content)
  172. {
  173. $mebInfo = $this->getFriendByGroup($gId);
  174. if ( false == $mebInfo) return false;
  175. // 循環発行
  176. $returns = array();
  177. foreach ( $mebInfo as $key=>$val)
  178. {
  179. $val['content'] = $content;
  180. $this->sendmesg($val) ? $returns['succ'] ++ : $returns['err']++;
  181. }
  182. return $returns;
  183. }
  184. /**
  185. * メッセージを送信
  186. *
  187. * 構造 $param = array(fakeId, content, msgId);
  188. * @param array $param
  189. * @return boolean
  190. */
  191. public function sendmesg($param)
  192. {
  193. $url = 'https://mp.weixin.qq.com/cgi-bin/singlesend?t=ajax-response';
  194. // 分类型进行推送
  195. if ( (int)$param['content' ]>100000)
  196. {
  197. $post = 'error=false&tofakeid='.$param['fakeId'].'&type=10&fid='.$param['content'].'&appmsgid='.$param[' content'].'&quickreplyid='.$param['msgId'].'&token='.$this->_token.'&ajax=1';
  198. } else {
  199. $post = 'error=false&tofakeid='. $param['fakeId'].'&type=1&content='.$param['content'].'&quickreplyid='.$param['msgId'].'&token='.$this->_token.'&ajax =1';
  200. }
  201. $this->_header[1] = "参照者:https://mp.weixin.qq.com/cgi-bin/singlemsgpage?msgid=&source=&count=20&t=wxm-singlechat&fromfakeid =".$param['fakeId']."&token=".$this->_token;
  202. $stream = $this->_html($url, $post);
  203. // 是不是设置成功
  204. $html = preg_replace("/^.*{/is", "{", $stream);
  205. $json = json_decode($html, true);
  206. return (boolean)$json['msg'] == ' ok';
  207. }
  208. /**
  209. * Stream から Cookie を抽出します
  210. *
  211. * @param string $stream
  212. */
  213. プライベート関数 _cookie($stream)
  214. {
  215. preg_match_all("/Set-Cookie: (.*?);/is", $stream, $matches) ;
  216. $this->_cookie = @implode(";", $matches[1]);
  217. }
  218. /**
  219. * ストリームを取得
  220. *
  221. * @param string $url
  222. * @param string $post
  223. * @returnmixed
  224. */
  225. プライベート関数 _html($url, $post = FALSE)
  226. {
  227. ob_start();
  228. $ch =curl_init($url);
  229. curl_setopt($ch, CURLOPT_HEADER, true);
  230. curl_setopt($ch, CURLOPT_HTTPHEADER, $this->_header);
  231. curl_setopt($ch, CURLOPT_TIMEOUT, 60 );
  232. if ( $post){
  233. curl_setopt($ch, CURLOPT_POST, true);
  234. curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
  235. }
  236. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  237. curl_setopt($ch 、CURLOPT_COOKIE, $this->_cookie);
  238. //curl_setopt($ch, CURLOPT_PROXY, 'http://10.100.10.100:3128');
  239. curl_exec($ch);
  240. curl_close($ch);
  241. $ _str = ob_get_contents();
  242. $_str = str_replace("script", "", $_str);
  243. ob_end_clean();
  244. return $_str;
  245. }
  246. /**
  247. * 最新ニュースを取得します
  248. *
  249. * 構造体を返します: id:msgId;
  250. * @return array
  251. */
  252. public function newmesg( )
  253. {
  254. $url = 'https://mp.weixin.qq.com/cgi-bin/message?t=message/list&count=20&day=7&token='.$this->_token;
  255. $stream = $this->_html($url);
  256. preg_match('/"msg_item":(.*?)\}).msg_item/is', $stream, $match);
  257. $jsonArr = json_decode($match [1], true);
  258. $returns = array();
  259. foreach ( $jsonArr as $val){
  260. if ( isset($val['is_star_msg'])) continue;
  261. $returns[] = $val ;
  262. }
  263. return $returns;
  264. }
  265. }
复制幣

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。