微信企业号第三方应用开发[三]——授权应用

创建应用后即可测试授权应用

点击“测试授权”

 确认发起授权安装测试

登陆企业号

 勾选需要授权的应用

 对应用进行可见范围设置

 授权成功后等待跳转即可



 在企业号管理员确认授权后微信后台会向开发者后台推送消息,开发者后台必须根据“第三方回调协议——授权成功推送auth_code事件”规则响应推送。

使用方式为‘线上自助注册授权使用’的套件,从企业号第三方官网发起授权时,微信服务器会向应用提供商的套件事件接收 URL(创建套件时填写)推送授权成功通知;从应用提供商网站发起的应用套件授权流程,由于授权完成时会跳转应用提供商管理后台,微信服务器不会向应用提供商推送授权成功通知。

https://127.0.0.1/suite/receive?msg_signature=3a7b08bb8e6dbce3c9671d6fdb69d15066227608&timestamp=1403610513&nonce=380320359

POST数据示例

{
	<xml>
		<SuiteId><![CDATA[wxfc918a2d200c9a4c]]></ SuiteId>
		<AuthCode><![CDATA[AUTHCODE]]></AuthCode>
               <InfoType><![CDATA[create_auth]]></InfoType>
		<TimeStamp>1403610513</TimeStamp>
	</xml>
}

应用提供商在收到推送消息后需要返回字符串success,返回值不是 success 时,会把返回内容当作错误信息显示(需要以UTF8编码)。

字段说明

参数 说明
SuiteId 应用套件的SuiteId
AuthCode 授权的auth_code,用于获取企业的永久授权码
InfoType create_auth
TimeStamp 时间戳

推送事件的推送地址是创建套件时填写的回调地址,所以在“微信企业号第三方应用开发[一]——创建套件”的代码上继续修改如下

