码迷,mamicode.com
首页 > 微信 > 详细

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

时间:2016-08-11 00:32:38      阅读:761      评论:0      收藏:0      [点我收藏+]

标签:

 

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

 

点击“测试授权”

技术分享

 

 

 

 确认发起授权安装测试

技术分享

 

 

登陆企业号

技术分享

 

 勾选需要授权的应用

技术分享

 

 对应用进行可见范围设置

技术分享

 

 授权成功后等待跳转即可

技术分享

 


 

 在企业号管理员确认授权后微信后台会向开发者后台推送消息,开发者后台必须根据“第三方回调协议——授权成功推送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();
        }
    }

 


[目录]

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

 


 

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

标签:

原文地址:http://www.cnblogs.com/leap/p/5759079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!