微信API开发自动回复
微信自动回复与自定义菜单操作流程
第三十二页,共五十九页。
6章
乐享接口配置
第三十三页,共五十九页。
目前微信平台内的基础功能已经远远不能满足用户的需求,因此第三方平台的使用就显得尤为重要。目前主要 讲的第三方平台为“乐享”。
第四十二页,共五十九页。
(3)选中【回复文字】,即可进入编辑界面,在“自动回复内容”编辑框里可以添加文字与表情,对关注用户的一些 欢迎与引导。
第四十三页,共五十九页。
必须提出的是,第三方平台关注时可回复超链接,超链接能够使关注用户能够快速的到达所指定的界面,如活动界面, 方面快捷体验好。具体设置如下。
(默认插件均为关闭状态)
第四页,共五十九页。
插件功能介绍
群发功能:点击开通后可以向关注公众平台的用户群发消息。 自动回复:点击开通后可以使用用户关注自动回复、用户默认回复和用户关键 字回复功能。 自定义菜单:点击开通后可以使用自定义菜单,利用自定义菜单给用户更好体验。 卡卷功能:点击开通后,你可以通过卡券功能进行卡券的生成、投放和运营。
信公众平台接口就与第三方平台接口连接起来了。(无论使 用哪一种第三方平台,只需要将你使用的第三方平台的服务 器配置即URL和TOKEN连接到微信公众平台,则可使用第三方平台功
能。)
第三十七页,共五十九页。
温馨提示
提交成功后,会提示“提交成功”,若URL或TOKEN输入错误,则会提示“提交失败”,须重新输入。若
第二十七页,共五十九页。
(3)添加子菜单(二级菜单)成功后,再选中子菜单,即可在右边看到发送消息,和跳转到网址选 项。选中后即可添加菜单相应的内容。可以选择文字,图片,语音,同时也可以选择素材里面编辑好的图文信息。
微信开发步骤(一)
1.注册微信公众平台账号(推荐服务号,服务号可开发功能比订阅号多。
)服务号订阅号2.下载微信官方API(wx_sample.php文件),建议使用Dreamweaver打开。
3.进入微信公众号,点击“功能-> 高级功能”。
使用开发模式。
4.注册“百度开发者”账号(不要使用中文)。
注册完成之后,在右上角“开发者服务管理中”创建工程点击左侧菜单“应用引擎”选项,来添加环境配置。
部署类型选择php-web。
点击扩展服务,添加mysql 服务。
5.Svn设同步代码置。
先下载svn,可直接安装。
在任意位置新建文件夹(如:E:\\weixin)。
复制svn地址。
在E:\\weixin 文件夹右击,选择” SVN Checkout” ,将复制的svn地址粘贴到红框内提交,用户名和密码就是百度账号的用户名/密码。
将步骤2下载的wx_sample.php拉到weixin 目录下,右击选择“Add”再右击wx_sample.php,选择svn Commit ,填写提交信息后提交回到百度开发中心,工程状态会提示有新版(不显示刷新页面),点击快捷发布即可。
6.接口验证,需要url和Token的值。
打开wx_sample.php文件,第七行中的weixin为Token的值(可修改为你喜欢的值)。
url 的值为步骤4中域名/wx_sample.php,即/wx_sample.php。
7.关键词回复开发。
用Dreamweaver打开步骤2下载的wx_sample.php,在46行插入以下代码。
$msgType = "text";//回复信息类型为文本信息switch ( $keyword ){case "1"; //用户回复1,显示”公司简介”$contentStr = "公司简介";break;case "2";//用户回复1,显示”最新套餐”$contentStr = "最新套餐";break;default; //用户回复1、2以外的信息,显示”感谢您……”$contentStr = "感谢您关注川臂网络科技!回复“1”公司简介;回复“1”最新套餐";}选择Dreamweaver 修改---页面属性,将编码改为UTF-8保存,避免出现中文乱码。
微信公众号开发之文本消息自动回复php代码
微信公众号开发之⽂本消息⾃动回复php代码本⽂实例为⼤家分享了php微信⽂本消息⾃动回复别代码,供⼤家参考,具体内容如下2.wx_sample.php初始代码<?php/*** wechat php test*///define your tokendefine("TOKEN", "weixin");$wechatObj = new wechatCallbackapiTest();$wechatObj->valid();class wechatCallbackapiTest{public function valid(){$echoStr = $_GET["echostr"];//valid signature , optionif($this->checkSignature()){echo $echoStr;exit;}}public function responseMsg(){//get post data, May be due to the different environments$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];//extract post dataif (!empty($postStr)){/* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,the best way is to check the validity of xml by yourself */libxml_disable_entity_loader(true);$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);$fromUsername = $postObj->FromUserName;$toUsername = $postObj->ToUserName;$keyword = trim($postObj->Content);$time = time();$textTpl = "<xml><ToUserName><![CDATA[%s]]></ToUserName><FromUserName><![CDATA[%s]]></FromUserName><CreateTime>%s</CreateTime><MsgType><![CDATA[%s]]></MsgType><Content><![CDATA[%s]]></Content><FuncFlag>0</FuncFlag></xml>";if(!empty( $keyword )){$msgType = "text";$contentStr = "Welcome to wechat world!";$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);echo $resultStr;}else{echo "Input something...";}}else {echo "";exit;}}private function checkSignature(){// you must define TOKEN by yourselfif (!defined("TOKEN")) {throw new Exception('TOKEN is not defined!');}$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);// use SORT_STRING rulesort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}}>3.调⽤回复信息⽅法在wx_sample.php⽂件中注释掉$wechatObj->valid();,在其下增加⼀句“$wechatObj->responseMsg();”。
使用nodeJs开发微信公众号(设置自动回复消息)
使⽤nodeJs开发微信公众号(设置⾃动回复消息)微信向第三⽅服务器发送请求时会降 signature 、timestamp、 nonce 、 openid(⽤户标识),发送内容会以 xml 的形式附加在请求中想要获取⽤户发送信息,需要从请求中获得 xml ,因此需要⽤到 raw-body(获得原⽣请求体)npm install raw-body --save接下来需要将xml从请求中分离并且格式化成jsonvar getRawBody = require('raw-body')var contentType = require('content-type')var data = getRawBody(req, {length: req.headers['content-length'],limit: '1mb',encoding: contentType.parse(req).parameters.charset}, function(err, buf) {utils.formatMessage(buf.toString()).then(message => {//判断消息,做出回应})})我将格式化 xml 的操作封装在 formatMessagevar xml2js = require('xml2js')exports.formatMessage = function(xml) {return new Promise((resolve, reject) => {// 接收⽂本信息格式// <xml> <ToUserName><![CDATA[toUser]]></ToUserName>// <FromUserName><![CDATA[fromUser]]></FromUserName>// <CreateTime>1348831860</CreateTime>// <MsgType><![CDATA[text]]></MsgType>// <Content><![CDATA[this is a test]]></Content>// <MsgId>1234567890123456</MsgId></xml>xml2js.parseString(xml, function(err, content) {var result = content.xmlvar message = {};if (typeof result === 'object') {var keys = Object.keys(result);for (var i = 0; i < keys.length; i++) {var key = keys[i];var item = result[key];if (!(item instanceof Array) || item.length === 0) continue;if (item.length === 1) {var val = item[0];if (typeof val === 'object') message[key] = formatMessage(val);else message[key] = (val || '').trim();} else {message[key] = [];for (var j = 0, k = item.length; j < k; j++) message[key].push(formatMessage(item[j]));}}}resolve(message)})})}解析完成后我们可以拿到 FromUserName、MsgType 和 ContentMsgType可能是 event(事件)或者是 text (⽂本)event类型有:subscribe,unsubscribe,LOCATION,CLICK,SCAN根据 content中发送的内容,我们可以进⾏判断,返回⾃定义消息回复因此在返回信息前需要拼接内容成指定xml格式,我将拼接⽅法封装在 template.js ⽂件中,使⽤时只要直接调⽤即可lib/template.js:exports.textMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[${message.reply}]]></Content></xml>`}exports.imageMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[image]]></MsgType><Image><MediaId><![CDATA[${message.mediaId}]]></MediaId></Image></xml>`}exports.voiceMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[voice]]></MsgType><Voice><MediaId><![CDATA[${message.mediaId}]]></MediaId></Voice></xml>`}exports.videoMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[video]]></MsgType><Video><MediaId><![CDATA[${message.mediaId}]]></MediaId><Title><![CDATA[${message.title}]]></Title><Description><![CDATA[${message.description}]]></Description></Video></xml>`}exports.articleMessage = function(message){var createTime = new Date().getTime()return `<xml><ToUserName><![CDATA[${message.FromUserName}]]></ToUserName><FromUserName><![CDATA[${message.ToUserName}]]></FromUserName><CreateTime>${createTime}</CreateTime><MsgType><![CDATA[news]]></MsgType><ArticleCount>${message.articles.length}</ArticleCount><Articles>${message.articles.map(article =>`<item><Title><![CDATA[${article.title}]]></Title><Description><![CDATA[${article.description}]]></Description><PicUrl><![CDATA[${article.img}]]></PicUrl><Url><![CDATA[${article.url}]]></Url></item>`).join('')}</Articles></xml>`}⾃动回复整体流程:收到微信请求->校验是否来⾃微信->获取access_token->解析请求体xml->根据类型以及内容作出相应回复代码:var express = require('express')var router = express.Router()var getRawBody = require('raw-body')var contentType = require('content-type')var utils = require('../lib/utils.js')var template = require('../lib/template.js')// 微信官⽅请求回调接⼝router.all('/', function(req, res, next) {var data = getRawBody(req, {length: req.headers['content-length'],limit: '1mb',encoding: contentType.parse(req).parameters.charset}, function(err, buf) {if (err) return next(err)utils.formatMessage(buf.toString()).then(message => {if (message.MsgType == 'event') {if (message.Event === 'subscribe') {if (message.EventKey) {console.log('扫描⼆维码关注:' + message.EventKey + ' ' + message.ticket);}message.reply = '终于等到你,还好我没放弃';} else if (message.Event === 'unsubscribe') {message.reply = '';console.log(message.FromUserName + ' 悄悄地⾛了...');} else if (message.Event === 'LOCATION') {message.reply = '您上报的地理位置是:' + titude + ',' + message.Longitude; } else if (message.Event === 'CLICK') {message.reply = '您点击了菜单:' + message.EventKey;} else if (message.Event === 'SCAN') {message.reply = '关注后扫描⼆维码:' + message.Ticket;}res.send(template.textMessage(message))} else if (message.MsgType === 'text') {var content = message.Contentif (content === '1') {message.reply = '终于等到你'res.send(template.textMessage(message))} else if (content === '2') {message.mediaId = '需要发送图⽚的媒体id'res.send(template.imageMessage(message))} else if (content === '3') {message.articles = [{title: '标题',description: '描述',picUrl: '图⽚路径,不需要事先上传',url: '素材路径,素材需要事先上传'}]res.send(template.articleMessage(message))} else {message.reply = '你说的话:“' + content + '”,我听不懂呀'res.send(template.textMessage(message))}}})})});module.exports = router;。
python实现微信自动回复(自动聊天)
python实现微信⾃动回复(⾃动聊天)原⽂地址(本⼈):介绍微信⾃动回复其实主要就是登录,接收消息,回复消息三个功能,微信没有提供公开的API,但是可以分析⽹页版微信通信原理,通过模拟浏览器来实现需要的功能。
下⾯将给出微信⽹页版通信原理以及Python代码。
分析-获取uuid:GETParam _ (13位时间戳)Response window.QRLogin.code = 200; window.QRLogin.uuid = "4YyQFP2Daw==";-获取⼆维码:GET ==Param 4YyQFP2Daw== 即上⾯的uuidResponse ⼆维码图⽚-监听是否扫描⼆维码以及是否确认登录:GET https:///cgi-bin/mmwebwx-bin/login?loginicon=true&uuid=4YyQFP2Daw==Param uuid 同上Responsewindow.code=200;window.redirect_uri="https:///cgi-bin/mmwebwx-bin/webwxnewloginpage?ticket=ARxD7GSdBYtNHOxhK0BF0ek-@qrticket_0&uuid=4YyQFP2Daw==&lang=zh_CN&scan=1486743186";code:408 ⽆响应201 扫描⼆维码但没有登录(此时响应数据中还包含⽤户头像图⽚base64编码的字符串,UserAvatar)200 登录redirect_uri 为接下来需要请求的地址-获取后续访问所需要的key等GETParam URL为上次返回的redirect_uri 参数已经带上了Response<error><ret>0</ret><message/><skey>@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad</skey><wxsid>0zEvAdWKm9ZZgYVn</wxsid><wxuin>1564527827</wxuin><pass_ticket>OLxGHwqL%2BWNArxvXaqjDy06qzdrSojq6DJwiBF19sgw2CibZSJBv1WwOXAfKnLIg</pass_ticket><isgrayscale>1</isgrayscale>< /error>-初始化POST https:///cgi-bin/mmwebwx-bin/webwxinit?r=-485039295&lang=zh_CN&pass_ticket=OLxGHwqL%2BWNArxvXaqjDy06qzdrSojq6DJwiBF19sgw2CibZSJBv1WwOXAfKnLIgParam r ( - + 9位随机数),pass_ticket,{"BaseRequest": {"Uin": "1564527827", "Skey": "@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad", "DeviceID": "e924318232435460", "Sid": "0zEvAdWKm9ZZgYVn"}} 第三个参数其中为json数据,DeviceID为(e + 15位随机数)Response 返回json,包含⽤户⾃⼰的信息,最近联系⼈,订阅的公众号消息等等;这⾥只需要关注UserName=@821c154488cdddbfb04141aa8f681174305d21d67a24cfd6eca3e77a152e52ff 每位⽤户都有⼀个UserName,但是每次登陆UserName都是重新分配的,SyncKey 为⼀组key ,后⾯接收消息需要将其作为参数,同时每次接收接收消息时,也会返回⼀组SyncKey作为在下⼀次请求的参数,以此类推-状态检查这⾥会建⽴⼀个长连接,每次连接⼤约20秒左右,若新消息,⼿机端发出退出⽹页登录指令,或者状态异常会返回特定的状态码GET https:///cgi-bin/mmwebwx-bin/synccheck?r=1486743215000&skey=@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad&sid=0zEvAdWKm9Z ZgYVn&uin=1564527827&deviceid=e891796429.95749&synckey=1_660530221%7C2_660530488%7C3_660530485%7C1000_1486721341&_=1486740215000 Paramr(时间戳),skey,sid,uin,deviceid,synckey(将SyncKey中的多组key 以 key1_value1|key2_value2 的形式拼接成字符串如:3_660530485|1000_1486721341),_ (时间戳) Responsewindow.synccheck={retcode:"0",selector:"2"}retcode=0 正常,1101 退出登录,1102 会话异常, selector= 0 ⽆变化 2or6 有消息-接收消息若状态检查到有新消息,则请求消息POST https:///cgi-bin/mmwebwx-bin/webwxsync?sid=0zEvAdWKm9ZZgYVn&skey=@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad&lang=zh_CN&pass_ticket=OLxGHwqL%2BWNArxvXaqjDy06qzdrSojq6DJwiBF19sgw2CibZSJBv1 Paramsid,skey,pass_ticket 以及 json数据 {"SyncKey": {"Count": 4, "List": [{"Key": 1, "Val": 660530221}, {"Key": 2, "Val": 660530488}, {"Key": 3, "Val": 660530485}, {"Key":1000, "Val": 1486721341}]}, "BaseRequest": {"Sid": "0zEvAdWKm9ZZgYVn", "Skey": "@crypt_828c27e0_e98d62f6954235194f2b1252943f25ad", "DeviceID":"e141257009.76972", "Uin": "1564527827"}, "rr": "-888098293"} 其中rr (- + 9位随机数)Responsejson数据包含消息的所有信息,其中关注 FromUserName=@821c154488cdddbfb04141aa8f681174305d21d67a24cfd6eca3e77a152e52ff 消息发送者以及 Content消息内容-发送消息POST https:///cgi-bin/mmwebwx-bin/webwxsendmsg?lang=zh_CN&pass_ticket=0%2BoUqOWdYEen6oDVFEIv5ncIIaJcWs1LeSi69C8tUTgcp36azGAl6a8uT02PiaHuParam pass_ticket, json数据{"Msg": {"FromUserName": "@9e718026650771acd6d759922e000fafceaa1a5fda83aea7b3b70bc1bd6c3774", "LocalID":"14867488199507670", "ClientMsgId": "14867488199507670", "ToUserName": "@9e718026650771acd6d759922e000fafceaa1a5fda83aea7b3b70bc1bd6c3774","Content": "消息内容", "Type": "1"}, "BaseRequest": {"Sid": "5Qn7rswOtPRHFw92", "Skey": "@crypt_828c27e0_ad386b3d4d68a282eda03d7d5b2d3104","DeviceID": "e397471984070243", "Uin": "1564527827"}, "Scene": "0"} 其中LocalID,ClientMsgId 为13位时间戳加上5位随机数Response 返回响应的状态码,发送成功会返回 LocalID 和 ClientMsgID以上就是我们需要的知道的,当然其他⽐如读取所有联系⼈等都是⼤同⼩异,这⾥就不多赘述了。
6实现微信公众号自动回复功能
6实现微信公众号⾃动回复功能⼀实先⾃动回复功能的逻辑步骤 1 处理POST类型的控制逻辑,接收XML的数据包; 2 解析XML数据包(获得数据包的消息类型或者是事件类型); 3 拼装我们定义好的消息; 4 包装成XML格式; 5 在5秒内返回回去⼆代码实操--实现关注公众号⾃动回复功能 本节代码参照上节课继续修改和完善,⽬录结构跟之前相同,新引⼊的模块raw-body使⽤npm install安装⼀下即可,app.js启动⽂件和util.js不做变动,主要修改⼀下generator.js⽂件,以及在generator.js同级⽬录下新建wechat.js⽂件和tools.js⽂件。
wechat.js⽂件是将前⼀节generator.js⽂件中票据部分的代码抽离出来单独放在⼀个⽂件中,具体代码如下:'use strict';// 引⼊模块var Promise = require('bluebird');var request = Promise.promisify(require('request'));//增加url配置项var prefix = 'https:///cgi-bin/';var api = {accessToken: prefix + 'token?grant_type=client_credential'};//利⽤构造函数⽣成实例完成票据存储逻辑function weChat(opts) {var that = this;this.appID = opts.appID;this.appSecret = opts.appSecret;this.getAccessToken = opts.getAccessToken;this.saveAccessToken = opts.saveAccessToken;//获取票据的⽅法this.getAccessToken().then(function(data) {//从静态⽂件获取票据,JSON化数据,如果有异常,则尝试更新票据try {data = JSON.parse(data);} catch (e) {return that.updateAccessToken();}//判断票据是否在有效期内,如果合法,向下传递票据,如果不合法,更新票据if (that.isValidAccessToken(data)) {Promise.resolve(data);} else {return that.updateAccessToken();}})//将拿到的票据信息和有效期信息存储起来.then(function(data) {//console.log(data);that.access_token = data.access_token;that.expires_in = data.expires_in;that.saveAccessToken(data);})};//在weChat的原型链上增加验证有效期的⽅法weChat.prototype.isValidAccessToken = function(data) {//进⾏判断,如果票据不合法,返回falseif (!data || !data.access_token || !data.expires_in) {return false;}//拿到票据和过期时间的数据var access_token = data.access_token;var expires_in = data.expires_in;//获取当前时间var now = (new Date().getTime());//如果当前时间⼩于票据过期时间,返回true,否则返回falseif (now < expires_in) {return true;} else {return false;};};//在weChat的原型链上增加更新票据的⽅法weChat.prototype.updateAccessToken = function() {var appID = this.appID;var appSecret = this.appSecret;var url = api.accessToken + '&appid=' + appID + '&secret=' + appSecret;return new Promise(function(resolve, reject) {//使⽤request发起请求request({url: url,json: true}).then(function(response) {var data = response.body;var now = (new Date().getTime());var expires_in = now + (data.expires_in - 20) * 1000;//把新票据的有效时间赋值给datadata.expires_in = expires_in;resolve(data);})})};//向外暴露weChatmodule.exports = weChat; generator.js⽂件进⾏精简后,添加判断对xml数据的格式化⽅法以及判断事件,添加关注事件测试信息,具体代码如下:'use strict';// 引⼊模块var sha1 = require('sha1');var getRawBody = require('raw-body');var weChat = require('./wechat');var tools = require('./tools');// 建⽴中间件函数并暴露出去module.exports = function(opts, handler) {//实例化weChat()函数//var wechat = new weChat(opts);return function*(next) {//console.log(this.query);var that = this;var token = opts.token;var signature = this.query.signature;var nonce = this.query.nonce;var timestamp = this.query.timestamp;var echostr = this.query.echostr;// 进⾏字典排序var str = [token, timestamp, nonce].sort().join('');// 进⾏加密var sha = sha1(str);//使⽤this.method对请求⽅法进⾏判断if (this.method === 'GET') {// 如果是get请求判断加密后的值是否等于签名值if (sha === signature) {this.body = echostr + '';} else {this.body = 'wrong';};} else if (this.method === 'POST') {//如果是post请求也是先判断签名是否合法如果不合法直接返回wrongif (sha !== signature) {this.body = 'wrong';return false;};//通过raw-body模块可以把把this上的request对象也就是http模块中的request对象去拼装它的数据最终拿到⼀个buffer的xml数据//通过yield关键字获取到post过来的原始的XML数据var data = yield getRawBody(this.req, {length: this.length,limit: '1mb',encoding: this.charset});//console.log(data.toString());打印XML数据(当微信公众号有操作的时候终端可以看到返回的XML数据)//tools为处理XML数据的⼯具包使⽤tools⼯具包的parseXMLAsync⽅法把XML数据转化成数组对象var content = yield tools.parseXMLAsync(data);//console.log(content);打印转化后的数组对象//格式化content数据为json对象var message = tools.formatMessage(content.xml);console.log(message);//打印message//判断message的MsgType 如果是event 则是⼀个事件if (message.MsgType === 'event') {//如果是订阅事件if (message.Event === 'subscribe') {//获取当前时间戳var now = new Date().getTime();//设置回复状态是200that.status = 200;//设置回复的类型是xml格式that.type = 'application/xml';//设置回复的主体that.body = '<xml>' +'<ToUserName><![CDATA[' + message.FromUserName + ']]></ToUserName>' + '<FromUserName><![CDATA[' + message.ToUserName + ']]></FromUserName>' + '<CreateTime>' + now + '</CreateTime>' +'<MsgType><![CDATA[text]]></MsgType>' +'<Content><![CDATA[你好,同学!]]></Content>' +'</xml>';return;}}}}}; tools.js是处理XML数据的⼯具⽂件:'use strict';//引⼊模块var xml2js = require('xml2js');var Promise = require('bluebird');//导出解析XML的⽅法exports.parseXMLAsync = function(xml) {return new Promise(function(resolve, reject) {xml2js.parseString(xml, { trim: true }, function(err, content) {if (err) {reject(err);} else {resolve(content);};});});};//因为value值可能是嵌套多层的所以先对value值进⾏遍历function formatMessage(result) {//声明空对象messagevar message = {};//对result类型进⾏判断if (typeof result === 'object') {//如果是object类型通过Object.keys()⽅法拿到result所有的key 并存⼊keys变量中var keys = Object.keys(result);//对keys进⾏循环遍历for (var i = 0; i < keys.length; i++) {//拿到每个key对应的value值var item = result[keys[i]];//拿到keyvar key = keys[i];//判断item是否为数组或者长度是否为0if (!(item instanceof Array) || item.length === 0) {//如果item不是数组或者长度为0 则跳过继续向下解析continue;}//如果长度为1if (item.length === 1) {//拿到value值存⼊val变量var val = item[0];//判断val是否为对象if (typeof val === 'object') {//如果val为对象则进⼀步进⾏遍历message[key] = formatMessage(val);} else {//如果不是对象就把值赋给当前的key放⼊message⾥并去除收尾空格message[key] = (val || '').trim();}}//如果item的长度既不是0也不是1 则说明它是⼀个数组else {//把message的key设置为空数组message[key] = [];//对数组进⾏遍历for (var j = 0, k = item.length; j < k; j++) {message[key].push(formatMessage(item[j]));}}}}return message;}exports.formatMessage = function(xml) {return new Promise(function(resolve, reject) {xml2js.parseString(xml, { trim: true }, function(err, content) {if (err) {reject(err);} else {resolve(content);};});});};exports.formatMessage = formatMessage; 以上代码完成后,当关注微信测试公众号的时候,会⾃动回复『你好,同学!』的提⽰信息。
微信自动回复与自定义菜单操作流程(PPT 57张)
(1)首先,登陆第三方平台,找到已添加 好的账号,点击“编辑”,即可查看对应接 口地址(URL)与TOKEN。
(2)然后回到微信公众平台,点击主页面开 发者中心按钮,进入配置项,点击修改配置。
(3)将第三方平台的URL和Token粘贴复制进去,点 击提交,微信公众平台接口就与第三方平台接口连接 起来了。(无论使用哪一种第三方平台,只需要将你 使用的第三方平台的服务器配置即URL和TOKEN连接 到微信公众平台,则可使用第三方平台功能。)
激励学生学习的名言格言 220、每一个成功者都有一个开始。勇于开始,才能找到成功的路。 221、世界会向那些有目标和远见的人让路(冯两努——香港著名推销商) 222、绊脚石乃是进身之阶。 223、销售世界上第一号的产品——不是汽车,而是自己。在你成功地把自己推销给别人之前,你必须百分之百的把自己推销给自己。 224、即使爬到最高的山上,一次也只能脚踏实地地迈一步。 225、积极思考造成积极人生,消极思考造成消极人生。 226、人之所以有一张嘴,而有两只耳朵,原因是听的要比说的多一倍。 227、别想一下造出大海,必须先由小河川开始。 228、有事者,事竟成;破釜沉舟,百二秦关终归楚;苦心人,天不负;卧薪尝胆,三千越甲可吞吴。 229、以诚感人者,人亦诚而应。 230、积极的人在每一次忧患中都看到一个机会,而消极的人则在每个机会都看到某种忧患。 231、出门走好路,出口说好话,出手做好事。 232、旁观者的姓名永远爬不到比赛的计分板上。 233、怠惰是贫穷的制造厂。 234、莫找借口失败,只找理由成功。(不为失败找理由,要为成功找方法) 235、如果我们想要更多的玫瑰花,就必须种植更多的玫瑰树。 236、伟人之所以伟大,是因为他与别人共处逆境时,别人失去了信心,他却下决心实现自己的目标。 237、世上没有绝望的处境,只有对处境绝望的人。 238、回避现实的人,未来将更不理想。 239、当你感到悲哀痛苦时,最好是去学些什么东西。学习会使你永远立于不败之地。 240、伟人所达到并保持着的高处,并不是一飞就到的,而是他们在同伴们都睡着的时候,一步步艰辛地向上爬 241、世界上那些最容易的事情中,拖延时间最不费力。 242、坚韧是成功的一大要素,只要在门上敲得够久、够大声,终会把人唤醒的。 243、人之所以能,是相信能。 244、没有口水与汗水,就没有成功的泪水。 245、一个有信念者所开发出的力量,大于99个只有兴趣者。 246、环境不会改变,解决之道在于改变自己。 247、两粒种子,一片森林。 248、每一发奋努力的背后,必有加倍的赏赐。 249、如果你希望成功,以恒心为良友,以经验为参谋,以小心为兄弟,以希望为哨兵。 250、大多数人想要改造这个世界,但却罕有人想改造自己。
【易语言】开发微信群AI人工智能机器人,实现自动对话,智能回复聊天的功能
【易语⾔】开发微信群AI⼈⼯智能机器⼈,实现⾃动对话,智能回复聊天的功能⼯具我们已经打包好了,关注公众号“花花爱软件”回复“博客园”下载哈。
⽀持⼀下,码字不易需要的⼯具:l 易语⾔l 精易模块V8l 精易助⼿,朋友们⼤家好,我是今天的讲师,花花爱⼈,今天教⼤家⽤易语⾔开发⼀款属于你⾃⼰的,微信AI对话机器⼈,可以实现⾃动对话,群聊回复,⾃动监控微信消息,⾃动创建拉群的功能,废话不多讲,我们进⼊正题。
咋们先设计下软件的界⾯吧。
界⾯咋们已经设计好了主要就两⼤功能⼀键拉群和消息回复然后写核⼼代码我们双击⼀键启动按钮然后打开微信,获取窗⼝句柄,坐标等数据、建议⽤精易助⼿去获取,⽐较准确两个值都获取好了相对窗⼝:408 ,558微信窗⼝句柄:459122然后就把这些数据整合到我们的代码⾥⾯这就是代码,功能⾃⼰脑补继续写这个命令的功能是,⾃动向微信编辑框输⼊消息,来实现⾃动回复消息的功能我们先测试下效果吧,点击按钮后,会不会⾃动输⼊⽂字。
看来是可以的,点击按钮后⾃动向编辑框内输⼊了hello的字样接下来就是写发送的代码了此命令就可以实现模拟回车的效果,也就是发送消息了那这样就基本实现了,微信⾃动发消息回消息的功能了还有就是⾃动拉群的效果,其实这个⽐较简单我们下期在讲吧,时间有限。
直接分享拉群部分的代码:.版本 2.⽀持库 spec.⽀持库 eAPI.⽀持库 shellEx.程序集窗⼝程序集_启动窗⼝.⼦程序 _按钮1_被单击.判断开始 (单选框1.选中=真)指定⼿机号拉群 ().默认加群操作 ().判断结束.⼦程序指定⼿机号拉群.局部变量⼿机号, ⽂本型, , "0".局部变量 i, 整数型⼿机号=分割⽂本 (编辑框1.内容, #换⾏符, ).计次循环⾸ (取数组成员数 (⼿机号), i)⿏标_单击 (到整数 (编辑框_句柄.内容), 283, 34, 1)延迟 (2000)⿏标_单击 (到整数 (编辑框_句柄.内容), 137, 33, 1)置剪辑板⽂本 (⼿机号 [i])延迟 (1000)模拟按键 (#Ctrl键, #V键, ).计次循环尾 ().⼦程序 __启动窗⼝_创建完毕注册热键 (_启动窗⼝.取窗⼝句柄 (), 标签3.取窗⼝句柄 (), 0, #F1键)注册热键 (_启动窗⼝.取窗⼝句柄 (), 标签4.取窗⼝句柄 (), 0, #F2键).⼦程序加群操作.局部变量 i, 整数型⿏标_单击 (到整数 (编辑框_句柄.内容), 282, 34, 1)延时 (3000).计次循环⾸ (到整数 (编辑框_⼈数.内容), i)⿏标_单击 (到整数 (编辑框_句柄.内容), 151, 500, 1)延时 (2000)模拟按键 (40, , ).计次循环尾 ()信息框 (“准确⽣成群”, 0, , )延迟 (3000)⿏标_单击 (到整数 (编辑框_句柄.内容), 418, 452, 1).⼦程序 _按钮2_被单击.判断开始 (编辑框2.内容= “554480179”)信息框 (“临时注册成功”, 0, , ).默认按钮1.禁⽌=假单选框1.禁⽌=假.判断结束.⼦程序 _标签3_反馈事件, 整数型.参数参数⼀, 整数型.参数参数⼆, 整数型暂停 ().⼦程序 _标签4_反馈事件, 整数型.参数参数⼀, 整数型.参数参数⼆, 整数型编辑框_句柄.内容=到⽂本 (取⿏标所在窗⼝句柄 ())。
python wxbot 使用案例
python wxbot 使用案例Python wxbot 是一个基于 Python 的微信个人号 API,可以用于实现微信个人号的自动化操作。
下面列举了一些使用 wxbot 的案例,展示了它的功能和灵活性。
1. 自动回复消息通过 wxbot,可以实现自动回复消息的功能。
当收到消息时,可以编写代码来根据消息内容进行判断,并给出相应的回复。
例如,可以设置一个关键词回复功能,当收到包含特定关键词的消息时,自动回复相应的内容。
2. 发送定时提醒wxbot 可以通过定时任务功能,定时发送提醒消息。
例如,可以设置每天早上发送天气预报,或者每个小时发送一次工作提醒。
3. 群发消息wxbot 可以实现批量发送消息的功能。
可以通过编写代码,读取一个文本文件中的消息,然后将这些消息发送给指定的好友或群组。
4. 监控微信消息通过 wxbot,可以实现对微信消息的监控功能。
可以编写代码来实时监控微信消息的到来,并根据需要进行相应的处理。
例如,可以监控微信群中的关键词,当有人发送包含关键词的消息时,自动进行提醒或处理。
5. 自动添加好友wxbot 可以实现自动添加好友的功能。
可以编写代码来根据一定的规则自动添加新的好友,并发送欢迎消息。
6. 自动转发消息通过 wxbot,可以实现自动转发消息的功能。
可以编写代码来监听指定的好友或群组,并将收到的消息自动转发给另外的好友或群组。
7. 管理群组wxbot 可以实现对微信群组的管理功能。
可以编写代码来自动邀请成员加入群组,或者将指定的成员移出群组。
8. 自动抢红包通过 wxbot,可以实现自动抢红包的功能。
可以编写代码来监听红包消息,并自动点击抢红包按钮。
9. 自动爬取微信公众号文章wxbot 可以实现自动爬取微信公众号文章的功能。
可以编写代码来模拟用户操作,自动登录微信并爬取指定公众号的文章内容。
10. 自动发送朋友圈通过 wxbot,可以实现自动发送朋友圈的功能。
可以编写代码来模拟用户操作,自动登录微信并发布指定的朋友圈内容。
微信自动回复与自定义菜单操作流程(PPT 57页)
(2)消息自动回复
如果用户发送一些你没有在后台设定好的关键字或无效信息,系统就会发送这里的内容给用 户,用于提醒和帮助引导用户使用正确的关键字进行查询。这个功能就如同网站404错误页 面一样,提示没有该信息,并引导用户回到正确的使用途径上。所以这里也是必须要设置的, 否则当用户发送一些你没有设置的关键字,系统是不会反馈任何信息给用户的,这样会给用 户一个错觉,你的账号不能用了,从而导致取消关注。
(3)选中【回复文字】,即可进入编辑界面,在“自动回复内容”编辑框里可以添加文字 与表情,对关注用户的一些欢迎与引导。
必须提出的是,第三方平台关注时可回复超链接,超链接能够使关注用户能够快速的到达所指定 的界面,如活动界面,方面快捷体验好。具体设置如下。
*1.选中所要指定给用户的文章或活动链接,复制下来。
(2)配置好后,即可进行自定义菜单的设置。乐享自定义菜单设置简单明了。点击【添加主菜 单】,即可进行编辑,如图中“御景半岛”“房贷计算”“联系我们”均为主菜单,主菜单显示 顺序“从左到右”分别为数字“由小到大”
注:若“主菜单”下无“子菜单”, 可直接填写“关键词”或者“网址链 接”,用户点击后即可直接跳转。
6章
乐享接口配置
目前微信平台内的基础功能已经远远不能满足用户的需求,因此第三方平台的使用就显得尤为 重要。目前主要讲的第三方平台为“乐享”。
(1)首先,登陆第三方平台,找到已添加 好的账号,点击“编辑”,即可查看对应接 口地址(URL)与TOKEN。
(2)然后回到微信公众平台,点击主页面开 发者中心按钮,进入配置项,点击修改配置。
(2)点击主菜单的加号,在弹出窗口输入菜单名,就可以添加一个新的子菜单。
(子菜单选项:铅笔为修改菜单名,废纸篓为删除该子菜单,子菜单下无法再建子菜单,每个主菜单最多只能新建5个子 菜单。)
微信公共平台二次开发 100行代码教你做微信聊天机器人
100行代码教你做微信聊天机器人
首先要去微信公众平台申请一个帐号
/
申请一个SAE应用
设置微信接口地址
微信平台->设置->回复设置->自定义回复->调用公众平台消息接口>>
url写这个url,token随便定一个"helloczq"
开启SAE服务
由于我们需要教机器人一些日常用语,所以我们必须要一个存储他们的空间,这里暂时使用SAE的kvdb服务,请先到sae开启。
定义规则
我们先给他定义一个简单的规则,比如
求助是
help
教他学东西是
"_" + 问题+ ":" + 回答
比如:_hi:hello,就是回复hello给hi
如果一样东西有很多人教他,机器人应该优先回复旧的东西。
聊天代码
规则定好了,我们先写一个聊天的类
接入微信
其实就是把上面那个类和官方的php代码拼起来... 以下是全部代码,包括验证部分。
微信公众平台的API开发
微信公众平台的API开发Introduction微信公众平台的API(Application Programming Interface)开发是指利用微信提供的接口和工具,通过编程来实现与微信公众平台的交互和开发。
本文将介绍微信公众平台API开发的基本原理、常用功能以及开发流程等内容。
一、基本原理微信公众平台的API使用基于HTTPS协议的XML或JSON数据格式进行数据交互。
开发者可以通过调用微信提供的不同接口,实现与用户的消息交互、自定义菜单、群发消息等功能。
二、常用功能1. 消息回复开发者可以通过API接口实现对用户发送消息的自动回复。
根据用户发送的消息类型(文本、图片、语音、视频等),开发者可以编写相应的回复程序,实现与用户的实时交互。
2. 自定义菜单通过API开发,开发者可以创建自定义菜单,对用户提供更加便捷的操作。
菜单可以包含点击菜单、跳转链接、扫码等各种功能,满足不同的业务需求。
3. 网页授权利用API开发,可以实现用户在微信内访问网页时的授权登录功能。
开发者可以获取用户的openid,进而实现个性化的服务和推送。
4. 群发消息通过API开发,开发者可以实现对用户群发消息的功能。
可以根据用户的标签、性别、地理位置等条件进行精准定向推送,提升用户体验和营销效果。
三、开发流程1. 注册开发者账号在微信公众平台上注册开发者账号,获取AppID和AppSecret 等开发所需的信息。
同时,配置服务器信息,以便接收和处理微信服务器发送的消息。
2. 接入验证将服务器与微信公众平台进行接入验证,确保服务器可以与微信服务器正常通信。
3. 事件与消息的接收与响应根据接收到的消息类型,编写相应的处理程序,实现消息的接收和响应。
可以根据开发需求,实现不同类型消息的自动回复或其他操作。
4. 菜单的创建与管理通过API开发,创建自定义菜单,设置菜单点击事件与跳转链接等功能。
可以根据菜单的需求,实现不同场景下的用户操作。
微信公众平台关键词自动回复解决方案
关键字自动回复设置方法
登录微信公众平台=》功能=》自 动回复=》关键词自动回复=》添 加规则,即可添加相应的关键词
自动回复信息。
击号
k
1、文字中可以输入网页链接地 址,但不支持设置超链接。
2、 关注用户发送消息命中设置关 键字回复规则后会有5秒钟的响应
时间。
3、规则名称自己设定(作为区 分作用);
微信公众平台认证与非认证用户 的关键字自动回复设置规则上限 为200条规则(每条规则名,最多 可设置60个汉字),每条规则内 最多设置10条关键字(每条关键 字,最多可设置30个汉字)、5条 回复(每条回复,最多可设置300
个汉字)。
、
您可通过微信公众平台设置多个
关键字,如订阅用户发送的信息 中含有您设置的关键字,则系统
微信公众平台关键词自动回复 解决方案
关键词自动回复功能的介绍
在微信公众平台设置关键词自动 回复,可以通过添加规则(规则 名最多为60字数),订阅用户发 送的消息内如果有您设置的关键 字(关键字不超过30字数,可选 择是否全匹配如设置了全匹配则 必须关键字全部匹配才生效), 即可把您设置在此规则名中回复
随机回复。
3)多条回复设置方法:进入编辑 者模式,点击关键词自动回复=》 添加规则=》输入关键词匹配内容 后,再添加内容,然后选择“回
复全部”即可。
1、若选择了全匹配,在编辑页 面则会显示“已全匹配”:
对方发送的内容与设置的关键字 须完全一样,才会触发关键字回 复,不能多一个字符也不能少一 个字符。比如设置“123”, 仅回复
会自己回复。
同一规则中可设置5条回复内容, 如您设置了“回复全部”,粉丝 发送信息中含有您设置的关键字, 会将您设置的多条回复会全部发 送,若未设置“回复全部”,则
微信小程序客服智能回复示例代码(PHP)
微信⼩程序客服智能回复⽰例代码(PHP)业务逻辑⽂件编写use think\Action; //⾃⼰封装的curl⽅法,详情看附录define("TOKEN", "你设置的token");class Customer extends Controller{//校验服务器地址URLpublic function checkServer(){if (isset($_GET['echostr'])) {$this->valid();}else{$this->responseMsg();}}public function valid(){$echoStr = $_GET["echostr"];if($this->checkSignature()){header('content-type:text');echo $echoStr;exit;}else{echo $echoStr.'+++'.TOKEN;exit;}}private function checkSignature(){$signature = $_GET["signature"];$timestamp = $_GET["timestamp"];$nonce = $_GET["nonce"];$token = TOKEN;$tmpArr = array($token, $timestamp, $nonce);sort($tmpArr, SORT_STRING);$tmpStr = implode( $tmpArr );$tmpStr = sha1( $tmpStr );if( $tmpStr == $signature ){return true;}else{return false;}}public function responseMsg(){//此处推荐使⽤file_get_contents('php://input')获取后台post过来的数据$postStr = file_get_contents('php://input');if (!empty($postStr) && is_string($postStr)){$postArr = json_decode($postStr,true);if(!empty($postArr['MsgType']) && $postArr['MsgType'] == 'text'){//⽤户给客服发送⽂本消息if($postArr['Content'] == 7){//接收到指定的⽂本消息,触发事件$fromUsername = $postArr['FromUserName']; //发送者openid$media_id = '上传到微信服务器的图⽚id,看第三部分'; //输⼊想要回复的图⽚消息的media_id$this->requestIMAGE($fromUsername,$media_id);}}else if(!empty($postArr['MsgType']) && $postArr['MsgType'] == 'image'){//⽤户给客服发送图⽚消息,按需求设置}else if($postArr['MsgType'] == 'event' && $postArr['Event']=='user_enter_tempsession'){//⽤户进⼊客服事件$fromUsername = $postArr['FromUserName']; //发送者openid$content = '你好,欢迎来到***客服,有什么能帮助您的么';$this->requestTXT($fromUsername,$content);}else{exit('error');}}else{echo "empty";exit;}}//⽂本回复public function requestTXT($fromUsername,$content){$data=array("touser"=>$fromUsername,"msgtype"=>"text","text"=>array("content"=>$content));$json = json_encode($data,JSON_UNESCAPED_UNICODE);$this->requestAPI($json);}//图⽚回复public function requestIMAGE($fromUsername,$media_id){$data=array("touser"=>$fromUsername,"msgtype"=>"image","image"=>array("media_id"=>$media_id));$json = json_encode($data,JSON_UNESCAPED_UNICODE);$this->requestAPI($json);}public function requestAPI($json){$access_token = $this->get_accessToken();$action = new Action(); //⾃⼰封装的curl⽅法,详情看附录$url = "https:///cgi-bin/message/custom/send?access_token=".$access_token;$output = $action->curl_post($url,$json);if($output == 0){echo 'success';exit;}}//调⽤微信api,获取access_token,有效期7200spublic function get_accessToken(){$url = 'https:///cgi-bin/token?grant_type=client_credential&appid=你的appid&secret=你的秘钥'; //替换成⾃⼰的⼩程序id和secret $res = file_get_contents($url);$data = json_decode($res,true);$token = $data['access_token'];return $token;}}上传回复图⽚到微信服务器这个是临时的素材接⼝,只能存在3天,⽬前⼩程序不⽀持永久素材上传,只有公众号⽀持public function uploadWxMedia(){$token = $this->get_accessToken();$type = "image";$filepath = Env::get('root_path').'public\\assets\\imageName.png'; //⽂件在服务器的绝对路径,按⾃⼰存放位置修改$data = array("media"=>new \CURLFile($filepath)); //php5.6以上必须⽤这种⽅法上传⽂件$url = "https:///cgi-bin/media/upload?access_token=".$token."&type=".$type;$action = new Action(); //封装的curl⽅法,看附录$result = $action->curl_post($url,$data);print_r($result);}//调⽤微信api,获取access_token,有效期7200spublic function get_accessToken(){$url = 'https:///cgi-bin/token?grant_type=client_credential&appid=你的appid&secret=你的秘钥'; //替换成⾃⼰的⼩程序id和secret $res = file_get_contents($url);$data = json_decode($res,true);$token = $data['access_token'];return $token;}访问 uploadWxMedia() ⽅法就会把设置好的图⽚上传,会返回⼀个json数据:{"type":"image","media_id":"LTbNsi***************JqG","created_at":1558062553}其中的 media_id 就是⽤来填写进第⼆步的回复图⽚中的值附录封装的curl⽅法namespace think;class Action{//get⽅式请求接⼝public function get_json($url){$data = file_get_contents($url);//转换成数组$data = json_decode($data,true);//输出return $data;}//post⽅式请求接⼝public function curl_post($url,$data,$headers = null){//$data 是⼀个 array() 数组;未编码$curl = curl_init(); // 启动⼀个CURL会话if(substr($url,0,5)=='https'){// 跳过证书检查curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);//只有在CURL低于7.28.1时CURLOPT_SSL_VERIFYHOST才⽀持使⽤1表⽰true,⾼于这个版本就需要使⽤2表⽰了(true也不⾏)。
python实现微信自动回复功能
python实现微信⾃动回复功能本⽂实例为⼤家分享了python实现微信⾃动回复的具体代码,供⼤家参考,具体内容如下新年到了,不想让⼀早上给你发送祝福的⼈⼼⾥⼀阵寒风,可以秒回复对⽅的话,试试下⾯的python程序可以帮你解决这个问题。
预装:python2.x或3.xpycharmpip install itchat pillow桌⾯新建⼀个⽂件我们叫做newYear.py⽂件打开它,⽤刚刚下载好的pyCharm软件将下⾯的代码复制过去:# encoding = utf8import itchat,time,refrom itchat.content import *# 如果对⽅发的是⽂字,则我们给对⽅回复以下的东西@itchat.msg_register([TEXT])def text_reply(msg):match = re.search('年',msg['Text'])if match:itchat.send(('那我就祝你狗年⼤吉⼤利,新的⼀年事事顺⼼'),msg['FromUserName'])# 如果对⽅发送的是图⽚,⾳频,视频和分享的东西我们都做出以下回复。
@itchat.msg_register([PICTURE,RECORDING,VIDEO,SHARING])def other_reply(msg):itchat.send(('那我就祝你狗年⼤吉⼤利,新的⼀年事事顺⼼'),msg['FromUserName'])itchat.auto_login(hotReload=True)itchat.run()这个程序将会⼀直在后台运⾏着,如果pycharm不被你关闭或者不出现断⽹的情况下都是可以的。
点击运⾏之后的事情:①出现QR.png弹出图⽚②使⽤微信扫⼀扫扫码登录,前提是退出之前的电脑登录的微信哦,否则会没有反应滴。
PHP微信开发之微信消息自动回复下所遇到的坑
微信回复原理:当普通微信用户向公众账号发送消息时,微信服务器首先收到用户发送的消息;然后将用户信息和消息打包成XML格式的数据包,再将这个XML数据包通过POST 方法提交到开发者设置的URL上。
疑问一:为何使用$GLOBALS["HTTP_RAW_POST_DA TA"]保存POST过来的数据,而非$_POST数组?回答:POST只能保存标准的数据类型,对于XML、SOAP或Application/Octet-steam之类的内容则无法解析。
而$GLOBALS["HTTP_RAW_POST_DATA"]和$_POST是一样的,如果POST过来的数据PHP能够识别,则可以用$GLOBALS["HTTP_RAW_POST_DA TA"]来接收。
疑问二:simplexml_load_file()各参数和返回值是什么?回答:参数含义string:需要处理的XML字符串。
class:用来指定新对象,通常设置为"SimpleXMLElement",生成一个简单XML元素的类。
options:指定附加的Libxml参数,通常设置为常量LIBXML_NOCDA TA,表示把CDATA 设置为文本节点。
ns:一般省略is_prefix:一般省略函数执行完成后返回SimpleXMLElement类的一个对象。
功能:公众号只接受文字消息,且做出相应的文字回复。
<span style="font-family:Courier New;font-size:14px;"><?php define("TOKEN","weixin"); $weixinObj = new Wechat(); $weixinObj->valid(); class Wechat{ public function valid(){ $echoStr = $_GET['echostr']; //如果是第一次接入 if($this->checkSignature() && $echoStr ){ echo $echoStr; exit; }else{ $this->responseMsg(); } } //校验方法 private function checkSignature(){ $signature = $_GET['signature']; $timestamp = $_GET['timestamp']; $nonce = $_GET['nonce']; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode($tmpArr); $tmpStr = sha1($tmpStr); if($tmpStr == $signature){ return true; }else{ return false; } } /* 普通文本消息 <xml> <ToUserName><![CDATA[toUser]]></ToUserName> <FromUserName><![CDA TA[fromUser]]></FromUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[text]]></MsgType> <Content><![CDA TA[this is a test]]></Content> </xml> */public function responseMsg(){ //获取微信服务器POST请求中的数据 $postStr = $GLOBALS["HTTP_RAW_POST_DA TA"]; if( !empty($postStr) ){ $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDA TA); $fromUser = $postObj->FromUserName; $toUser = $postObj->ToUserName; $keyword = trim($postObj->Content); $time = time(); $template = "<xml> <ToUserName><![CDATA[%s]]></ToUserName> <FromUserName><![CDA TA[%s]]></FromUserName> <CreateTime>%s</CreateTime> <MsgType><![CDATA[%s]]></MsgType> <Content><![CDA TA[%s]]></Content> </xml>"; if( strtolower($postObj->MsgType)!='text' ){ $msgType = "text"; $content = "我只接受文本消息"; }else{ $msgType = "text"; if( !empty($keyword) ){ $content = "您发送的消息是:".$postObj->Content; }else{ $content = "请输入关键字";//消息为空 } } $info = sprintf($template, $fromUser, $toUser, $time, $msgType, $content); echo $info; }else{ echo ""; exit; } } }</span>功能:公众号只接受图片消息,且做出相应的文字回复。
编写微信自动回复机器人示例
要编写一个微信自动回复程序,你需要按照以下步骤进行:
安装必要的库:首先,你需要安装一些必要的库,这些库可以帮助你与微信通信并获取有关微信消息的信息。
你可以使用Python 的第三方库wxpy 来实现这一目的。
你可以使用以下命令安装该库:
pip install wxpy
初始化微信机器人:接下来,你需要初始化一个微信机器人,并让其登录到你的微信账号中。
你可以使用以下代码来实现这一目的:
from wxpy import Bot
bot = Bot()
处理消息:接下来,你需要处理接收到的消息,并根据需要自动回复。
你可以使用bot.register() 函数来注册一个消息处理函数,该函数将在接收到新消息时被调用。
例如,以下代码演示了如何注册一个处理函数,该函数将自动回复所有文本消息:
@bot.register(msg_types=TEXT)
def reply_to_message(message):
# 自动回复收到的消息
message.reply(f'你好,收到了你的消息:{message.text}')
启动机器人:最后,你需要启动机器人,让其开始监听消息并执行处理函数。
你可以使用bot.start() 函数来启动机器人。
bot.start()
到这里,你就已经编写好了一个微信自动回复程序。
你可以根据自己的需求来扩展这个程序,例如,你可以增加更多的处理函数来处理不同类型的消息,也可以使用更复杂的回复策略来提高回复的质量。
createwxacodeunlimitbytes 中scene -回复
createwxacodeunlimitbytes 中scene -回复如何使用createwxacodeunlimitbytes接口生成小程序码。
首先,我们需要了解一下createwxacodeunlimitbytes接口的基本使用方法。
这个接口是微信小程序官方提供的,用于生成小程序码的接口之一。
它接受一个包含场景值的字符串,可以用来识别用户和小程序之间的特定场景。
接口会返回一个包含小程序码的二进制数据,我们可以将其转换为图片进行展示和分发。
接下来,我们就来一步一步回答如何使用createwxacodeunlimitbytes 接口生成小程序码。
第一步,准备开发环境和调试工具。
为了能够调用createwxacodeunlimitbytes接口,我们首先需要有一个小程序的开发环境。
我们可以在微信开发者工具中创建一个新的小程序项目,或者使用已有的小程序项目。
在小程序项目中的必要文件中,我们需要找到app.json文件,在其中添加"wxacodeunlimit"权限,以获取接口调用的权限。
第二步,调用createwxacodeunlimitbytes接口。
在小程序的逻辑代码中,我们可以通过wx.request方法调用createwxacodeunlimitbytes接口。
为了方便阅读和管理代码,我们可以将接口调用封装成一个函数。
首先,我们需要在小程序代码中引入wx.request方法,通常可以通过添加下面的代码来实现:const wxRequest = require('wxRequest')然后,我们可以创建一个函数,例如createWxacodeUnlimit,用于封装接口调用的代码:const createWxacodeUnlimit = (scene) => {wxRequest({url: 'method: 'POST',data: {scene: scene,page: 'pages/index/index', 自定义页面路径,可选width: 430, 图片宽度,单位为像素,可选auto_color: false, 自动配置线条颜色,可选line_color: { r: '0', g: '0', b: '0' }, 线条颜色,auto_color 为false 时生效,可选is_hyaline: false 是否需要透明底色,可选},responseType: 'arraybuffer',success: res => {const base64 = wx.arrayBufferToBase64(res.data)const imageUrl = 'data:image/jpeg;base64,' + base64console.log('小程序码生成成功:', imageUrl)},fail: error => {console.error('小程序码生成失败', error)}})}这个函数中,我们首先调用wxRequest方法,通过POST请求访问createwxacodeunlimitbytes接口。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
参数说明:
$format:要格式化的字符串(微信中就是我们的xml数据)
$args:要格式化的变量列表,变量与变量之间通过逗号隔开,顺序不能颠倒
格式化类型:%d(格式化为整型)%s(格式化为字符串类型)
④把格式化后的xml数据返回到客户端,完成回复功能
案例
项目需求:用户在平台中输入?,系统自动弹出自定义回复文本信息如下:
$msgType==’video’ || $msgType==’shortvideo’视频消息
$msgType==’location’地理位置消息
$msgType==’link’链接消息(朋友圈分享的链接、我的收藏)
测试结果:
六
1
①组装XML格式的数据
②定义相关变量
③格式化XML格式的数据
要用到的知识点:sprintf函数
①分析文本消息接口XML模板
通过以上图解分析可知,如果MsgType节点为text,代表用户发送给微信公众平台的就是文本消息。
②定义一个$msgType变量,用于接收MsgType节点信息
③在回复接口中,判断$msgType这个变量并执行相关程序
编写完成后,通过SVN上传到BAE服务器,测试结果:
2
银行服务号码
建设银行:95533
工商银行:99588
农业银行:95599
当用户输入4,系统会自动弹出如下语句:
尊敬的用户,为了更好的为您服务,请将系统的不足之处反馈给我们。
反馈格式:@+建议内容
例如:@希望增加***号码
如果用户以@希望这种形式向平台输入信息,则返回如下语句:
感谢您的宝贵建议,我们会努力为您提供更好的服务!
4)通过属性来访问xml节点信息
5)根据接收的消息,设置返回值
以上代码代表当用户发送的关键词不为空时,系统会自动返回Welcome to wechat world!
五
虽然以上显示一共有7中消息类型,但是第4、第5种都是指视频消息,所以综合所述:只有6大类消息类型。
1
由于所有的信息都是以XML形式发送的,所以我们在分析消息类型时,第一点就应该读懂XML结构体。
②单击配置按钮,如下图所示:
③填写数据(三个表单)
④下载官方的api即可
如果想让微信公众平台与第三方BAE服务器进行交互,必须需要一个中间文件(微信api即可),我们可以在帮助中心找到该文件:
找到如下图所示代码,下载api接口:
下载解压后,如下图所示:
⑤复制wx_sample.php文件到BAE目录中并改名为api.php
平台地址:https:///
3
微信是基于点对点关系
微信公众平台是基于一对多关系
4
2013年6月速途研究院发布调查报告,22%的微信用户在使用订阅公众帐号功能,而只算微信有3亿用户,就约有6600多万用户在使用微信公众平台功能。
5
二
1
个人用户注册:
准备彩色手持身份证址:
高德地图、腾讯地址
八
1
在实际项目开发中,如果我们设定的关键词与用户输入的关键词不匹配时,系统默认没有任何响应,这样的体验度非常不好,为了解决这个问题,可以使用第三方机器人接口来实现对语言的对接。
2
1)微信小黄鸡(小贱鸡)
2)小九机器人
【1】特种服务号码
Байду номын сангаас【2】通讯服务号码
【3】银行服务号码
【4】用户反馈
当用户输入1,系统会自动弹出如下语句:
常用特种服务号码:
匪警:110
火警:119
急救中心:120
当用户输入2,系统会自动弹出如下语句:
常用通讯服务号码:
中移动:10086
中电信:10000
中联通:10010
当用户输入3,系统会自动弹出如下语句:
2
注册地址:,打开页面后,选择BAE基础版,效果如下图所示:
1)单击添加部署
2)设置完成后如下图所示:
等待状态改变为正常,代表已经创建成功。
3)使用SVN软件检出在线的BAE代码
然后使用SVN软件,检出该地址,如下图所示:检出过程中,需要提供账号和密码,作为检出密码,谨记!!!
服务号:企业注册的微信类型,适合企业平台,每月可以群发四条信息,另外如果服务器没有通过微信认证其也是具有微信自定义菜单的。
3
•编辑模式与开发模式
•两种是互斥的
•编辑模式是平台内置的web系统
•开发模式可以通过腾讯的API接口进行二次开发
1)编辑模式
2)开发者平台
4
①被添加自动回复(订阅回复或关注回复):当用户关注我们的微信公众平台时,系统会默认返回预先设定的内容,我们把这个回复就称之为”被添加自动回复“。
3)微软小冰机器人
4)图灵机器人
3
①注册图灵账号,注册完成后,官方会发送一个使用密钥,进入后单击左侧进入机器人接入链接:
②根据官方的API文档,定义一个tuling.php页面,编写代码如下:
③对接图灵机器人与微信公众平台
编写完成后,上传到服务器端,测试结果如下:
示例代码:
问号的判断形式:
运行结果:
输出1234返回结果,示例代码:
运行结果:
2
分析音乐回复接口的XML模板
①定义音乐回复接口的xml模板
②定义相关变量
③格式化XML数据
④输出返回数据到客户端
测试结果:
3
分析图文消息接口XML模板
①定义图文消息接口XML模板
②设置相关变量
③对XML数据进行格式化操作
3
•$longitude经度
•$latitude纬度
4
5
6
测试bAPI,如下图所示:
分析API接口:
①定义一个lbs.php页面,编写相关代码
②编写代码,如下图所示:
③整合lbs代码到微信api接口中
价值
一
1
1)2011年1月21日,腾讯推出微信(张小龙)
2)2012年8月20日,腾讯推出微信公众平台功能,同年11月开放第三方接口
3)2013年1月微信突破3亿,海外版wechat用户也达到7000万,以前和韩国客户沟通也是通过微信,可见微信已随处不在
2
微信公众平台是腾讯为了让用户申请和管理微信公众账号而推出的一个Web平台,而微信公众账号的操作管理在这个平台下进行。所有用户都在腾讯提供的统一微信公众平台下进行相关操作:
企业用户准备:
营业执照注册号、所在地、成立日期、营业期限、经营范围
微信公众帐号名称(中文名)一经注册,不得修改,一定要体现帐号特色又容易记忆的名称。功能介绍每月1次
注册成功后,需要7个工作日进行审核。
2
订阅号:个人用户注册的微信类型,适合自媒体类型的平台,每天可以群发一条信息,但是如果没有进行微信认证其是没有微信自定义菜单的。
①分析XML结构体
分析以上图解可知,如果用户发送的是图片消息,则MsgType节点为image
②定义$msgType节点(已定义)
③判断与执行
测试结果如下图所示:
3
在微信开发中,所有的接收接口都非常简单,只需要判断$msgType这个节点就可以实现对用户发送数据类型的判断,完整代码如下:
$msgType==’voice’语音消息
打开api.php文件,然后设置如下代码,代表开启自动回复功能:
编写成功后,通过SVN上传到服务器端,通过微信测试如下图所示:
四
1
2
3
4
默认情况下,自动回复接口是关闭的,必须通过以下代码开启回复功能:
分析responseMsg接口:
1)接收XML格式的数据
2)防止XXE攻击
3)使用SimpleXML解析xml数据
②关键词自动回复:当用户输入的关键词与我们设定的关键词相匹配时,系统会自动回复预先设定的内容,我们把这个回复就称之为”关键词自动回复“。
③消息自动回复:当用户输入的关键词与我们设定的关键词不匹配时,系统会自动回复预先设定的内容,我们把这个回复就称之为”消息自动回复“。
三
1
1)编辑模式
2)开发者模式
由上图分析可知,如果想实现微信开发,必须要具有BAE服务器与客户端SVN软件
④返回数据到客户端
测试结果:
在单图文的基础上实现多图文
测试结果:
说明:相对于单图文而言,多图文没有文章描述的显示,谨记!!!
七
1
LBS全称(Location Based Service),基于地理位置的服务
2
手机端相对于PC端,具有便于携带等优势,而且其内置的GPS芯片可以实时捕获到我们的地理位置信息。
4)修改代码后,通过SVN上传到服如下图所示:
但是这样非常麻烦,每次都需要手工更新,我们还可以单击weixin这个项目名称进入如下设置:
更改自动发布为On,如下图所示:
这样以后就不需要手工发布代码了。
3
①打开微信公众平台,进入基本配置选项:
⑥打开api.php文件,设置”接头暗号Token“
设置完成后,通过SVN进行上传
⑦对接微信公众平台与BAE服务器
打开基本配置选项,填写信息如下:
设置完成后,单击启用即可
到此,整个连接过程配置完毕!
4
默认情况下,api.php文件中,只开启了验证接口,但是其并没有开启自动回复接口,所以微信无任何响应。