/**
     * 测试微信企业号第三方应用回调协议
     * @author:leap
     * @MethodName: testWXSaaSCallback
     * @Description:
     * @param req
     * @param res
     * @date:2016-8-9
     */
    @RequestMapping(value="testWXSaaSCallback")
    @ResponseBody
    public void testWXSaaSCallback( HttpServletRequest req, ServletResponse res){
        //常量值
        String CORP_ID = "wx9671de0651dbdxxx";    //CorpId, 企业号的普通管理组中可查看
        String SUITE_ID = "tja2312bedd5086xxx";    //套件ID,在套件信息中查看
        String SUITE_SECRET = "LGVT0BrN2DZ7VMTuIPOsudaWuXOE0iM67yHpIs1ofESS4l-jSC8LN9nOnmilhxxx";
        String SUITE_TOKEN = "ssI2AnbgOo40eb0kOxxx";
        String SUITE_ENCODING_AES_KEY = "Pmqgjzwt4yAEK9N6YZ34RKpy6onJD56r8mhCUFG9xxx";

        //获取参数
        String msgSignature = req.getParameter("msg_signature");
        String timestamp = req.getParameter("timestamp");
        String nonce = req.getParameter("nonce");
        String echostr = req.getParameter("echostr");    //创建套件时验证回调url时传入

        String result = "";
        try {
            if(!Utils.isBlank(echostr)){    //=======验证回调url有效性=======
                WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(SUITE_TOKEN,
                        SUITE_ENCODING_AES_KEY, CORP_ID);//注意是CORP_ID
                result = wxBizMsgCrypt.VerifyURL(msgSignature, timestamp, nonce, echostr);
                System.out.println(result);
                res.getWriter().write(result);    //对echostr参数解密并原样返回echostr明文(不能加引号,不能带bom头,不能带换行符)
            }else{
                InputStream inputStream = null;
                inputStream = req.getInputStream();
                String postData = IOUtils.toString(inputStream, "utf-8");
                System.out.println("postData=" + postData);
                WXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(SUITE_TOKEN,
                        SUITE_ENCODING_AES_KEY, SUITE_ID);//注意是SUITE_ID
                result = wxBizMsgCrypt.DecryptMsg(msgSignature, timestamp, nonce, postData);
                System.out.println("result=" + result);

                //解析xml
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
                StringReader sr = new StringReader(result);
                InputSource is = new InputSource(sr);
                Document document = db.parse(is);
                Element root = document.getDocumentElement();

                NodeList infoTypeNodeList = root.getElementsByTagName("InfoType");
                if(infoTypeNodeList != null){
                    String infoType = infoTypeNodeList.item(0).getTextContent();
                    if("create_auth".equals(infoType)){    //=======授权成功推送auth_code事件=======

                        NodeList authCodeNodeList = root.getElementsByTagName("AuthCode");
                        String authCode = authCodeNodeList.item(0).getTextContent();
                        System.out.println("authCode=" + authCode);  //获取到authCode

                        res.getWriter().write("success");    //应用提供商在收到推送消息后需要返回字符串success,
                                                            //返回值不是 success 时,会把返回内容当作错误信息显示(需要以UTF8编码)。
                    }
                }
                res.getWriter().write("false");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


[目录]

[上一篇]微信企业号第三方应用开发[二]——创建应用



微信企业号第三方应用开发[三]——授权应用

时间: 2024-08-17 13:58:54

微信企业号第三方应用开发[三]——授权应用的相关文章

微信企业号第三方应用开发[四]——用户登录应用

应用被授权方企业号授权后,授权方企业号用户即可以登录应用.至此,接入企业号第三方应用的开发到了最后一步——获取登录用户信息. 在企业号开发中要获取用户信息,需要获取到用户经OAuth2.0验证时生成的code与企业号的corpid.在企业号第三方应用中也是需要得到这两个参数才能调用之后的一系列接口,特别的是,在企业号开发中corpid是自己的企业号固定的corpid,而企业号第三方应用要获取的则是授权方企业号corpid. 一.获取OAuth2.0的用户身份code OAuth2.0验证接口说明

微信企业号第三方应用开发[一]——创建套件

注:文中绿色部分为摘自微信官方文档 第三方应用提供给企业的是一个应用,但是应用必须在套件下创建,所以第一步是要创建套件. 注册成为应用提供商,必须输入以下信息: 信息项 要求及说明 企业Logo 应用提供商的企业Logo,小于2M,640*640,背景为白色 企业简称 使用对外宣传的企业简称,能代表企业的名字,2-16个字 企业简介 描述企业所提供的服务,4-120个字 企业官网 应用服务商的企业官网 注册条件:a)拥有一个已经过认证的企业号 b)用系统管理员身份进行申请 摘自http://qy

微信企业号第三方应用开发[目录]

微信企业号第三方应用开发[前言] 微信企业号第三方应用开发[一]——创建套件

微信企业号第三方应用开发[前言]

关于微信 微信的口号是连接一切,其过程大概为 人与人的连接(基础聊天.朋友圈) 人与组织的连接(订阅号.公众号) 人与企业的连接(企业号) 关于企业号第三方应用  微信推出了企业号第三方应用,它的作用其实是在人与企业连接中继续深化.企业号第三方应用与企业号并不相同,企业号第三方应用是在企业号的基础上扩展的产物.企业号的开发是基于每个企业的企业号进行,相当于为每个企业定制软件:而企业号第三方应用即是把软件做成SaaS,做成一套产品让多个企业直接使用,降低客户成本.企业号的这一发展方向与目前大众软件

微信企业号二次开发

1.注册完微信企业号,需要扫描二维码.就出现输入账号和密码的表单了.登陆就会出现下面的页面了.

MVC下微信企业号网页应用开发调用JSSDK接口不成功问题

在MVC下进行企业微信里的网页应用开发,前台页面中为了调用图像接口,使用了JSSDK.按照官方文档进行了正确配置. 现象:WEB开发工具调试一切正常,但从手机企业微信应用进入页面后接口调用无效(这个页面是从一级页面链接过来的),开了调试模式后,显示config:ok.说明配置无误.经过反复检查,终于发现问题所在. 原因:在一级页面(http://xx.xxx.xxx/main/index)中的链接是使用htmlhelper来写的,即@Html.ActionLink("测试接口",&qu

微信公众号菜单开发以及授权详细说明

主代码请参考:http://www.cnblogs.com/hopelooking/p/7463934.html 难点解析: 在微信创建菜单的时候我们惯用的是curl,但是菜单中难免是要有中文的,如果你的php版本是5.4版本的话,那么一定会报错的,主要错误原因是对象或者字符串之间的错误,那么我们在使用json_encode的时候就不能单纯的只是json一下了,应该json_encode($data,JSON_UNESCAPED_UNICODE) 例子: public function acti

微信企业号接入JDK6和JDK7及JDK8加解密失败处理(Java)

使用文章 http://blog.csdn.net/omsvip/article/details/39926493 提供的接入代码,可以根据自己jdk版本编译,如jdk7或者jdk6 ,此时部署后提示报错:java.security.InvalidKeyException:illegal Key Size jdk7: 微信开发者文档提供了下载JCE无限制权限策略文件UnlimitedJCEPolicyJDK7.zip(JDK7的下载地址: http://www.oracle.com/techne

微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台

原文:微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 教程导航: 微信开放平台 公众号第三方平台开发 教程一 平台介绍 微信开放平台 公众号第三方平台开发 教程二 创建公众号第三方平台 微信开放平台 公众号第三方平台开发 教程三 一键登录授权给第三方平台 微信开放平台 公众号第三方平台开发 教程四 代公众号调用接口的SDK和demo 公众号第三方平台的开放,是为了让公众号运营者,在面向垂直行业需求时,可以一键登录授权给第三方的公众号运营平台,通过第三方开发者提供的公众号第三