精华内容
下载资源
问答
  • 微信公众平台开发者文档,整理自微信官方,有Word版本和PDF版本,全面、权威、最新,供公司不能上网的程序猿参考!
  • 微信公众平台开发者文档.pdf

    热门讨论 2015-02-24 13:18:24
    微信公众平台开发者文档.pdf,很齐全的微信开发资料,想学习微信开发的朋友可以作为很好的入门资料。
  • 官方地址: https://mp.weixin.qq.com/wiki/16/52e198333f5c127ddd5c45e875191b14.html

    官方地址: https://mp.weixin.qq.com/wiki/16/52e198333f5c127ddd5c45e875191b14.html

    展开全文
  • 随便搜了一下,都是官方网站提供的文档,还不一样 https://mp.weixin.qq.com/wiki/11/0e4b294685f817b95cbed85ba5e82b8f.html https://mp.weixin.qq.com/wiki/14/9f9c82c1af308e3b14ba9b973f99a8ba.html 让...
  • 准备工作,今天要介绍的是微信公众平台接收事件推送部分,从官方文档可以看出,微信公众平台提供了事件推送的功能,用户关注公众号 取消关注号都可以将内容推送到 开发者微信公众平台配置的url 中,开发者可以拿着...

    目录

    第一部分 启用开发者配置

    (1) 登录微信公众平台

    (2)配置IP 白名单

    (3)启用开发者配置

    (4)具体的代码调用部分

    第二部分 接收事件推送

    (1)接口

    (2) 业务逻辑类 

    (3)MessageUtil

    (4)打印结果:

    总结:


    前言:

    准备工作,今天要介绍的是微信公众平台接收事件推送部分,从官方文档可以看出,微信公众平台提供了事件推送的功能,用户关注公众号 取消关注号都可以将内容推送到 开发者在微信公众平台配置的url 中,开发者可以拿着这些信息作进一步的逻辑判断。

    第一部分 启用开发者配置

    步骤:

    (1) 登录微信公众平台

    首先需要登录 微信公众平台账号,成为微信公众平台的开发者,点击下图标注的地方可以进入开发者配置页面。

     

    (2)配置IP 白名单

    多个IP 的时候直接换行,这个需要配置  , 很重要, 如下图 ,我将我自己电脑上的ip 配置上去了。

     

    (3)启用开发者配置

    其中需要注意的是 Token 可以由开发者自定义,只需要 保证代码中的Token 和我下面的Token一致即可。

    (4)具体的代码调用部分

    • 4.1  接口调用方法需要是get 请求。
    package com.bos.controller.wechat;
    
    import com.bos.qiWechat.WXBizMsgCrypt;
    import com.bos.service.WeiService;
    import com.bos.util.WeiXinParamesUtil;
    import com.bos.wechat.SignUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.PrintWriter;
    
    /**
     * @Author tanghh
     * @Date 2020/4/3 10:12
     */
    @RestController
    @RequestMapping(value = "/wechat")
    public class WechatDeveloperController {
     
    
        /**
         * 确认请求来自微信服务器
         *
         * @param signature 微信加密签
         * @param timestamp 时间戳
         * @param nonce     随机数
         * @param echostr   随机字符串
         * @param signature
         * @param timestamp
         * @param nonce
         * @param echostr
         * @return
         */
        @RequestMapping(method = {RequestMethod.GET})
        public void doGet(
                @RequestParam(value = "signature", required = false) String signature,
                @RequestParam(value = "timestamp", required = false) String timestamp,
                @RequestParam(value = "nonce", required = false) String nonce,
                @RequestParam(value = "echostr", required = false) String echostr,
                HttpServletResponse response) throws Exception {
    
            if (SignUtil.checkSignature(signature, timestamp, nonce)) {
                response.getOutputStream().println(echostr);
                System.out.println("微信验证成功");
            }
        }
    
    
    }
    
    • 4.2 SignUtil
    package com.bos.wechat;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    /**
     * @Author: tanghh
     *
     */
    public class SignUtil {
        private static String token = "WinXinEBO";
    
        /**
         * 校验签名
         *
         * @param signature 签名
         * @param timestamp 时间戳
         * @param nonce     随机数
         * @return 布尔值
         */
        public static boolean checkSignature(String signature, String timestamp, String nonce) {
            String checktext = null;
            if (null != signature) {
                //对ToKen,timestamp,nonce 按字典排序
                String[] paramArr = new String[]{token, timestamp, nonce};
                Arrays.sort(paramArr);
                //将排序后的结果拼成一个字符串
                String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);
    
                try {
                    MessageDigest md = MessageDigest.getInstance("SHA-1");
                    //对接后的字符串进行sha1加密
                    byte[] digest = md.digest(content.toString().getBytes());
                    checktext = byteToStr(digest);
                } catch (NoSuchAlgorithmException e) {
                    e.printStackTrace();
                }
            }
            //将加密后的字符串与signature进行对比
            return checktext != null ? checktext.equals(signature.toUpperCase()) : false;
        }
    
        /**
         * 将字节数组转化我16进制字符串
         *
         * @param byteArrays 字符数组
         * @return 字符串
         */
        private static String byteToStr(byte[] byteArrays) {
            String str = "";
            for (int i = 0; i < byteArrays.length; i++) {
                str += byteToHexStr(byteArrays[i]);
            }
            return str;
        }
    
        /**
         * 将字节转化为十六进制字符串
         *
         * @param myByte 字节
         * @return 字符串
         */
        private static String byteToHexStr(byte myByte) {
            char[] Digit = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
            char[] tampArr = new char[2];
            tampArr[0] = Digit[(myByte >>> 4) & 0X0F];
            tampArr[1] = Digit[myByte & 0X0F];
            String str = new String(tampArr);
            return str;
        }
    
    
    }
    

    上面这些操作就可以开启开发者配置。ok

    第二部分 接收事件推送

    配置完上面的开发者配置以后,就可以做接收事件推送了! 我还是写在 WechatDeveloperController中

    dopost 中的方法就是用来接收微信服务器发送过来的消息

    (1)接口

    package com.bos.controller.wechat;
    
    import com.bos.qiWechat.WXBizMsgCrypt;
    import com.bos.service.WeiService;
    import com.bos.util.WeiXinParamesUtil;
    import com.bos.wechat.SignUtil;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.PrintWriter;
    
    /**
     * @Author tanghh
     * @Date 2020/4/3 10:12
     */
    @RestController
    @RequestMapping(value = "/wechat")
    public class WechatDeveloperController {
        @Autowired
        private WeiService weiService;
    
        /**
         * 确认请求来自微信服务器
         *
         * @param signature 微信加密签
         * @param timestamp 时间戳
         * @param nonce     随机数
         * @param echostr   随机字符串
         * @param signature
         * @param timestamp
         * @param nonce
         * @param echostr
         * @return
         */
        @RequestMapping(method = {RequestMethod.GET})
        public void doGet(
                @RequestParam(value = "signature", required = false) String signature,
                @RequestParam(value = "timestamp", required = false) String timestamp,
                @RequestParam(value = "nonce", required = false) String nonce,
                @RequestParam(value = "echostr", required = false) String echostr,
                HttpServletResponse response) throws Exception {
    
            if (SignUtil.checkSignature(signature, timestamp, nonce)) {
                response.getOutputStream().println(echostr);
                System.out.println("微信验证成功");
            }
        }
    
        /**
         * 处理微信服务器发来的消息
         *
         * @return     
         */
        @RequestMapping(method = {RequestMethod.POST})
        public void dopost(HttpServletRequest request) {
            // 调用核心业务类接收消息、处理消息
            weiService.wechatReceiveEventChange(request);
        }
    
    }
    

    (2) 业务逻辑类 

    需要注意的是:我在上面配置开发者配置的时候 选择的是明文模式,所以我在处理微信服务器发送过来的消息时并没有加密解密,而是直接将xml 转成map。

      /**
         * 微信开放平台--接收事件推送
         * 文档地址:https://developers.weixin.qq.com/doc/offiaccount/Message_Management/Receiving_event_pushes.html
         * @return
         */
        @Override
        public ResultData wechatReceiveEventChange(HttpServletRequest request) {
            ResultData resultData = new ResultData();
            try{
                //目前文档上记录的总共有6种事件类型
    //            a.(扫描带参数二维码事件)
    //            如果用户还未关注公众号,则用户可以关注公众号,关注后微信会将带场景值关注事件推送给开发者。
    //            如果用户已经关注公众号,则微信会将带场景值扫描事件推送给开发者。
    
                //1.解析微信发来的请求,解析xml字符串
                Map<String, String> requestMap = MessageUtil.xmlToMap(request);
                //获取返回的数据
                String event = requestMap.get("Event");
                String eventKey = requestMap.get("EventKey");
                String ticket = requestMap.get("Ticket");
               
            }catch (Exception e){
                resultData.setResult("false");
                resultData.setMessage("微信接收事件推送失败");
                logger.error("微信接收事件推送失败",e);
            }
            return resultData;
        }

    (3)MessageUtil

       /**
         * 将xml转换成map集合
         * @param request
         * @return
         * @throws IOException
         * @throws DocumentException
         */
        public static Map<String, String> xmlToMap(HttpServletRequest request) throws IOException, DocumentException {
            Map<String, String> map = new HashMap<String, String>();
            //使用dom4j解析xml
            SAXReader reader = new SAXReader();
            //从request中获取输入流
            InputStream ins = request.getInputStream();
            Document doc = reader.read(ins);
            //获取根元素
            Element root = doc.getRootElement();
            //获取所有的节点
            List<Element> list = root.elements();
            for (Element e : list) {
                map.put(e.getName(), e.getText());
                System.out.println(e.getName() + "----->" + e.getText());
            }
            ins.close();   //关流
            return map;
        }

    (4)打印结果:

    总结:

    上面就是微信公众平台开发者配置 和接收事件推送,使用过程中如果有什么问题的话,欢迎评论区留言,如果觉得小编写的不错的话,可以给小编点个赞喔!

    题外话:

    我一开始也对微信公众平台和微信开放平台的概念模糊不清,因为俩者有很多重复的地方,包括企业微信和微信一样,当初我在做企业微信扫码登录的时候,发现它跟微信扫码登录差不多的逻辑,但是微信扫码登录验证步骤会更多一些,像我们要有微信公众平台的开发需求时,我们要先成为他们的开发者 ,在这个范围内,服务号比订阅号的功能更多,而如果要使用一些高级接口,比如微信扫码登录,就需要注册微信开放平台账号。

    微信开放平台虽然能够实现扫码登录的功能,但是具体事件推送还是要通过微信公众平台。

    举个例子: 我们的系统生成一个二维码,用户使用手机扫码,微信后台将信息返回给开发者,并且用户关注公众号,取关公众号都是通过微信公众平台事件推送来实现的,需要在微信公众平台后台配置开发者参数,从这点来看俩者有共通的地方。

     引自:https://www.zhihu.com/question/21074751

    微信公众平台是给编辑的,微信开放平台是给技术的。

    微信公众平台能干什么?

    • 写文章发文章
    • 和粉丝聊天
    • 配置菜单
    • 开通各种公众号的权限(仅限自己的公众号)
    • 启用开发者模式,开发自己的公众号
    • 投放广告
    • 查看数据

     

    微信开放平台能干什么?

    • APP想用微信登录/分享到朋友圈等
    • PC网站想用微信登录等
    • 注册公众号第三方平台(服务所有公众号)
    • 注册小程序第三方平台(提供小程序模板)
    • 绑定公众号或小程序,以形成UnionID

     

    展开全文
  • 微信|公众平台开发者文档: http://mp.weixin.qq.com/wiki/index.php?title=%E9%A6%96%E9%A1%B5
    展开全文
  • 微信公众平台开发入门

    万人学习 2015-01-06 11:21:27
    通过本课程的学习,学员能够入门微信公众平台开发,能够胜任企业级的订阅号、服务号、企业号的应用开发工作。 通过本课程的学习,学员能够对微信公众平台有一个清晰的、系统性的认识。例如,公众号是什么,它有...
  • 一、网页授权获取用户基本信息 ...微信 JS接口的临时票据) 获取access_token采用http GET方式请求获得jsapi_ticket( 有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket ): ...

    from  http://blog.csdn.net/zya0727/article/details/49098107

    一、网页授权获取用户基本信息

       第一步:用户同意授权,获取code

    参数:

    参数 是否必须 说明
    appid 公众号的唯一标识
    redirect_uri 授权后重定向的回调链接地址,请使用urlencode对链接进行处理
    response_type 返回类型,请填写code
    scope 应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息
    state 重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
    #wechat_redirect 无论直接打开还是做页面302重定向时候,必须带此参数
    链接

        https://open.weixin.qq.com/connect/oauth2/authorize?+参数

      第二步:通过code换取网页授权access_token,并获取unionID


    参数:

    参数 是否必须 说明
    appid 公众号的唯一标识
    secret 公众号的appsecret
    code 填写第一步获取的code参数
    grant_type 填写为authorization_code
    链接:

      https://api.weixin.qq.com/sns/oauth2/access_token?+参数

    第三步:拉取用户信息(需scope为 snsapi_userinfo)

    参数

    参数 描述
    access_token 网页授权接口调用凭证,注意:此access_token与基础支持的access_token不同
    openid 用户的唯一标识
    lang 返回国家地区语言版本,zh_CN 简体,zh_TW 繁体,en 英语

    链接

        https://api.weixin.qq.com/sns/userinfo? +参数

    二、JS-SDK处理(分享页面数据的处理)

    在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.0.0.js

    如需使用摇一摇周边功能,请引入 http://res.wx.qq.com/open/js/jweixin-1.1.0.js


    第一步:生成签名

    1、获取jsapi_ticket(公众号用于调用微信JS接口的临时票据)

    获取access_token采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

    2、生成签名

    签名参数:noncestr(随机字符串--推荐使用随机数生成算法生成), 有效的jsapi_ticket, timestamp(时间戳), url(当前网页的URL,不包含#及其后面部分

    ①对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式(即key1=value1&key2=value2…)拼接成字符串string1

    jsapi_ticket=值&noncestr=值&timestamp=值&url=值

    ②对string1进行sha1签名

    第二步:分享信息

    链接,图片,主题,描述等

    第三步:通过config接口注入权限验证配置

    wx.config({
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '', // 必填,公众号的唯一标识
        timestamp: , // 必填,生成签名的时间戳
        nonceStr: '', // 必填,生成签名的随机串
        signature: '',// 必填,签名,见附录1
        jsApiList: [] // 必填,需要使用的JS接口列表,
    });

    第四步:调用分享接口

    wx.onMenuShareTimeline({ //分享到朋友圈
        title: '', // 分享标题
        link: '', // 分享链接
        imgUrl: '', // 分享图标
        success: function () { 
            // 用户确认分享后执行的回调函数
        },
        cancel: function () { 
            // 用户取消分享后执行的回调函数
        }
    });
    wx.onMenuShareAppMessage({//分享到朋友
        title: '', // 分享标题
        desc: '', // 分享描述
        link: '', // 分享链接
        imgUrl: '', // 分享图标
        type: '', // 分享类型,music、video或link,不填默认为link
        dataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空
        success: function () { 
            // 用户确认分享后执行的回调函数
        },
        cancel: function () { 
            // 用户取消分享后执行的回调函数
        }
    });

    展开全文
  • 微信公众平台开发者可以通过公众平台开发... 微信团队官方发布的微信公众平台开发者文档 新手指南 接入指南 典型案例介绍 开发者规范 模板消息运营规范 公众号类型的接口权限说明 微信开发者互助问...
  • (一)接入流程解析通过文档我们可以看出其中接入微信公众平台开发,开发者需要按照如下步骤完成:填写服务器配置验证服务器地址的有效性依据接口文档实现业务逻辑按照上面的逻辑可能是填写服务器配置信息是在第一步,...
  • (一)接入流程解析通过上面我们可以看出其中接入微信公众平台开发,开发者需要按照如下步骤完成:填写服务器配置验证服务器地址的有效性依据接口文档实现业务逻辑按照上面的逻辑可能是填写服务器配置信息是在第一步,...
  • 通过微信公众平台开发者文档中的自定义菜单创建
  • 微信公众帐号的微信认证涉及开发者接口的赋予,高级接口需要认证通过才能获得,为了帮助公众号开发者获取公众号的认证状态,微信公众平台开始提供公众号认证过程中各阶段的事件推送,会推送到在开发者中心填写的...
  • 今天对着《微信公众平台开发者文档》看了一遍,
  • 微信开发者接入官方文档 :...当微信用户向你的公众平台发送一条消息,实际上这条消息首先发送到微信服务器,由微信服务器向网站服务器(我们开发的后台服务)发...
  • 微信公众平台|小程序中下载微信开发者工具申请微信公众号,进入微信公众平台|小程序 首页 点击 “文档”进入微信小程序介绍的界面在微信小程序界面的菜单中 选中“开发”,点击“小程序开发”弹出:选中 “工具”...
  • 当用户主动发消息给公众号的时候(包括发送信息、点击自定义菜单click事件、订阅事件、扫描二维码事件、支付成功事件、用户维权),微信将会把消息数据推送给开发者开发者在一段时间内(目前修改为48小时)可以...
  • 微信公众平台开发文档 语音识别

    千次阅读 2014-10-21 11:00:59
    开通语音识别功能,用户每次发送语音给公众号时,微信会在推送的语音消息XML数据包中,增加一个Recongnition字段。 注:由于客户端缓存,开发者开启或者关闭语音识别功能,对新关注者立刻生效,对已关注用户需要24...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 957
精华内容 382
关键字:

微信公众平台开发者文档