精华内容
下载资源
问答
  • 如何开发微信公众号

    千次阅读 2014-12-11 17:15:22
    最近参与了公司的款微信产品开发,然后就自己个公众号玩玩,目前主要开发了智能机器人聊天、心理测试、旅游攻略查询、工资查询、游戏攻略查询、天气预报查询等几个功能,公众号名字叫:各种好玩。...

            最近参与了公司的一款微信产品开发,然后就自己也弄了个公众号玩玩,目前主要开发了智能机器人聊天、心理测试、旅游攻略查询、工资查询、游戏攻略查询、天气预报查询等几个功能,公众号名字叫:各种好玩。开发参考源码关注公众号后回复“源码”即可获取下载地址。


    1、你要申请一个微信公众号,申请资料不复杂,一般几天内就给你审核下来了。
    2、微信开发大多采用PHP开发,微信官方文档都是以PHP为案例的。我用的开发框架是 SpringMVC+iBATIS+mySql。这应该是目前比较主流的框架吧。
    3、怎么接入公众号呢?

    公众号审核通过以后就可以进入开发者中心,配置你的URL和token,提交配置URL正确响应微信发送的Token验证后就可以接入了。

    开发者提交信息后,微信服务器将发送GET请求到填写的URL上,然后你处理微信的请求参数返回指定的参数就可以验证成功了。
    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。
    接入这一块对新人来说可能有点复杂,具体代码看下面,接入完了之后其实就跟你普通web开发没什么区别了。

    关于SpringMVC、iBATIS框架的配置我就不细说了 网上有很多资料,也可以参考我给的源码自己动手配一下能够有个更加直观的映像
    下面我说下微信的接入和响应

    @RequestMapping(value="/weixin",method=RequestMethod.GET,produces="text/html;charset=UTF-8")
    public void checkWeixin(HttpServletRequest request,HttpServletResponseresponse) throws IOException{
       String echostr =request.getParameter("echostr");
       if (checkWeixinReques(request)&& echostr != null) {
         response.setHeader("Content-Type","application/octet-stream");
         response.setContentLength(echostr.length());
         response.getWriter().println(echostr);
       }
    }

    这是我token验证的代码,checkWeixinReques(request)方法用于校验signature、timestamp、nonce三个参数。排序、加密、比较。不出于安全考虑你也可以不校验直接返回echostr。具体方法见源码。

    4、如何POST处理消息和回复?
    当普通微信用户向公众账号发消息时,微信服务器将POST消息的XML数据包到开发者填写的URL上。我们可以用dom4j将XML数据解析处理。

    InputStream inputStream = request.getInputStream();
    SAXReader reader = new SAXReader();
    Document document = reader.read(inputStream);
    Element root = document.getRootElement();
    List<Element> elementList = root.elements();
    for (Element e : elementList)
    //遍历xml将数据写入map
    map.put(e.getName(), e.getText());
    inputStream.close();


    主要参数有toUserName、fromUserName、msgType、content等,具体参见微信官网文档http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5 或者源码。普通公众号你能获取到用户的唯一信息是用户对于你这个公众号的openId作为唯一标识符。
    解析出来后你就可以根据用户发送的内容content来做不同的业务处理了。处理完成之后你可以回复用户文本内容text或者图文类容news。
    文本消息格式如下:
    <xml>
    <ToUserName><![CDATA[toUser]]></ToUserName>
    <FromUserName><![CDATA[fromUser]]></FromUserName>
    <CreateTime>12345678</CreateTime>
    <MsgType><![CDATA[text]]></MsgType>
    <Content><![CDATA[你好]]></Content>
    </xml>
    其他格式见官网文档,可使用XStream将内容组装成XML格式。具体用法百度或者参见源码。

     

    5、下面拿我的一个菜单实例天气预报来简单说说吧

     

    天气预报网上有很多接口,我用的是百度的API,http://api.map.baidu.com/telematics/v3/weather?location=北京&output=json&ak=5slgyqGDENN7Sy7pw29IUvrZ
    你需要传3个参数过去,location是地址,output是数据返回方式可选json或者xml格式。用的是json格式,json数据结构你返回一个看下就清楚了。
    用GET方式请求之后你会得到一个String类型的json格式数据。
    以下是我对json数据jsonStr的处理示例。

    //json数据处理
    JSONObject jsonObj = JSONObject.fromObject(jsonStr);
    //获取状态
    String status = jsonObj.getString("status");
    String date = jsonObj.getString("date");
    if("success".equals(status)){
    //获取结果集合
    String results = jsonObj.getString("results");
    JSONArray jsonArray = JSONArray.fromObject(results);
    jsonObj = jsonArray.getJSONObject(0);
    String pm25 = jsonObj.getString("pm25");
    city = jsonObj.getString("currentCity");
    //获取指数集合
    String indexStr = jsonObj.getString("index");
    jsonArray = JSONArray.fromObject(indexStr);
    List<WeatherIndexVo> weatherIndexList = JSONArray.toList(jsonArray,newWeatherIndexVo(),
    new JsonConfig());
    StringBuffer weaIndexSb = new StringBuffer();
    for(WeatherIndexVo weatherIndexVo:weatherIndexList){
    if("穿衣".equals(weatherIndexVo.getTitle()) ||"运动".equals(weatherIndexVo.getTitle())){
    weaIndexSb.append(weatherIndexVo.getTitle()+":\n"+
    weatherIndexVo.getZs()+","+weatherIndexVo.getDes()+"\n");
    }
    }
    //获取天气集合
    String weatherStr = jsonObj.getString("weather_data");
    jsonArray = JSONArray.fromObject(weatherStr);
    List<WeatherVo> weatherList = JSONArray.toList(jsonArray,new WeatherVo(),
    new JsonConfig());
    StringBuffer weaSb = new StringBuffer();
    for(WeatherVo weatherVo:weatherList){
    weaSb.append(weatherVo.getDate()+":"+weatherVo.getWeather()+","
    +weatherVo.getWind()+","+weatherVo.getTemperature()+"\n");
    }
    respMsg = date+city+"天气:\r\n"+"PM2.5:"+pm25+"\n"+weaSb.toString()+"\r\n"
    +weaIndexSb.toString()+"\r\n查询其他地区请回复地名+天气,如:上海天气。";
    }else{
    respMsg = "亲,不好意思天气查询失败 %>_<% ";
    }


    展开全文
  • 于是想让婷主帮忙弄一下,口开了,可是总觉得这样太麻烦人家了,所以自己弄了下,虽然不算完美,但是也是一个实践过程。 首先进入自己的公众号,点击设置—>公众号设置–> 如图下载8cm的公众号二维码,然后下载...

    快快关注我吧.gif

    这几天工作上面该忙的也都忙完了,终于有空可以做做自己的事情.于是想到的第一件事就是把自己早已开通的公众号做个二维码扫描,让自己的公众号有点派头。于是想让婷主帮忙弄一下,口开了,可是总觉得这样太麻烦人家了,所以自己弄了下,虽然不算完美,但是也是一个实践过程。
    首先进入自己的公众号,点击设置—>公众号设置–>
    image.png

    image.png

    如图下载8cm的公众号二维码,然后下载指纹
    指纹.jpg

    第二步:这步很关键,也很简单,把指纹和公众号二维码放在一张图片上然后用自己写几个字。这步相信都没什么难度.
    image.png
    接下来要制作动态的二维码线。

    image.png

    image.png

    QQ图片20171220225142.png

    上图是红线我单独截屏下来的,有需要的可以拿走。
    选中两个忳,点击如下图标

    image.png

    再出来的过渡菜单,输入要添加的帧数,这个数值越大,移动的步数越多
    image.png
    将新出来的忳全部选中,点击其中一个设置时间,这里设置为0.2秒
    image.png

    点击菜单”文件”>>>“存储为web和设备多用格式”
    image.png

    好了大功告成。

    孙坚.gif

    展开全文
  • 微信公众号测试

    2019-06-23 11:44:19
    1.微信公众号剖析 随着微信的流行,就诞生出很多...目前大家接触到的就是订阅号,公众号,微站这三中类型,其实不管哪种,我们先清楚它的架构即可,下面是小编自己画的一个图,大家可以看看! 先看红色的箭头,是...

    1.微信公众号剖析

    随着微信的流行,就诞生出很多东西,比如说公众号,服务号,订阅号,微站,等等。
    因此对于刚入门的测试新童鞋来说微信公众号怎么测试是一件非常头疼的事情。

    如何做这个公众号号的测试,当然不是一句话就可以说清楚的,所以先来讲解一下!

    目前大家接触到的就是订阅号,公众号,微站这三中类型,其实不管哪种,我们先弄清楚它的架构即可,下面是小编自己画的一个图,大家可以看看!
    在这里插入图片描述
    先看红色的箭头,是用户通过微信公众号发起操作请求,那么这个链接就会返回这个请求到我们的后台或者是服务器,经过后台服务器处理之后,就会把数据或者是请求返回给微信公众号用户,就是这么简单。

    那么简单剖析下,微信公众号就只是一个媒介平台,我们最后要测试的还是我们自己的后台和自己的网站服务,所以要关注的还是自己的后台与数据。
    无论你是做接口测试还是功能测试,关注点千万不要留在微信公众号上移不开哟!

    下面是我自己总结的微信公众号测试点:

    2.微信公众号测试点

    基础功能点

    1.是否可以正常的关注和取消关注(至于用户的管理就是微信平台的事情了,就不需要我们去处理了)

    2.保证我们自己提供出去的二维码能够被用户识别,扫描后即可关注我们。

    3.用户回复关键字是否可以得到正确的回复(微信后台设置,也是我们需要进行测试的)

    4.用户是否可以查看往期文章,历史信息(保证用户有历史信息可以进行阅读,来了解我们的产品)

    5.群发用户是否可以收到我们的信息,这点也很重要!不然你编辑好的文章,用户收不到,虽然这个是微信后台的事情,但是我们也需要去负责的检查一下。

    拓展功能点(涉及到微站类型的)

    1.测试基础功能
    基础功能就要根据每个公众号的具体的需求了,比如说登陆,注册,支付,注册发送的验证码是否可以用等等,这些其实都是我们测试网站的形式是一样的!

    2.测试性能
    有时候像有些网站要进行一些秒杀活动,要进行性能测试,保证我们的请求API接口不崩溃。

    3.测试数据库
    测试之后要检测下数据库,是否数据有正常入库,或者是进行修改。

    4.测试界面的一些数据信息
    进行一些操作之后,就要去看看是否界面的信息有做实时的更新。

    5.界面检查
    比如说在不同的手机可能会有不同的展示,这个时候你就需要去检查下图片的自适应以及JS一些动态效果的检查(以前有一个数钱活动,由于手机不同,导致数钱本被卡住等等)。

    兼容性测试

    1.操作系统
    不同的操作系统的显示可能会不一样,需要进行操作系统测试。

    2.微信版本
    不同的微信版本的显示可能会不一样,微信版本经常更新,以最近的几个微信版本最后,微信版本不要太旧,最新的微信版本需要进行测试。

    其他

    1.网络信号差,连接反应。
    2.网络信号,网络连接超时处理。
    3.到无信号区域,点击访问服务号中的链接。
    4.其他…

    展开全文
  • 登录进微信公众号平台,首页最下面有个基本配置:进入基本配置后,会看到两个栏目,一个公众号开发信息,一个是服务器配置。这里主要讲如何进行服务器配置,公众号开发信息配置比较简单,就自己去操因为我已经配置...

    由于项目需要微信公众号的开发,弄了老半天,发现也不是那么难弄。

    对于微信公众号开发,首先要有开发者权限然后进行基本的配置。

    登录进微信公众号平台,首页最下面有个基本配置:

    进入基本配置后,会看到两个栏目,一个是公众号开发信息,一个是服务器配置。

    这里主要讲如何进行服务器配置,公众号开发信息配置比较简单,就自己去操作。

    要配置服务器,要将自己的IP添加到IP白名单,否则微信会将你的消息过滤掉。

    因为我已经配置过了服务器,所以页面有点不同,点击修改配置

    接下来按照图里面步骤

    因为服务器需要公网可以访问的域名并且要80和443端口,可以使用nat映射软件进行内网穿透(花生壳不能固定80端口,已经不能使用)

    然后进行服务器校验

    看一下官方文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319

    我摘取比较重要的信息:

     

    开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

    参数描述
    signature微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
    timestamp时间戳
    nonce随机数
    echostr随机字符串

    开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

    1)将token、timestamp、nonce三个参数进行字典序排序 2)将三个参数字符串拼接成一个字符串进行sha1加密 3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

     

    意思是说:对微信服务器发过来消息忠token、timestamp、nonce三个参数进行加密处理,然后加密得到的字符串与signature微信加密签名相比较,如果相等则返回echostr随机字符串。


    先下载微信官方的示例:https://wximg.gtimg.com/shake_tv/mpwiki/cryptoDemo.zip

    下面进行服务器环境搭建:

    在刚才下载的微信官方的示例将

    SampleCode\SampleCode\Java\src\com\qq\weixin\mp\aes\SHA1.java该类与其依赖类导入项目中,为方便操作可以直接将SampleCode\Java\src下的com包导入进去,后面根据哪些不需要用到的类删除。

     并且将SHA1类改为public,(有可能导入会是中文乱码,重新复制粘贴文字进去即可)

     

    新建一个servlet类(get方法用来给微信验证服务器,post用来业务逻辑):

    import java.io.IOException;
    import java.io.PrintWriter;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.HashMap;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import com.qq.weixin.mp.aes.AesException;
    import com.qq.weixin.mp.aes.SHA1;
    
    
    /**
     * Servlet implementation class test
     */
    @WebServlet("/test")
    public class test extends HttpServlet {
        private static final long serialVersionUID = 1L;
           
        /**
         * @see HttpServlet#HttpServlet()
         */
        public test() {
            super();
            // TODO Auto-generated constructor stub
        }
    
        /**
         * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            
            String signature=request.getParameter("signature");
            String timestamp=request.getParameter("timestamp");
            String nonce=request.getParameter("nonce");
            String echostr=request.getParameter("echostr");
            String token="somelog";//这里填基本配置中的token
            String jiami="";
             try {
                 jiami=SHA1.getSHA1(token, timestamp, nonce,"");//这里是对三个参数进行加密
            } catch (AesException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
             System.out.println("加密"+jiami);
             System.out.println("本身"+signature);
                PrintWriter out=response.getWriter();
                if(jiami.equals(signature))
                out.print(echostr);
            
        }
    
        /**
         * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
         */
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            // TODO Auto-generated method stub
            
        }
    
    }

    因为官方给的示例,SHA1类中getSHA1方法有四个参数token,  timestamp, nonce, encrypt,但是我们只有三个参数,根据观察代码可知,将第四个参数设置为“”不会影响操作。

    所以在调用getSHA1方法时,传入参数是token, timestamp, nonce,""

    最后将加密的字符串与signature进行比较,如果相等就返回echostr。

    服务器环境即搭建完毕。

    点击提交即可,显示提交成功即可

    这里需要强调一下,eclipse在自动创建servlet时会给get方法加上

    response.getWriter().append("Served at: ").append(request.getContextPath());

    这一句一定要删除,否则会一直验证失败。

    并且不能自己去结束response的输入流:out.flush()和out.close();会出现超时提示。

    展开全文
  • 的确,对于外行人来说,H5、公众号、小程序、App、官网……互联网的花样太多了,哪一个才是最适合自己的呢?今天,知道君就来给各位老板们科普一下,看看它们到底有什么区别,你应该如何进行选择。H5是什么?H5,...
  • 、关于微信公众号接入网址 这是从开发者文档上面下来的,下图就是接入的地方,在开发者中心-服务器的配置,看一下微信开发者文档是怎么说的 URL:就是你的服务器的URL(要能响应TOKEN验证,还要能在外网访问到...
  • 当初个公众号的本意就是为广大的开发者提供各种技术分享,发布最前沿的科技信息和技术。核心观念是:分享。认为只有分享,共享才能让我们开发者团队更强大。 好了,言归正传,进入今天的主题,菜鸟...
  • 提要:这篇文章里我们会写:1、如何一个聊天机器人进行抓包分析接口;2、如何将现成的聊天机器 API 部署到自己公众号上;3、如何实现接收语音消息并调用聊天机器人 API 自动回复文字;4、如何让机器人根据上下文...
  • 提要:这篇文章里我们会写:1、如何一个聊天机器人进行抓包分析接口;2、如何将现成的聊天机器 API 部署到自己公众号上;3、如何实现接收语音消息并调用聊天机器人 API 自动回复文字;4、如何让机器人根据上下文...
  • 在上篇文章写了如何配置服务器:https://blog.csdn.net/qq_36313726/article/details/81027366今天我就给大家说下如何获取用户发送消息并实现回复,自己过程走了许多坑。要实现消息获取和自动回复,需要...
  • 欢迎关注天善智能,我们是专注于商业智能BI,人工智能AI,大数据分析与挖掘领域的垂直社区,学习,问答、求职站式搞定! 对商业智能BI、大数据分析...作者: sergiojune公众号: 日常学Python上次机器人,反...
  • 当初个公众号的本意就是为广大的开发者提供各种技术分享,发布最前沿的科技信息和技术。核心观念是:分享。认为只有分享,共享才能让我们开发者团队更强大。好了,言归正传,进入今天的主题,菜鸟程序员如何才能...
  • 如何自己微信昵称后面加上一个缩小版的电话号码?效果就是这样的,下面说一下是怎样设置的,大家可以新知K公众号对话框 发送1109进行使用。我们打开后,这里输入自己的号码即可,有两种不同样式可以选择,一种是小...
  • 今年4月18号身份证就到期啦,赶紧抽个时间去补办一个,这种事情一般只能选在工作日,你工作别人也工作的时间段。这个是初中时期得身份证,都10年啦,这次在北京补办一下,老家是安徽的。又逢今年在京过年,我太难...
  • 最近建立了一个个人微信公众号,叫计算机视觉life,想要在个人CSDN博客界面左侧添加一下这个微信号的二维码,推广一下。  搜索了一下操作方法,发现添加微博的介绍有几篇,微博也开放了组件,相对容易。相比之下,...
  • 文章首发于微信公众号「非著名程序员」,欢迎大家关注。这是第 37 篇生财笔记。今天给大家讲一个把自己当做...昨天晚上我在「生财有术」社群看到亦仁发的帖子,竟然有人把自己的微信号换成财神的头像,把自己弄成财...
  • ​本文首发于微信公众号‘java学习每天一个知识点’ 最近有很多朋友反应面试时候比较慌乱,想要找一些面试的资源,壮一下自己的胆。在这里我没有收集阿里的面试题也没有收集华为的面试题,因为面试题其实都是...
  • 这是早先发布在个人公众号上的一篇技术文章,是自己看了区块链技术很多内容后,做的一个总结性的文章。 当开始技术探索和学习后,过了最初的入门期后。就像工作遇到瓶颈期一样,学习也是如此。会有一段时间,接触的...
  • 把13亿中国人民都拉到一个微信群里在技术上能实现吗? 4年后谷歌终于解释了 Chrome 中萌萌哒小恐龙的起源 为何一定要有自己的博客 如何选择平台 2. 公众号文章 推荐几个Vue开发必备插件,要收藏 1000 多个项目中的...
  • 欢迎关注我的公众号睿Talk,获取我最新的文章: 一、前言 我们开发用到的一些库都有自己特有的命令,如webpack,babel和jest等。通过给这些命令输入不同...新建一个文件夹cmd,然后建一个main.js文件,文件内容如下...
  • 大家好,今天分享的东西是我自己最近一个软件----B站代刷器(可以刷无限次)。顾名思义,这个软件是用来刷B站视频播放量的 。 在这里先声明:此软件仅供娱乐,禁止违法使用!!关注公众号:DGX杂学,在历史文章...
  • 读者根据自己需要选择性阅读,面试题是对理论知识的总结,让自己学会应该如何表达。 整理的仓库笔记目前还不全面,可能也会出现一些瑕疵问题,欢迎Star和提交issues。 :hourglass:面试注意点 面试有几点需注意:...
  • 近期可能不少人发现接到销售的电话变多了,开发商对于购房者的要求也没有那么强硬,接受三成首付的楼盘在逐渐增多,也有少数楼盘开始接受公积金贷款,对于购房者来说这些都是一个不错的转向,还没买到房的可以多多...

空空如也

空空如也

1 2
收藏数 31
精华内容 12
关键字:

如何自己弄一个公众号