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

注:文中绿色部分为摘自微信官方文档

 

第三方应用提供给企业的是一个应用,但是应用必须在套件下创建,所以第一步是要创建套件。

 

  

注册成为应用提供商,必须输入以下信息:

信息项要求及说明
企业Logo应用提供商的企业Logo,小于2M,640*640,背景为白色
企业简称使用对外宣传的企业简称,能代表企业的名字,2-16个字
企业简介描述企业所提供的服务,4-120个字
企业官网应用服务商的企业官网

注册条件:a)拥有一个已经过认证的企业号 b)用系统管理员身份进行申请

摘自http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BA%94%E7%94%A8%E6%8F%90%E4%BE%9B%E5%95%86%E6%B3%A8%E5%86%8C%E5%BA%94%E7%94%A8 

 

符合以上条件后,登录微信第三方应用官网,选择“服务商登录”

 

 登陆后界面如下,选择添加应用套件

 

创建应用套件

开发者完成注册之后,即可创建应用套件。应用套件是第三方应用授权的主体,接口的开发都与应用套件息息相关,请开发者仔细阅读下方内容。

 

基本信息:

信息项要求及说明
应用套件Logo应用套件的Logo,小于2M,640*640,在授权页会被用于展示。
应用套件名称应用套件的名称,2-16个字
介绍网站介绍该应用套件网站或者页面
应用套件介绍描述该应用套件所提供的服务,4-120个字
授权方式使用方式目前有两种:线上自助注册授权使用和服务商辅助授权使用。
服务行业该应用套件所服务的行业对象,一个套件只能属于一个服务行业。
套件标签套件提供的服务类型,如OA办公、CRM、HR、ERP等。一个套件只能拥有一个标签。

注意:

1)你应谨慎选择所填写的行业和标签,行业是指可使用该套件企业所属的行业。当应用套件达到一定的活跃度后(授权企业数和日活跃用户数),会自动在企业号第三方官网进行推荐,套件所在的分类将基于所设置的行业和标签。

2)授权方式的作用在于区分应用套件是否可以直接从企业号第三方官网发起授权,线上自助注册授权使用是指该应用套件可以直接从企业号第三方官网发起授权,而不跳转服务商网站,该类型的应用套件还可以支持移动端发起应用套件授权;服务商辅助授权使用是指该应用套件必须跳转服务商网站,从服务商网站发起应用套件的授权,该类型的应用套件不支持移动端发起应用套件授权。

3)你可以创建或者选择其他开发者已创建的标签。你应该谨慎选择套件标签,用户往往会在企业号中通过标签查找相关联的套件。

 

开发信息:

套件参数内容说明
发起授权域名在该域名下发起的授权请求才可被通过,企业点击授权链接时,企业号会检查该域名是否已登记。
授权完成回调域名在第三方应用授权流程中,授权成功后会回调该域名,返回临时code。你需用此code换取永久授权码,请尽量将此域名与发起授权域名保持一致。
系统事件接收URL系统将会把此套件的授权变更事件以及ticket参数推送给此URL,ticket说明详见API接口说明。(填写URL时需要正确响应微信验证URL的请求,具体说明请阅读“回调模式”)
Token可任意填写,用于生成签名,校验回调请求的合法性。后续所有托管的企业产生的回调消息都使用该值来解密。
EncodingAESKey回调消息加解密参数,是AES密钥的Base64编码,用于解密回调消息内容对应的密文。后续所有托管的企业产生的回调消息都使用该值来解密。
应用套件ID应用套件的编号,相关的接口调用需要使用,由系统生成,不可更改。
应用套件secret应用套件的密钥,相关的接口调用需要使用。
白名单IP列表应用套件调用企业号第三方应用API时的合法IP列表,只有白名单内的IP才能正常调用企业号API,后续IP若有修改,需要及时进行列表更新。

创建完成之后,系统会告知开发者该应用套件的Suiteid和Suitesecret。(详见第三方应用接口说明)

摘自http://qydev.weixin.qq.com/wiki/index.php?title=%E5%BA%94%E7%94%A8%E6%8F%90%E4%BE%9B%E5%95%86%E6%B3%A8%E5%86%8C%E5%BA%94%E7%94%A8

 

进入创建套件页面,填写基本资料

 

点击下一步,填写开发资料

 

关于"系统事件接收URL"的填写 

