From e426c0f308daa80c8fea959c1844be3c21ca0a6e Mon Sep 17 00:00:00 2001
From: fanbo <3412853751@qq.com>
Date: Mon, 16 Dec 2024 21:32:16 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
LICENSE | 13 ++
README.md | 8 +-
autoloader.php | 25 +++
config.php | 47 ++++++
core/accesstoken.lib.php | 38 +++++
core/advancedbroadcast.lib.php | 79 +++++++++
core/aes/ReadMe.txt | 4 +
core/aes/demo.php | 37 +++++
core/aes/errorcode.lib.php | 18 ++
core/aes/pkcs7encoder.lib.php | 32 ++++
core/aes/prpcrypt.lib.php | 74 +++++++++
core/aes/sha1.lib.php | 17 ++
core/aes/wxbizmsgcrypt.lib.php | 24 +++
core/aes/xmlparse.lib.php | 32 ++++
core/auth.lib.php | 21 +++
core/media.lib.php | 17 ++
core/menu.lib.php | 62 +++++++
core/msg.lib.php | 19 +++
core/msgconstant.lib.php | 20 +++
core/popularize.lib.php | 37 +++++
core/responseinitiative.lib.php | 128 ++++++++++++++
core/responsepassive.lib.php | 143 ++++++++++++++++
core/wechat.lib.php | 63 +++++++
core/wechatoauth.lib.php | 47 ++++++
core/wechatrequest.lib.php | 286 ++++++++++++++++++++++++++++++++
demo.php | 132 +++++++++++++++
detx.txt | 0
lanewechat.php | 10 ++
sorc.txt | 0
wechat.php | 20 +++
30 files changed, 1447 insertions(+), 6 deletions(-)
create mode 100644 LICENSE
create mode 100644 autoloader.php
create mode 100644 config.php
create mode 100644 core/accesstoken.lib.php
create mode 100644 core/advancedbroadcast.lib.php
create mode 100644 core/aes/ReadMe.txt
create mode 100644 core/aes/demo.php
create mode 100644 core/aes/errorcode.lib.php
create mode 100644 core/aes/pkcs7encoder.lib.php
create mode 100644 core/aes/prpcrypt.lib.php
create mode 100644 core/aes/sha1.lib.php
create mode 100644 core/aes/wxbizmsgcrypt.lib.php
create mode 100644 core/aes/xmlparse.lib.php
create mode 100644 core/auth.lib.php
create mode 100644 core/media.lib.php
create mode 100644 core/menu.lib.php
create mode 100644 core/msg.lib.php
create mode 100644 core/msgconstant.lib.php
create mode 100644 core/popularize.lib.php
create mode 100644 core/responseinitiative.lib.php
create mode 100644 core/responsepassive.lib.php
create mode 100644 core/wechat.lib.php
create mode 100644 core/wechatoauth.lib.php
create mode 100644 core/wechatrequest.lib.php
create mode 100644 demo.php
create mode 100644 detx.txt
create mode 100644 lanewechat.php
create mode 100644 sorc.txt
create mode 100644 wechat.php
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..67f6166
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,13 @@
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ Version 2, December 2004
+
+ Copyright (C) 2014 Lane
+
+ Everyone is permitted to copy and distribute verbatim or modified
+ copies of this license document, and changing it is allowed as long
+ as the name is changed.
+
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
\ No newline at end of file
diff --git a/README.md b/README.md
index 84f01cd..72292fd 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,2 @@
-# git-test
-jyp 12.16
-duanzejia 12.16
-jiajiayi 12.16
-lihaoyang 12.16
-hezhefeng 12.16 21:26
\ No newline at end of file
+第一次作业
+
diff --git a/autoloader.php b/autoloader.php
new file mode 100644
index 0000000..363c863
--- /dev/null
+++ b/autoloader.php
@@ -0,0 +1,25 @@
+
\ No newline at end of file
diff --git a/core/accesstoken.lib.php b/core/accesstoken.lib.php
new file mode 100644
index 0000000..68122d2
--- /dev/null
+++ b/core/accesstoken.lib.php
@@ -0,0 +1,38 @@
+1407743423";
+
+$pc = new WXBizMsgCrypt($token, $encodingAesKey, $appId);
+$encryptMsg = '';
+$errCode = $pc->encryptMsg($text, $timeStamp, $nonce, $encryptMsg);
+if ($errCode == 0) {
+ print("加密后: " . $encryptMsg . "\n");
+} else {
+ print($errCode . "\n");
+}
+
+$xml_tree = new DOMDocument();
+$xml_tree->loadXML($encryptMsg);
+$array_e = $xml_tree->getElementsByTagName('Encrypt');
+$array_s = $xml_tree->getElementsByTagName('MsgSignature');
+$encrypt = $array_e->item(0)->nodeValue;
+$msg_sign = $array_s->item(0)->nodeValue;
+
+$format = "";
+$from_xml = sprintf($format, $encrypt);
+
+$msg = '';
+$errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
+if ($errCode == 0) {
+ print("解密后: " . $msg . "\n");
+} else {
+ print($errCode . "\n");
+}
\ No newline at end of file
diff --git a/core/aes/errorcode.lib.php b/core/aes/errorcode.lib.php
new file mode 100644
index 0000000..1b5a928
--- /dev/null
+++ b/core/aes/errorcode.lib.php
@@ -0,0 +1,18 @@
+ 32) {
+ $pad = 0;
+ }
+ return substr($text, 0, (strlen($text) - $pad));
+ }
+}
\ No newline at end of file
diff --git a/core/aes/prpcrypt.lib.php b/core/aes/prpcrypt.lib.php
new file mode 100644
index 0000000..f7322fd
--- /dev/null
+++ b/core/aes/prpcrypt.lib.php
@@ -0,0 +1,74 @@
+key = base64_decode($k . "=");
+ }
+
+ public function encrypt($text, $appid)
+ {
+ try {
+ $random = $this->getRandomStr();
+ $text = $random . pack("N", strlen($text)) . $text . $appid;
+ $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
+ $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
+ $iv = substr($this->key, 0, 16);
+ $pkc_encoder = new PKCS7Encoder;
+ $text = $pkc_encoder->encode($text);
+ mcrypt_generic_init($module, $this->key, $iv);
+ $encrypted = mcrypt_generic($module, $text);
+ mcrypt_generic_deinit($module);
+ mcrypt_module_close($module);
+ return array(ErrorCode::$OK, base64_encode($encrypted));
+ } catch (\Exception $e) {
+ return array(ErrorCode::$EncryptAESError, null);
+ }
+ }
+
+ public function decrypt($encrypted, $appid)
+ {
+ try {
+ $ciphertext_dec = base64_decode($encrypted);
+ $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
+ $iv = substr($this->key, 0, 16);
+ mcrypt_generic_init($module, $this->key, $iv);
+ $decrypted = mdecrypt_generic($module, $ciphertext_dec);
+ mcrypt_generic_deinit($module);
+ mcrypt_module_close($module);
+ } catch (\Exception $e) {
+ return array(ErrorCode::$DecryptAESError, null);
+ }
+ try {
+ $pkc_encoder = new PKCS7Encoder;
+ $result = $pkc_encoder->decode($decrypted);
+ if (strlen($result) < 16)
+ return "";
+ $content = substr($result, 16, strlen($result));
+ $len_list = unpack("N", substr($content, 0, 4));
+ $xml_len = $len_list[1];
+ $xml_content = substr($content, 4, $xml_len);
+ $from_appid = substr($content, $xml_len + 4);
+ } catch (\Exception $e) {
+ return array(ErrorCode::$IllegalBuffer, null);
+ }
+ if ($from_appid != $appid)
+ return array(ErrorCode::$ValidateAppidError, null);
+ return array(0, $xml_content);
+ }
+
+ function getRandomStr()
+ {
+ $str = "";
+ $str_pol = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789abcdefghijklmnopqrstuvwxyz";
+ $max = strlen($str_pol) - 1;
+ for ($i = 0; $i < 16; $i++) {
+ $str .= $str_pol[mt_rand(0, $max)];
+ }
+ return $str;
+ }
+}
\ No newline at end of file
diff --git a/core/aes/sha1.lib.php b/core/aes/sha1.lib.php
new file mode 100644
index 0000000..753d8fe
--- /dev/null
+++ b/core/aes/sha1.lib.php
@@ -0,0 +1,17 @@
+token = $token;
+ $this->encodingAesKey = $encodingAesKey;
+ $this->appId = $appId;
+ }
+
+ public function encryptMsg($replyMsg, $timeStamp, $nonce, &$encryptMsg)
+ {
+ $pc = new Prpcrypt($this->encodingAesKey);
+ $array = $pc->encrypt($replyMsg, $this->appId);
+ $ret = $array[0];
+ if ($ret != 0) {
+ return $ret;
+
\ No newline at end of file
diff --git a/core/aes/xmlparse.lib.php b/core/aes/xmlparse.lib.php
new file mode 100644
index 0000000..4d56da8
--- /dev/null
+++ b/core/aes/xmlparse.lib.php
@@ -0,0 +1,32 @@
+loadXML($xmltext);
+ $array_e = $xml->getElementsByTagName('Encrypt');
+ $array_a = $xml->getElementsByTagName('ToUserName');
+ $encrypt = $array_e->item(0)->nodeValue;
+ $tousername = $array_a->item(0)->nodeValue;
+ return array(0, $encrypt, $tousername);
+ } catch (\Exception $e) {
+ return array(ErrorCode::$ParseXmlError, null, null);
+ }
+ }
+
+ public function generate($encrypt, $signature, $timestamp, $nonce)
+ {
+ $format = "
+
+
+%s
+
+";
+ return sprintf($format, $encrypt, $signature, $timestamp, $nonce);
+ }
+}
+?>
\ No newline at end of file
diff --git a/core/auth.lib.php b/core/auth.lib.php
new file mode 100644
index 0000000..2b2fb32
--- /dev/null
+++ b/core/auth.lib.php
@@ -0,0 +1,21 @@
+ '@' . $filename);
+ return Curl::callWebServer($queryUrl, $data, 'POST', 1, 0);
+ }
+
+ public static function download($mediaId) {
+ $accessToken = AccessToken::getAccessToken();
+ $queryUrl = 'http://file.api.weixin.qq.com/cgi-bin/media/get?access_token=' . $accessToken . '&media_id=' . $mediaId;
+ return Curl::callWebServer($queryUrl, '', 'GET', 0);
+ }
+}
\ No newline at end of file
diff --git a/core/menu.lib.php b/core/menu.lib.php
new file mode 100644
index 0000000..799c66a
--- /dev/null
+++ b/core/menu.lib.php
@@ -0,0 +1,62 @@
+$menu){
+ foreach($menuList2 as $k=>$menu2){
+ if($menu['id'] == $menu2['pid']){
+ $menuList[$key]['sub_button'][] = $menu2;
+ unset($menuList[$k]);
+ }
+ }
+ }
+ foreach($menuList as $key=>$menu){
+ if($menu['type'] == 'view'){
+ $menuList[$key]['url'] = urlencode($menu['code']);
+ }else if($menu['type'] == 'click'){
+ $menuList[$key]['key'] = $menu['code'];
+ }else if(!empty($menu['type'])){
+ $menuList[$key]['key'] = $menu['code'];
+ if(!isset($menu['sub_button'])) $menuList[$key]['sub_button'] = array();
+ }
+ unset($menuList[$key]['code'], $menuList[$key]['id'], $menuList[$key]['pid']);
+ $menuList[$key]['name'] = urlencode($menu['name']);
+ if(isset($menu['sub_button'])){
+ unset($menuList[$key]['type']);
+ foreach($menu['sub_button'] as $k=>$son){
+ if($son['type'] == 'view'){
+ $menuList[$key]['sub_button'][$k]['url'] = urlencode($son['code']);
+ }else if($son['type'] == 'click'){
+ $menuList[$key]['sub_button'][$k]['key'] = $son['code'];
+ }else{
+ $menuList[$key]['sub_button'][$k]['key'] = $son['code'];
+ $menuList[$key]['sub_button'][$k]['sub_button'] = array();
+ }
+ unset($menuList[$key]['sub_button'][$k]['code'], $menuList[$key]['sub_button'][$k]['id'], $menuList[$key]['sub_button'][$k]['pid']);
+ $menuList[$key]['sub_button'][$k]['name'] = urlencode($son['name']);
+ }
+ }
+ }
+ $data = array('button' => array_values($menuList));
+ $data = json_encode($data);
+ $data = urldecode($data);
+ $accessToken = AccessToken::getAccessToken();
+ $url = 'https://api.weixin.qq.com/cgi-bin/menu/create?access_token='.$accessToken;
+ $result = Curl::callWebServer($url, $data, 'POST');
+ return $result['errcode'] == 0 ? true : $result;
+ }
+
+ public static function getMenu(){
+ $accessToken = AccessToken::getAccessToken();
+ $url = 'https://api.weixin.qq.com/cgi-bin/menu/get?access_token='.$accessToken;
+ return Curl::callWebServer($url, '', 'GET');
+ }
+
+ public static function delMenu(){
+ $accessToken = AccessToken::getAccessToken();
+ $url = 'https://api.weixin.qq.com/cgi-bin/menu/delete?access_token='.$accessToken;
+ return Curl::callWebServer($url, '', 'GET');
+ }
+}
\ No newline at end of file
diff --git a/core/msg.lib.php b/core/msg.lib.php
new file mode 100644
index 0000000..8fdf508
--- /dev/null
+++ b/core/msg.lib.php
@@ -0,0 +1,19 @@
+ $code);
+ if (!empty($errorMsg)) {
+ $returnMsg['custom_msg'] = $errorMsg;
+ }
+ $returnMsg['custom_msg'] = '出错啦!'.$returnMsg['custom_msg'];
+ exit($returnMsg['custom_msg']);
+ }
+}
+?>
diff --git a/core/msgconstant.lib.php b/core/msgconstant.lib.php
new file mode 100644
index 0000000..0025dc5
--- /dev/null
+++ b/core/msgconstant.lib.php
@@ -0,0 +1,20 @@
+$tousername,
+ 'msgtype'=>'text',
+ 'text'=>array(
+ 'content'=>$content,
+ ),
+ );
+ $template = json_encode($template);
+
+ return Curl::callWebServer(self::$queryUrl, $template, self::$action);
+ }
+
+ public static function image($tousername, $mediaId){
+ //获取ACCESS_TOKEN
+ $accessToken = AccessToken::getAccessToken();
+ self::$queryUrl = self::$queryUrl.$accessToken;
+
+ //开始
+ $template = array(
+ 'touser'=>$tousername,
+ 'msgtype'=>'image',
+ 'image'=>array(
+ 'media_id'=>$mediaId,
+ ),
+ );
+ $template = json_encode($template);
+ return Curl::callWebServer(self::$queryUrl, $template, self::$action);
+ }
+
+ public static function voice($tousername, $mediaId){
+ //获取ACCESS_TOKEN
+ $accessToken = AccessToken::getAccessToken();
+ self::$queryUrl = self::$queryUrl.$accessToken;
+
+ //开始
+ $template = array(
+ 'touser'=>$tousername,
+ 'msgtype'=>'voice',
+ 'voice'=>array(
+ 'media_id'=>$mediaId,
+ ),
+ );
+ $template = json_encode($template);
+ return Curl::callWebServer(self::$queryUrl, $template, self::$action);
+ }
+
+ public static function video($tousername, $mediaId, $title, $description){
+ //获取ACCESS_TOKEN
+ $accessToken = AccessToken::getAccessToken();
+ self::$queryUrl = self::$queryUrl.$accessToken;
+
+ //开始
+ $template = array(
+ 'touser'=>$tousername,
+ 'msgtype'=>'video',
+ 'video'=>array(
+ 'media_id'=>$mediaId,
+ 'title'=>$title,
+ 'description'=>$description,
+ ),
+ );
+ $template = json_encode($template);
+ return Curl::callWebServer(self::$queryUrl, $template, self::$action);
+ }
+
+
+ public static function music($tousername, $title, $description, $musicUrl, $hqMusicUrl, $thumbMediaId){
+ //获取ACCESS_TOKEN
+ $accessToken = AccessToken::getAccessToken();
+ self::$queryUrl = self::$queryUrl.$accessToken;
+
+ //开始
+ $template = array(
+ 'touser'=>$tousername,
+ 'msgtype'=>'music',
+ 'music'=>array(
+ 'title'=>$title,
+ 'description'=>$description,
+ 'musicurl'=>$musicUrl,
+ 'hqmusicurl'=>$hqMusicUrl,
+ 'thumb_media_id'=>$thumbMediaId,
+ ),
+ );
+ $template = json_encode($template);
+ return Curl::callWebServer(self::$queryUrl, $template, self::$action);
+ }
+
+ public static function newsItem($title, $description, $picUrl, $url){
+ return $template = array(
+ 'title'=>$title,
+ 'description'=>$description,
+ 'url'=>$picUrl,
+ 'picurl'=>$url,
+ );
+ }
+
+ public static function news($tousername, $item){
+
+ $accessToken = AccessToken::getAccessToken();
+ self::$queryUrl = self::$queryUrl.$accessToken;
+
+
+ $template = array(
+ 'touser'=>$tousername,
+ 'msgtype'=>'news',
+ 'news'=>array(
+ 'articles'=>$item
+ ),
+ );
+ $template = json_encode($template);
+ return Curl::callWebServer(self::$queryUrl, $template, self::$action);
+ }
+
+
+}
\ No newline at end of file
diff --git a/core/responsepassive.lib.php b/core/responsepassive.lib.php
new file mode 100644
index 0000000..5fceaff
--- /dev/null
+++ b/core/responsepassive.lib.php
@@ -0,0 +1,143 @@
+
+
+
+ %s
+
+
+ %s
+
+XML;
+ return sprintf($template, $fromusername, $tousername, time(), $content, $funcFlag);
+ }
+
+
+ public static function image($fromusername, $tousername, $mediaId, $funcFlag=0){
+ $template = <<
+
+
+ %s
+
+
+
+
+ %s
+
+XML;
+ return sprintf($template, $fromusername, $tousername, time(), $mediaId, $funcFlag);
+ }
+
+
+ public static function voice($fromusername, $tousername, $mediaId, $funcFlag=0){
+ $template = <<
+
+
+ %s
+
+
+
+
+ %s
+
+XML;
+ return sprintf($template, $fromusername, $tousername, time(), $mediaId, $funcFlag);
+ }
+
+
+ public static function video($fromusername, $tousername, $mediaId, $title, $description, $funcFlag=0){
+ $template = <<
+
+
+ %s
+
+
+ %s
+
+XML;
+ return sprintf($template, $fromusername, $tousername, time(), $mediaId, $title, $description, $funcFlag);
+ }
+
+
+ public static function music($fromusername, $tousername, $title, $description, $musicUrl, $hqMusicUrl, $thumbMediaId, $funcFlag=0){
+ $template = <<
+
+
+ %s
+
+
+
+
+
+
+
+
+ %s
+
+XML;
+ return sprintf($template, $fromusername, $tousername, time(), $title, $description, $musicUrl, $hqMusicUrl, $thumbMediaId, $funcFlag);
+ }
+
+
+ public static function newsItem($title, $description, $picUrl, $url){
+ $template = <<
+
+
+
+
+
+XML;
+ return sprintf($template, $title, $description, $picUrl, $url);
+ }
+
+
+ public static function news($fromusername, $tousername, $item, $funcFlag=0){
+
+ if(count($item) >= 10){
+ $request = array('fromusername'=>$fromusername, 'tousername'=>$tousername);
+ return Msg::returnErrMsg(MsgConstant::ERROR_NEWS_ITEM_COUNT_MORE_TEN, '图文消息的项数不能超过10条', $request);
+
+ }
+ $template = <<
+
+
+ %s
+
+ %s
+
+ %s
+
+ %s
+
+XML;
+ return sprintf($template, $fromusername, $tousername, time(), count($item), implode($item), $funcFlag);
+ }
+
+
+ public static function forwardToCustomService($fromusername, $tousername){
+ $template = <<
+
+
+ %s
+
+
+XML;
+ return sprintf($template, $fromusername, $tousername, time());
+ }
+}
\ No newline at end of file
diff --git a/core/wechat.lib.php b/core/wechat.lib.php
new file mode 100644
index 0000000..4ce0039
--- /dev/null
+++ b/core/wechat.lib.php
@@ -0,0 +1,63 @@
+isValid() && $this->validateSignature($token)) {
+ return $_GET['echostr'];
+ }
+ $this->debug = $debug;
+ $xml = (array) simplexml_load_string($GLOBALS['HTTP_RAW_POST_DATA'], 'SimpleXMLElement', LIBXML_NOCDATA);
+ $this->request = array_change_key_case($xml, CASE_LOWER);
+ }
+
+ private function isValid() {
+ return isset($_GET['echostr']);
+ }
+
+ private function validateSignature($token) {
+ $signature = $_GET['signature'];
+ $timestamp = $_GET['timestamp'];
+ $nonce = $_GET['nonce'];
+ $signatureArray = array($token, $timestamp, $nonce);
+ sort($signatureArray, SORT_STRING);
+ return sha1(implode($signatureArray)) == $signature;
+ }
+
+ protected function getRequest($param = FALSE) {
+ if ($param === FALSE) {
+ return $this->request;
+ }
+ $param = strtolower($param);
+ if (isset($this->request[$param])) {
+ return $this->request[$param];
+ }
+ return NULL;
+ }
+
+ public function run() {
+ return WechatRequest::switchType($this->request);
+ }
+
+ public function checkSignature()
+ {
+ $signature = $_GET["signature"];
+ $timestamp = $_GET["timestamp"];
+ $nonce = $_GET["nonce"];
+
+ $token = WECHAT_TOKEN;
+ $tmpArr = array($token, $timestamp, $nonce);
+ sort($tmpArr, SORT_STRING);
+ $tmpStr = implode( $tmpArr );
+ $tmpStr = sha1( $tmpStr );
+
+ if( $tmpStr == $signature ){
+ echo $_GET['echostr'];
+ return true;
+ }else{
+ return false;
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/wechatoauth.lib.php b/core/wechatoauth.lib.php
new file mode 100644
index 0000000..1991690
--- /dev/null
+++ b/core/wechatoauth.lib.php
@@ -0,0 +1,47 @@
+1407743423";
+
+
+ $pc = new Aes\WXBizMsgCrypt($token, $encodingAesKey, $appId);
+ $encryptMsg = '';
+ $errCode = $pc->encryptMsg($text, $timeStamp, $nonce, $encryptMsg);
+ if ($errCode == 0) {
+ print("加密后: " . $encryptMsg . "\n");
+ } else {
+ print($errCode . "\n");
+ }
+
+ $xml_tree = new \DOMDocument();
+ $xml_tree->loadXML($encryptMsg);
+ $array_e = $xml_tree->getElementsByTagName('Encrypt');
+ $array_s = $xml_tree->getElementsByTagName('MsgSignature');
+ $encrypt = $array_e->item(0)->nodeValue;
+ $msg_sign = $array_s->item(0)->nodeValue;
+
+ $format = "";
+ $from_xml = sprintf($format, $encrypt);
+
+ $msg = '';
+ $errCode = $pc->decryptMsg($msg_sign, $timeStamp, $nonce, $from_xml, $msg);
+ if ($errCode == 0) {
+ print("解密后: " . $msg . "\n");
+ } else {
+ print($errCode . "\n");
+ }
+ }
+}
+
+
diff --git a/demo.php b/demo.php
new file mode 100644
index 0000000..9c6290f
--- /dev/null
+++ b/demo.php
@@ -0,0 +1,132 @@
+'标题1', 'description'=>'描述1', 'pic_url'=>'图片URL1', 'url'=>'点击跳转URL1');
+$tuwenList[] = array('title'=>'标题2', 'description'=>'描述2', 'pic_url'=>'图片URL2', 'url'=>'点击跳转URL2');
+
+$itemList = array();
+foreach ($tuwenList as $tuwen) {
+ $itemList[] = \LaneWeChat\Core\ResponseInitiative::newsItem($tuwen['title'], $tuwen['description'], $tuwen['pic_url'], $tuwen['url']);
+}
+\LaneWeChat\Core\ResponseInitiative::news($tousername, $itemList);
+
+
+
+
+$fromusername = "谁发给你的?(用户的openId)";
+$tousername = "你的公众号Id";
+$mediaId = "通过上传多媒体文件,得到的id。";
+
+\LaneWeChat\Core\ResponsePassive::text($fromusername, $tousername, '文本消息内容');
+
+\LaneWeChat\Core\ResponsePassive::image($fromusername, $tousername, $mediaId);
+
+\LaneWeChat\Core\ResponsePassive::voice($fromusername, $tousername, $mediaId);
+
+\LaneWeChat\Core\ResponsePassive::video($fromusername, $tousername, $mediaId, '视频标题', '视频描述');
+
+\LaneWeChat\Core\ResponsePassive::music($fromusername, $tousername, '音乐标题', '音乐描述', '音乐链接', '高质量音乐链接,WIFI环境优先使用该链接播放音乐', '缩略图的媒体id,通过上传多媒体文件,得到的id');
+
+
+$tuwenList[] = array('title'=>'标题1', 'description'=>'描述1', 'pic_url'=>'图片URL1', 'url'=>'点击跳转URL1');
+$tuwenList[] = array('title'=>'标题2', 'description'=>'描述2', 'pic_url'=>'图片URL2', 'url'=>'点击跳转URL2');
+
+$itemList = array();
+foreach($tuwenList as $tuwen){
+ $itemList[] = \LaneWeChat\Core\ResponsePassive::newsItem($tuwen['title'], $tuwen['description'], $tuwen['pic_url'], $tuwen['url']);
+}
+\LaneWeChat\Core\ResponsePassive::news($fromusername, $tousername, $itemList);
+
+\LaneWeChat\Core\ResponsePassive::forwardToCustomService($fromusername, $tousername);
+
+
+$openId = '用户和微信公众号的唯一ID';
+
+
+\LaneWeChat\Core\UserManage::createGroup('分组名');
+
+\LaneWeChat\Core\UserManage::getGroupList();
+
+\LaneWeChat\Core\UserManage::getGroupByOpenId($openId);
+
+\LaneWeChat\Core\UserManage::editGroupName('分组Id', '新的组名');
+
+\LaneWeChat\Core\UserManage::editUserGroup($openId, '新的分组ID');
+
+
+\LaneWeChat\Core\UserManage::getUserInfo($openId);
+
+\LaneWeChat\Core\UserManage::getFansList($next_openId='');
+
+\LaneWeChat\Core\UserManage::setRemark($openId, '新昵称');
+
+\LaneWeChat\Core\UserManage::getNetworkState();
+
+
+
+$redirect_uri = '获取CODE时,发送请求和参数给微信服务器,微信服务器会处理后将跳转到本参数指定的URL页面';
+\LaneWeChat\Core\WeChatOAuth::getCode($redirect_uri, $state=1, $scope='snsapi_base');
+
+$code = $_GET['code'];
+\LaneWeChat\Core\WeChatOAuth::getAccessTokenAndOpenId($code);
+
+
+\LaneWeChat\Core\Media::upload($filename, $type);
+
+\LaneWeChat\Core\Media::download($mediaId);
+
+
+
+
+$menuList = array(
+ array('id'=>'1', 'pid'=>'', 'name'=>'常规', 'type'=>'', 'code'=>'key_1'),
+ array('id'=>'2', 'pid'=>'1', 'name'=>'点击', 'type'=>'click', 'code'=>'key_2'),
+ array('id'=>'3', 'pid'=>'1', 'name'=>'浏览', 'type'=>'view', 'code'=>'http:
+ array('id'=>'4', 'pid'=>'', 'name'=>'扫码', 'type'=>'', 'code'=>'key_4'),
+ array('id'=>'5', 'pid'=>'4', 'name'=>'扫码带提示', 'type'=>'scancode_waitmsg', 'code'=>'key_5'),
+ array('id'=>'6', 'pid'=>'4', 'name'=>'扫码推事件', 'type'=>'scancode_push', 'code'=>'key_6'),
+ array('id'=>'7', 'pid'=>'', 'name'=>'发图', 'type'=>'', 'code'=>'key_7'),
+ array('id'=>'8', 'pid'=>'7', 'name'=>'系统拍照发图', 'type'=>'pic_sysphoto', 'code'=>'key_8'),
+ array('id'=>'9', 'pid'=>'7', 'name'=>'拍照或者相册发图', 'type'=>'pic_photo_or_album', 'code'=>'key_9'),
+ array('id'=>'10', 'pid'=>'7', 'name'=>'微信相册发图', 'type'=>'pic_weixin', 'code'=>'key_10'),
+ array('id'=>'11', 'pid'=>'1', 'name'=>'发送位置', 'type'=>'location_select', 'code'=>'key_11'),
+);
+\LaneWeChat\Core\Menu::setMenu($menuList);
+
+\LaneWeChat\Core\Menu::getMenu();
+
+\LaneWeChat\Core\Menu::delMenu();
+
+
+
+
+
+$fansList = \LaneWeChat\Core\UserManage::getFansList();
+
+$menuId = \LaneWeChat\Core\Media::upload('/var/www/baidu_jgylogo3.jpg', 'image');
+if (empty($menuId['media_id'])) {
+ die('error');
+}
+
+$list = array();
+$list[] = array('thumb_media_id'=>$menuId['media_id'] , 'author'=>'作者', 'title'=>'标题', 'content_source_url'=>'www.lanecn.com', 'digest'=>'摘要', 'show_cover_pic'=>'1');
+$list[] = array('thumb_media_id'=>$menuId['media_id'] , 'author'=>'作者', 'title'=>'标题', 'content_source_url'=>'www.lanecn.com', 'digest'=>'摘要', 'show_cover_pic'=>'0');
+$list[] = array('thumb_media_id'=>$menuId['media_id'] , 'author'=>'作者', 'title'=>'标题', 'content_source_url'=>'www.lanecn.com', 'digest'=>'摘要', 'show_cover_pic'=>'0');
+$mediaId = \LaneWeChat\Core\AdvancedBroadcast::uploadNews($list);
+
+$result = \LaneWeChat\Core\AdvancedBroadcast::sentNewsByOpenId($fansList['data']['openid'], $mediaId);
\ No newline at end of file
diff --git a/detx.txt b/detx.txt
new file mode 100644
index 0000000..e69de29
diff --git a/lanewechat.php b/lanewechat.php
new file mode 100644
index 0000000..cb8c338
--- /dev/null
+++ b/lanewechat.php
@@ -0,0 +1,10 @@
+run();
+