系统事件接收URL支持$CORPID$模板,调用时会将$CORPID$替换成企业号的corpid,所以"系统事件接收URL"可以写成

http://AAA.com/api/weixin/callback.do?corpid=$CORPID$

 

验证URL有效性

当你提交以上信息时,企业号将发送GET请求到填写的URL上,GET请求携带四个参数,企业在获取时需要做urldecode处理,否则会验证不成功。

参数描述是否必带
msg_signature微信加密签名,msg_signature结合了企业填写的token、请求中的timestamp、nonce参数、加密的消息体
timestamp时间戳
nonce随机数
echostr加密的随机字符串,以msg_encrypt格式提供。需要解密并返回echostr明文,解密后有random、msg_len、msg、$CorpID四个字段,其中msg即为echostr明文首次校验时必带

企业通过参数msg_signature对请求进行校验,如果确认此次GET请求来自企业号,那么企业应该对echostr参数解密并原样返回echostr明文(不能加引号,不能带bom头,不能带换行符)则接入验证生效,回调模式才能开启。

摘自http://qydev.weixin.qq.com/wiki/index.php?title=%E5%9B%9E%E8%B0%83%E6%A8%A1%E5%BC%8F 

 

"系统事件接收URL"响应的代码如下

/*** 微信回调响应* @author:leap* @MethodName: callback * @Description: * @param req* @param res* @date:2016年8月25日*/@RequestMapping(value="callback")@ResponseBodypublic void callback(HttpServletRequest req, ServletResponse res){/** url中$CORPID$模板替换后的corpid **/String corpid = req.getParameter("corpid");/** url中的签名 **/String msgSignature = req.getParameter("msg_signature");/** url中的时间戳 **/String timestamp = req.getParameter("timestamp");/** url中的随机字符串 **/String nonce = req.getParameter("nonce");/** 创建套件时验证回调url有效性时传入**/String echostr = req.getParameter("echostr");WxAuthorizeLogic wxAuthorizeLogic = new WxAuthorizeLogic();String result = "";try {if(!Utils.isBlank(echostr)){    /** 验证回调url有效性* 响应需对echostr参数解密并原样返回echostr明文(不能加引号,不能带bom头,不能带换行符)*/String verifyURLResult = wxAuthorizeLogic.verifyURL(msgSignature, timestamp, nonce, echostr, corpid);res.getWriter().write(verifyURLResult);    }else {//其他操作
            }} catch (Exception e) {e.printStackTrace();}}

 

/*** 微信授权逻辑* @author:leap* @Description: * @date:2016年8月30日*/
public class WxAuthorizeLogic {
/*** 验证回调URL有效性* @author:leap* @MethodName: verifyURL * @Description: * @param msgSignature url中的签名* @param timestamp url中的时间戳* @param nonce url中的随机字符串* @param echostr 回显字符串* @param corpid 用于创建解密类* @return 返回解密后的明文字符串* @throws AesException* @date:2016年8月30日*/public String verifyURL(String msgSignature, String timestamp, String nonce, String echostr, String corpid) throws AesException{//注意创建解密对象时使用的是CORP_ID而不是SUITE_IDWXBizMsgCrypt wxBizMsgCrypt = new WXBizMsgCrypt(WXBase.SUITE_TOKEN, WXBase.SUITE_ENCODING_AES_KEY, corpid);String result = wxBizMsgCrypt.VerifyURL(msgSignature, timestamp, nonce, echostr);logger.info("VerifyURLResult=" + result);return result;}}

 其中类WXBizMsgCrypt由官方提供

 

java库(2014年9月24日更新,点击下载)

注意事项:

1.com\qq\weixin\mp\aes目录下是用户需要用到的接入企业微信的接口,其中WXBizMsgCrypt.java文件提供的WXBizMsgCrypt类封装了用户接入企业微信的三个接口,其它的类文件用户用于实现加解密,用户无须关心。sample.java文件提供了接口的使用示例。

2.WXBizMsgCrypt封装了VerifyURL, DecryptMsg, EncryptMsg三个接口,分别用于开发者验证回调url、接收消息的解密以及开发者回复消息的加密过程。使用方法可以参考Sample.java文件。

3.请开发者使用jdk1.6或以上的版本。针对org.apache.commons.codec.binary.Base64,需要导入jar包commons-codec-1.9(或commons-codec-1.8等其他版本),我们有提供,官方下载地址:

http://commons.apache.org/proper/commons-codec/download_codec.cgi

4.异常java.security.InvalidKeyException:illegal Key Size的解决方案:

在官方网站下载JCE无限制权限策略文件(请到官网下载对应的版本, 例如JDK7的下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.html ):

下载后解压,可以看到local_policy.jar和US_export_policy.jar以及readme.txt。如果安装了JRE,将两个jar文件放到%JRE_HOME% \lib\security目录下覆盖原来的文件,如果安装了JDK,将两个jar文件放到%JDK_HOME%\jre\lib\security目录下覆盖原来文件。

摘自http://qydev.weixin.qq.com/wiki/index.php?title=%E5%8A%A0%E8%A7%A3%E5%AF%86%E5%BA%93%E4%B8%8B%E8%BD%BD%E4%B8%8E%E8%BF%94%E5%9B%9E%E7%A0%81

 ***红字部分是必要操作,不可忽略***

 


 

[目录]

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

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

 


消息:新博客地址 blog.leapmie.com,以后的更新都会在新博客首发,感谢支持~(园子视情况更新)


 

转载于:https://www.cnblogs.com/leap/p/5748950.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/395385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

advanced east_SpriteKit Advanced —如何构建2,5D游戏(第二部分)

advanced eastby Luke Konior卢克科尼尔(Luke Konior) SpriteKit Advanced —如何构建2,5D游戏(第二部分) (SpriteKit Advanced — How to build a 2,5D game (Part II)) 介绍 (Intro) This article shows how to write basic shaders in the SpriteKit. It’s split into two…

html原生上传,一个基于HTML5及原生JS的文件上传组件--JohnUploader

运行效果图一、组件介绍基本特点基于HTML5的FileReader和FormData可以完成多文件选择,并预览完成文件的异步上传原生XHR对象,适配多浏览器代码class JohnUploader{url;fileField;vollay;/**** param url 文件上传的地址* param fileField 一个"文件…

[20170617]vim中调用sqlplus.txt

[20170617]vim中调用sqlplus.txt --//以前写过一篇emacs下调用sqlplus的文章,一直想学emacs,受限制自己掌握vim,对学习它没有兴趣,原链接如下: --//http://blog.itpub.net/267265/viewspace-1309032/ --//实际上vim也有插件连接数据库,我觉得不好用,一直没这样用. --//今天在整…

centos redis验证_centos7中安装、配置、验证、卸载redis

本文介绍在centos7中安装、配置、验证、卸载redis等操作,以及在使用redis中的一些注意事项。一 安装redis1 创建redis的安装目录利用以下命令,切换到/usr/local路径cd /usr/local键入以下命令,新建一个redis目录,用于放置redis软件…

实习生解雇_我们解雇了我们的顶尖人才。 我们做出的最佳决定。

实习生解雇by Jonathan Solrzano-Hamilton乔纳森索洛萨诺汉密尔顿(JonathanSolrzano-Hamilton) 我们解雇了我们的顶尖人才。 我们做出的最佳决定。 (We fired our top talent. Best decision we ever made.) “You will never be able to understand any of what I’ve create…

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

在应用套件里添加应用 当你创建完应用套件后,需要在套件配置应用,应用的信息填写如下。 基本信息: 信息项要求及说明应用Logo应用的Logo,小于2M,640*640,在授权页会被用于展示。应用名称应用的名称&#xf…

es6新增的html标签,javascript – 如何导入已在html中的标签中定义的es6模块?

我可以在我的html文件me.html中定义一个模块:import Atom from ./atom.js;console.log("definition of getAtom")export default function getAtom(){return new Atom(atom);}console.log("exported getAtom")另见>是否可以将该“匿名”模块…

jQ效果:简单的手风琴效果

实现效果如图所示&#xff1a; html结构&#xff1a; <div class"item_box box10"><div class"item_box_wp"><div class"voice_2"><ul><li class"li1" id"li1"><div class"fold"…

golang 日志分析_容器日志采集利器:Filebeat深度剖析与实践

在云原生时代和容器化浪潮中&#xff0c;容器的日志采集是一个看起来不起眼却又无法忽视的重要议题。对于容器日志采集我们常用的工具有filebeat和fluentd&#xff0c;两者对比各有优劣&#xff0c;相比基于ruby的fluentd&#xff0c;考虑到可定制性&#xff0c;我们一般默认选…

机器学习做自动聊天机器人_建立聊天机器人需要什么? 让我们找出答案。

机器学习做自动聊天机器人by Vanco Stojkov通过Vanco Stojkov 建立聊天机器人需要什么&#xff1f; 让我们找出答案。 (What does it take to build a chatbot? Let’s find out.) Without any delay, the image below shows what we are building:没有任何延迟&#xff0c;下…

UVA 11582 Colossal Fibonacci Numbers!【数学】

大一刚开始接触ACM就买了《算法竞赛入门经典》这本书&#xff0c;当时只能看懂前几章&#xff0c;而且题目也没做&#xff0c;粗鄙地以为这本书不适合自己。等到现在快大三了再回过头来看&#xff0c;发现刘老师还是很棒的&#xff01; 扯远了。。。 题意&#xff1a;问f[a^b]%…

Codeforces 919D Substring (拓扑图DP)

手动博客搬家: 本文发表于20180716 10:53:12, 原地址https://blog.csdn.net/suncongbo/article/details/81061500 给定一个\(n\)个点\(m\)条边的有向图&#xff08;不一定无环&#xff09;&#xff0c;每个点上有一个小写字母。要找一条路径&#xff0c;使得路径上出现次数最多…

layui自定义查询条件html页面,Layui的数据表格+springmvc实现搜索功能的例子_飛雲_前端开发者...

如下所示&#xff1a;主要在前端页面加&#xff1a;搜索ID&#xff1a;useridcontent搜索在reload:function () {var keyWord$("#keyWord").val();var keyType$("#key_type option:selected").val();table.reload(contenttable,{method:post,where:{keyWor…

mysql+keepalived 双主热备高可用

理论介绍&#xff1a;我们通常说的双机热备是指两台机器都在运行&#xff0c;但并不是两台机器都同时在提供服务。当提供服务的一台出现故障的时候&#xff0c;另外一台会马上自动接管并且提供服务&#xff0c;而且切换的时间非常短。MySQL双主复制&#xff0c;即互为Master-Sl…

java ldap userpassword 解密_Spring Boot中使用LDAP来统一管理用户信息

LDAP简介LDAP(轻量级目录访问协议&#xff0c;Lightweight Directory Access Protocol)是实现提供被称为目录服务的信息服务。目录服务是一种特殊的数据库系统&#xff0c;其专门针对读取&#xff0c;浏览和搜索操作进行了特定的优化。目录一般用来包含描述性的&#xff0c;基于…

第三章之枚举、注解

2019-01-22内容&#xff1a;枚举、注解一、自定义一个枚举类1 public class TestSeason {2 3 public static void main(String[] args) {4 Season spring Season.Spring;5 System.out.println(spring);6 }7 }8 public class Season {9 //将属性定…

html打开后默认浏览器页面,使用VBA打开默认浏览器中的html页面?

您可以使用Windows API函数ShellExecute来执行此操作&#xff1a;Option ExplicitPrivate Declare Function ShellExecute _Lib "shell32.dll" Alias "ShellExecuteA" ( _ByVal hWnd As Long, _ByVal Operation As String, _ByVal Filename As String, _Op…

数据科学r语言_您应该为数据科学学习哪些语言?

数据科学r语言Data science is an exciting field to work in, combining advanced statistical and quantitative skills with real-world programming ability. There are many potential programming languages that the aspiring data scientist might consider specializi…

Linux平台不同解压缩命令的使用方法

作者&#xff1a;郭孝星 微博&#xff1a;郭孝星的新浪微博 邮箱&#xff1a;allenwells163.com 博客&#xff1a;http://blog.csdn.net/allenwells github&#xff1a;https://github.com/AllenWell 一 .tar 解包 tar xvf FileName.tar 打包 tar cvf FileName.tar DirName 注意…

unity中怎么做河流_【干货】工作中怎么做工业设计的?(一)

最近在找工作&#xff0c;一直在看招聘信息。看到工业设计工资还是蛮高的。应届毕业生一般是4-6K&#xff0c;1-3年工作经验是6-8K&#xff0c;3年以后的差不多是8K以上了。我没有嫉妒羡慕恨&#xff0c;发誓&#xff0c;真的没有。工业设计已经被重视&#xff0c;未来的道路会…