精华内容
下载资源
问答
  • 微信公众号就是在微信公众平台上注册的应用账号,可分为四大类型,分别为订阅号、服务号、企业微信(原微信企业号小程序,他们共同构成了微信公众号体系。 企业微信(原微信企业号)是腾讯旗下一款为企业量身...

    微信企业号和公众号区别和关系

    在移动互联网快速发展和智能手机普遍应用的时代环境下,随着微信平台应用不断扩大和微信用户的迅速增加,微信公众号运营也有了很大的发展,企业、机构和个人纷纷迈入微信公众号运营的行列。微信公众号就是在微信公众平台上注册的应用账号,可分为四大类型,分别为订阅号、服务号、企业微信(原微信企业号)和小程序,他们共同构成了微信公众号体系。

    微信公众号体系

    企业微信(原微信企业号)是腾讯旗下一款为企业量身打造的办公平台,与微信一致的沟通体验,丰富的OA应用,帮助企业高效沟通和管理。企业微信能够有效地帮助企业、政府或者其他组织进行内部管理,并带来了很多便捷的办公服务。如果把微信公众号比喻成一辆车,而企业微信便是其中必不可少的零部件,它们的关系是被包含与包含的关系。那么微信公众号作为一个载体,跟企业微信肯定是存在着区别的,主要体现在:

    一、面向的主体不同

    微信公众号的主体包括个体工商户、企业、媒体、其他组织和政府等等。其中服务号多适用于企业,订阅号适用于自媒体、媒体;小程序则适用于个人、企业、政府和其他组织。

    而企业微信(企业号)是为企业或组织提供移动办公平台,帮助企业完善内部管理,它只适用于企业、政府、事业单位或其他组织。

    二、目的性不同

    微信公众号可以吸引大量的粉丝加入微信,而微信用户队伍的日益庞大,又促使企业、组织和个人申请加入微信公众号。可见吸粉引流,是腾讯打造微信公众号这个平台的一个主要目的。

    而打造企业微信这个平台的主要目的是为了提高企业的综合竞争实力,从而往更好的方向发展。企业微信在内部员工管理方面起到了非常大的作用,提高了员工的工作效率、减少了企业的运营成本。

    三、消息发送的限制和展现形式不同

    在消息发送限制方面,微信订阅号每天(24小时内)可以发送1条群发消息,服务号1个月(30天)内可以发送4条群发消息,企业微信作为一个单独的APP,可以随时发送消息和通知,还能结合第三方应用及时发布企业动态等等。

    在消息的展现形式方面,订阅号消息显示在微信订阅号目录中;服务号显示在微信好友会话列表中;小程序隐藏在微信聊天列表的顶部,往下拉便可看见;而企业微信作为一个独立的APP,消息会单独显示在手机应用端界面。

    四、功能不同

    微信订阅号主要侧重于为用户传达资讯,类似杂志、报纸,如果想简单的发送消息,达到宣传效果,建议可选择订阅号。

    服务号主要侧重于服务交互,类似银行、114、中国移动等提供的咨询服务,如果想赋予公众号更多的功能,建议可以选择服务号。

    小程序作为一种新的开放能力,开发者可以快速地开发一个小程序。小程序可以在微信内被便捷地使用和传播,使用体验也相当出色。

    而企业微信主要用于企业内部通讯使用,具有与微信一致的沟通体验,丰富的办公应用,像考勤打卡、汇报等OA应用,并且提供丰富的第三方应用,还支持API接入自有应用,非常适合企业办公。

    企业微信介绍

    总体来说,微信公众号改变了用户的生活与获取资讯的方式,而企业微信更是为企业内部管理起到了辅助作用,更是为企业打开了一扇便利之门,开启了移动办公时代的新纪元。

     

    相关资料:http://wbg.do1.com.cn/xueyuan/3129.html

    作者:smile.轉角

    QQ:493177502

     

    转载于:https://www.cnblogs.com/websmile/p/10108132.html

    展开全文
  • 基于微信企业号公众号、蓝信开发文档开发的Api类库(用于调用各个平台的接口),开发了微信企业号调用程序。调用参见Api.Weixin.WinForm工程(原创代码)。 使用了DevExpress V19.1前端界面插件。 使用Api....
  • 微信企业号(公众号)开发流程汇总

    万次阅读 2019-08-14 17:35:16
    微信企业号与微信公众号的配置流程大同小异(殊途同归)。 2,准备工作 2.1,企业号的申请与域名的申请及备案 企业号(公众号)申请需要提前申请,因为有些东西需要备案,审核啥的; 测试环境/生产环境的域名...

    1,前言

    微信企业号与微信公众号的配置流程大同小异(殊途同归)。

     

    2,准备工作

    2.1,企业号的申请与域名的申请及备案

             企业号(公众号)申请需要提前申请,因为有些东西需要备案,审核啥的;

             测试环境/生产环境的域名需要提前准备,无论是个人还是企业应用搭建都需要提前准备,因为域名备案是需要一定时间的;

    2.2,域名与企业号(公众号)配置产生联系的地方

            2.2.1,网页授权及JS-SDK的域名白名单校验

     

            2.2.2,企业微信授权登录校验

                       点击上图下方中间的“企业微信授权登录”,跳转到下图,在框起来的部分将对应环境的域名添加上

     

    2.3,菜单的配置

            2.3.1,工作台的相关配置

                       1)子应用跳转

                           常规情况下,点击子应用,会默认跳转到消息列表页(如下图)

     

                            但如果想要点击按钮直接跳转到应用(此时消息列表可以通过首页,点击消息框跳转),则需要先配置工作台应用主页(该主页的配置连接为子应用项目资源的访问路径,例如www.qq.com);同时自定义菜单还是该怎么配怎么配(这一步只是想点击子应用的时候不跳转到消息列表而是直接跳转子应用,所以如果不想如此处理(即还是想按照默认模式,先跳转消息列表,然后在做对应的操作)可以只配置自定义菜单,不去管工作台应用主页这个功能

     

                       2)工作台应用的展示(默认是列表模式,下图为选了宫格模式之后的展示)

     

     

     

    2.4 微信JS-SDK的使用

            2.4.1,JS-SDK的API文档

            2.4.2,JS-SDK授权,关于OAuth2.0链接

                      微信的授权流程是基于OAuth2.0(关于概念可以参考https://www.jianshu.com/p/9d0264d27c3b)的,通常我们在处理第三方授权登录的时候使用的都是静默授权(微信公众号有一个显示授权的概念,而企业号没有这个概念,它只有一个类似静默授权的过程,即授权过程不暴露给用户,用户只能感受到浏览器似乎重定向了一次)

                    上述授权的流程大致为:

                            1)给应用配置访问链接,该链接为参考文档-身份验证-构造网页授权链接部分所述的链接

     

                            2)用户点击子应用,访问配置的访问链接所指向的地址

                            3)接第二步,当前地址指向一个授权页,该授权页会根据访问链接上的一些参数(例如appid,即企业的CorpID)返回一个授权令牌code,并将其拼在重定向链接(即访问链接上redirect_uri参数的值)上;然后跳转到重定向链接所指向的地址(该地址即为子应用项目资源目录所在地址

                            4)从第四步开始,项目资源正式开始访问;在访问资源之前,调用后端给的授权接口(该接口用来接收重定向链接上拼接的code,然后在后台用该code和access_token来跟微信服务器交换目标用户信息,值得一提的是,微信静默授权只能拿到用户的基本信息,同时该信息为企业通讯录里已经维护的用户信息)将重定向链接上拼接的授权令牌code传到后端交换用户的基本信息(在这个过程中实际上是可以将token一并返回,但有时候,部分平台的token实际上是一个封装好的接口来获取的,所以要根据实际情况来处理(但用户信息确是在这一步返回的)

                            5)token和用户信息可以酌情考虑在会话期间内缓存在本地(虽然这是一句废话,但希望这真是一句赘述)       

                            6)上述过程中的一些注意事项:

                                    a)上述过程中,授权令牌code是有时效限制的,它的失效为5分钟,且在这5分钟之内只能使用一次,也就是说,如果code在请求回来后,如果你在5分钟内没有使用它(或是5分钟内使用过一次之后),当前这个code就自动失效了。

                                   b)后端通过access_token和授权令牌code换去用户信息的时候会出现一些问题,例如40029这个错误,它的含义是授权令牌code错误,网上有指出302跳转会出现重定向问题(https://blog.csdn.net/hhchor/article/details/53450189);但需要说明的是,后端在换取用户信息的时候,拿去交换的参数是有两个;尽管40029这个错误是报的不合法的code,但最后排查了下,发现生成一个错误的access_token,跟code去交换信息的时候,它不会报access_token不合法,而是报code不合法(这波操作简直666)。。。

                                       指出这个问题的意义在于,无论是微信企业号还是微信公众号开发,在实际开发过程中,会出现很多奇奇怪怪的错误,如果排除了可能导致该问题的所有因素,那么即使有多么不可能,也该尝试怀疑一下是不是外部因素导致的。

                                   c)微信jssdk调用初始化过程中需要的三个参数(这三个参数为生产ticket的相关参数,ticket用于生产access_token,而access_token用于跟code一起交换用户数据);建议了解下开发者文档里的JS-SDK使用权限签名算法这一节以及常见错误及解决方法这一节,因为有些参数是需要在后端缓存的,不能频繁调用(频繁调用会被拉黑的哦)

     

     

     

                            7)微信外部扫一扫(栗子:微信问卷调查)

    扫一扫这个操作实质上是微信客户端解析一个二维码拿到一个访问链接(该链接就是上述的授权访问链接),并且当微信判断该二维码的内部信息是一个链接的时候将自动打开一个webview并访问该链接。所以本质上通过扫一扫访问一个应用和点击应用图标访问该应用没什么太大区别。

     

    3,鸣谢

        1,感谢https://www.jianshu.com/p/9d0264d27c3b对于OAuth2.0的解释

        2,感谢https://blog.csdn.net/hhchor/article/details/53450189对于企业号开发过程中40029错误码的相关解决方案

     

    展开全文
  • 这是一个基于微信企业号公众号、钉钉、蓝信开发文档开发的Api类库,用于调用各个平台的接口。
  • 1、微信企业号服务端调用方法java源码实现 1.1 获取AccessToken 1.2 发送文本消息 1.3 发送消息(包括文本、图像、声音、视频、文件、图文) 1.4 上传素材文件 1.5 获取素材文件 1.6 获取应用素材总数以及每种类型...
  • 集成了官方API接口的工具类,实例化Wechat后,调用相应方法即可,支持企业号和公众号的网页版开发 PS: 企业号公众号切换过程中,需修改对应的接口请求地址,即常量API_URL_PREFIX,对应修改如下: 企业号: ...
  • 支持包括微信支付,开放平台,公众号,企业微信/企业号,小程序等微信功能的逐步开发。 特别赞助 活动服务销售平台 重要信息 2020-11-29发布 ! 新手重要提示:本项目仅是一个SDK开发工具包,未提供Web实现,建议...
  • 微信企业号或微信公众号调用扫一扫功能JS-SDK安全域名配置配置设置好之后下面就上代码java代码 JS-SDK安全域名配置 企业微信号 —— 安全域名配置需要通过验证(如下图) 微信公众 ——— 安全域名配置 设置 ——&...

    微信企业号或微信公众号调用扫一扫功能

    JS-SDK安全域名配置

    企业微信号 —— 安全域名配置需要通过验证(如下图)
    在这里插入图片描述
    微信公众 ——— 安全域名配置
    设置 ——>公众号设置 ——> 功能设置 ——>JS接口安全域名设置 (如下图)
    在这里插入图片描述

    配置设置好之后下面就上代码

    <!DOCTYPE html>
    <html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1" />
        <title>扫一扫</title>
    </head>
    <body>
    
    <div style="color:red" id="jshref"></div>
    <!-- <p>正在调用扫一扫 ..</p> -->
    <script src="http://res2.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
    <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    <script>
        var wxAppId = "";
        var timestamp = "";
        var nonce_str = "";
        var signature = "";
        var url = "../../share.do?share";
        var data = { urlSigna: encodeURIComponent(window.location.href)};
        jQuery.getJSON(url, data, function (backdata){
            wxAppId = backdata.obj.wxAppId;
            timestamp = backdata.obj.timesTamp;
            nonce_str = backdata.obj.noncestr;
            signature = backdata.obj.signature;
            wx.config({
                debug:false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,                                                            仅在pc端时才会打印。
                appId: wxAppId,// 必填,公众号的唯一标识
                timestamp: timestamp,// 必填,生成签名的时间戳
                nonceStr: nonce_str,// 必填,生成签名的随机串
                signature: signature,// 必填,签名,见附录1
                jsApiList: ['scanQRCode']
            });
            wx.ready(function () {
                wx.scanQRCode({
                    needResult: 1,
                    desc: 'scanQRCode desc',
                    scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                    success: function (res) {
                        alert(res.resultStr);//扫描结果
                    },
                    cancel:function(){
                        history.back();
                    }
                });
            });
            wx.error(function (res) {
                alert("错误信息== " + JSON.stringify(res));
            });
        });
    </script>
    
    </body></html>
    

    java代码

    Controller

    	@RequestMapping(params = "share", method = {RequestMethod.GET, RequestMethod.POST})
        @ResponseBody
        public AjaxJson share(HttpServletRequest request, @RequestParam String urlSigna) throws IOException {
            AjaxJson j = new AjaxJson();
            WeiXinUtils wx = new WeiXinUtils();
            urlSigna = URLDecoder.decode(urlSigna, "UTF-8");
            Map<String, Object> wxMap = wx.getSignature(urlSigna);
            wxMap.put("wxAppId", WeiXinUtils.APPID);
            j.setObj(wxMap);
            j.setSuccess(false);
            return j;
        }
    

    获取签名的Utils

    package com.xxx.xxx.xxxxx;
    
    import java.io.IOException;
    import java.util.*;
    
    import com.appiot.hp.util.HttpClientUtil;
    
    import net.sf.json.JSONObject;
    
    import org.apache.commons.lang.RandomStringUtils;
    import org.apache.log4j.Logger;
    
    /**
      * Utils - 微信操作工具类
      * add by sl on 2015-12-04 09:42:34
      * @author  XIAER Team
      * @version 1.0
      */
    public final class WeiXinUtils {
                
                private static Logger logger = Logger.getLogger(WeiXinUtils.class);
               
                //个人公众号
                public static final String APPID = "wxf34602xxxxxxx21";
                public static final String APP_SECRET ="90cbc20189cd47xxxxxxxxxxx2b905";
    
                private static final Map map = new HashMap();
    
    
                /**
                  * 获取accessToken
                  * @return accessToken
                  */
                public static String getAccess_token(String wxAppId, String secret) {
    //                String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+ wxAppId +"&secret=" + secret;
                    String url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid="+ wxAppId +"&corpsecret="+ secret;
                    JSONObject jsonobject = HttpClientUtil.sendGet(url, null);
                    return jsonobject.getString("access_token");
                 }
    
                /**
                  * 获取jsapi_ticket
                  * @author WFJ
                  * @time 2017年4月4日21:50:52
                  * @return
                  */
                public static String getJsapiTicket(){
                    String accessToken = "";
                    accessToken = getAccess_token(APPID, APP_SECRET);
    //                String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type=jsapi";
                    String url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token="+accessToken+"&type=jsapi";
                    JSONObject jsonobject = HttpClientUtil.sendGet(url, null);
                    return jsonobject.getString("ticket");
                }
    
                /**
                  * 获取微信签名signature
                  * @param url jsapi_ticket
                  * add by zl on 2016-2-2
                  * @return signature
                  * @throws IOException
                  */
            public Map<String, Object> getSignature(String url) throws IOException {
                Map<String, Object> wxMap = new HashMap<String, Object>();
                String jsapi_ticket = "";
                Long timeJt = (Long) map.get("timeJt");
                jsapi_ticket = (String) map.get("jsapi_ticket");
                Long nowDateJt = new Date().getTime();
                if (jsapi_ticket != null && timeJt != null && ((nowDateJt - timeJt) < 7200 * 1000L)) {
                    System.out.println("jsapi_ticket 存在");
                    System.out.println("nowDateJt - timeJt=="+(nowDateJt - timeJt));
                } else {
                    jsapi_ticket = getJsapiTicket();
                    System.out.println("jsapi_ticket 获取");
                    map.put("jsapi_ticket",jsapi_ticket);
                    map.put("timeJt",nowDateJt);
                }
    
                //随机字符串和时间戳
                String new_novestr = RandomStringUtils.randomAlphanumeric(16); //随机字符串
                String timestamp = String.valueOf(System.currentTimeMillis() / 1000);//时间戳
                String signature = "";
                // 拼接字符串
                String string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + new_novestr + "&timestamp=" + timestamp + "&url=" + url;
                signature = CheckUtil.SHA1(string1);
                System.out.println("签名=="+signature);
    
                wxMap.put("noncestr", new_novestr);
                wxMap.put("timesTamp", timestamp);
                wxMap.put("signature", signature);
                return wxMap;
            }
    }
    
    

    CheckUtil

    package com.xxx.xxx.xxxx;
    
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    import java.util.UUID;
    
    public class CheckUtil {
        /**
         * 对所有待签名参数按照字段名的ASCII 码从小到大排序(字典序)后,使用URL键值对的格式 (即 key1=value1&key2=value2…)拼接成字符串string1
         * @return
         */
        public static String SHA1(String decript) {
            try {
                MessageDigest digest = java.security.MessageDigest.getInstance("SHA-1");
                digest.update(decript.getBytes());
                byte messageDigest[] = digest.digest();
                // Create Hex String
                StringBuffer hexString = new StringBuffer();
                // 字节数组转换为 十六进制 数
                for (int i = 0; i < messageDigest.length; i++) {
                    String shaHex = Integer.toHexString(messageDigest[i] & 0xFF);
                    if (shaHex.length() < 2) {
                        hexString.append(0);
                    }
                    hexString.append(shaHex);
                }
                return hexString.toString();
    
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
            }
            return "";
        }
    }
    
    
    

    发送请求获取accessToken 和 jsapi_ticket的get方法

    package com.xxx.xxx.xxxx;
    
    import com.alibaba.fastjson.JSONException;
    import net.sf.json.JSONObject;
    import org.apache.commons.lang.StringUtils;
    import org.apache.http.HttpEntity;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.ResponseHandler;
    import org.apache.http.client.config.RequestConfig;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpPost;;
    import org.apache.http.impl.client.BasicResponseHandler;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.util.EntityUtils;
    
    import java.io.*;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.Map;
    
    public class HttpClientUtil {
        /**
         * 向指定URL发送GET方法的请求
         *
         * @param url   发送请求的URL
         * @param param 请求参数,单个参数
         * @return URL 所代表远程资源的响应结果
         */
        public static JSONObject sendGet(String url, String param) {
            String result = "";
            JSONObject retJson = new JSONObject();
            BufferedReader in = null;
            try {
                URL realUrl = new URL(url);
                // 打开和URL之间的连接
                URLConnection connection = realUrl.openConnection();
                // 设置通用的请求属性
                connection.setRequestProperty("accept", "*/*");
                connection.setRequestProperty("connection", "Keep-Alive");
                connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
                // 建立实际的连接
                connection.connect();
                // 获取所有响应头字段
                // 定义 BufferedReader输入流来读取URL的响应
                in = new BufferedReader(new InputStreamReader(connection.getInputStream(), "utf-8"));
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
    //                System.out.println("line====="+line);
                }
                if (StringUtils.isNotEmpty(result) && isJson(result)) {//数据不为空,进行转换为JSONObject格式数据进行返回
                    retJson = JSONObject.fromObject(result);
                }
            } catch (Exception e) {
                System.out.println("发送GET请求出现异常!" + e);
                e.printStackTrace();
                retJson.put("status", "102");
                retJson.put("msg", "发送GET请求出现异常:" + e);
            }
            // 使用finally块来关闭输入流
            finally {
                try {
                    if (in != null) {
                        in.close();
                    }
                } catch (Exception e2) {
                    e2.printStackTrace();
                }
            }
            return retJson;
        }    
    }
    
    

    签名校验

    校验地址:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
    当校验获取到的签名和后台获取到的签名一致时,证明你的代码正确,但任然报签名错误 invalid signature,可能是你的安全域名配置有问题,页面动态获取的url地址不是你配置的安全域名

    展开全文
  • 微信公众号使用JS-SDK说明文档 (官方):https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115 2.企业号使用JS-SDK说明文档(官方):...

    一、1.微信公众号使用JS-SDK说明文档 (官方)https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

           2.企业号使用JS-SDK说明文档(官方)https://work.weixin.qq.com/api/doc#10029/%E6%AD%A5%E9%AA%A4%E4%B8%80%EF%BC%9A%E5%BC%95%E5%85%A5JS%E6%96%87%E4%BB%B6

           两者还是稍微有点区别!

    二、基本使用步骤:

    步骤一:绑定域名

           微信公众号: 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。备注:登录后可在“开发者中心”查   看对应的接口权限。

          企业号:登录企业号公众平台进入“应用与小程序”的“网页授权及JS-SDK”填写“可信域名”

         注意:微信公众号和企业号,都需要要下载验证文件txt,放在项目目录下,完成验证,如果忽略这一步会一直报签名无效哦~

    步骤二:引入JS文件

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

    如需进一步提升服务稳定性,当上述资源不可访问时,可改访问:http://res2.wx.qq.com/open/js/jweixin-1.4.0.js (支持https)。

    备注:支持使用 AMD/CMD 标准模块加载方法加载

           企业号:引入如下JS文件:https://res.wx.qq.com/open/js/jweixin-1.2.0.js

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

    所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用(同一个url仅需调用一次,对于变化url的SPA的web app可在每次url变化时进行调用,目前Android微信客户端不支持pushState的H5新特性,所以使用pushState来实现web app的页面会导致签名失败,此问题会在Android6.2中修复)。

          微信公众号:

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

    企业号:

    wx.config({
    
        beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
        appId: '', // 必填,企业微信的corpID
        timestamp: , // 必填,生成签名的时间戳
        nonceStr: '', // 必填,生成签名的随机串
        signature: '',// 必填,签名,见附录1
        jsApiList: [] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });

    步骤四:通过ready接口处理成功验证 (两者一样)

    wx.ready(function(){
        // config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。
    });
    

     

    步骤五:通过error接口处理失败验证(两者一样)

    wx.error(function(res){
        // config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。
    });

     附录1-JS-SDK使用权限签名算法

    jsapi_ticket

    生成签名之前必须先了解一下jsapi_ticket,jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

    1.参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token)

    2.用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket)请求方式:GET(HTTPS

    公众号获取jsapi_ticket接口:https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

    企业号获取jsapi_ticket接口:https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=ACCESS_TOKEN

    3.

    成功返回如下JSON:

    {
    "errcode":0,
    "errmsg":"ok",
    "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
    "expires_in":7200
    }
    

    获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。

    备注:确认签名算法正确,可用http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign 页面工具进行校验。

    若更想详细了解,还是点击官方文档了解~~~~~~~~~ 这里只是作为总结。

    附录例子:

    注意:laravel 5.1版本的标题如果是变量,必须防止被转义,使用{!! $title !!},如果使用$title,其中一些符合会被转义报错的~

    公众号回复超链接,其中xml文本中也是需要被禁止转义,否则会被转义,到时候插入超链接失败哦~

    (公众号)html前端代码:

    <?php
    require_once APP_ROOT.'/include/Jssdk.class.php';
    $jssdk = new JSSDK(APPID);
    $signPackage=$jssdk->getSignPackage();
    ?>
    <script src="http://res2.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
    <script>
        wx.config({
            debug: false,
            appId: '<?php echo $signPackage["appId"];?>',
            timestamp: <?php echo $signPackage["timestamp"];?>,
            nonceStr: '<?php echo $signPackage["nonceStr"];?>',
            signature: '<?php echo $signPackage["signature"];?>',
            jsApiList: ['onMenuShareAppMessage','onMenuShareTimeline']
        });
        wx.ready(function(){
            wx.onMenuShareAppMessage({
                //分享给朋友
                title: "LAT微学院",
                link: '{{$signPackage["url"]}}',
                desc:'学习资料',
                imgUrl: "<?php echo DOMAIN_NAME.'/assets/images/cover.jpg' ?>",
                success: function (){
                },
                cancel: function (){}
            });
            //分享朋友圈
            wx.onMenuShareTimeline({//分享到朋友圈
                title: "LAT微学院",
                link: '{{$signPackage["url"]}}',
                desc:'学习资料',
                imgUrl: "<?php echo DOMAIN_NAME.'/assets/images/cover.jpg' ?>",
                success: function (){
                },
                cancel: function (){}
            });
        });
        wx.error(function(res){ });
    </script>

    (企业号)html代码

    <?php
    require_once '../res/article/Jssdk.class.php';
    $jssdk = new JSSDK(CORPID, SECRET);
    $signPackage=$jssdk->getSignPackage();
    ?>
    <script src="https://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script>
        wx.config({
            beta: true,// 必须这么写,否则wx.invoke调用形式的jsapi会有问题
            debug: ,
            appId: '<?php echo $signPackage["appId"];?>',
            timestamp: '<?php echo $signPackage["timestamp"];?>',
            nonceStr: '<?php echo $signPackage["nonceStr"];?>',
            signature: '<?php echo $signPackage["signature"];?>',
            jsApiList: ['hideAllNonBaseMenuItem']
        });
        <!-- 禁止分享 -->
        wx.ready(function(){
            //隐藏所有非基础类按钮接口
            wx.hideAllNonBaseMenuItem();
        });
        $(function () {
            var droploads =$('body').dropload({
                scrollArea : window,
                autoLoad  : false,
                loadUpFn : function(me){
                    //重置下拉刷新
                    window.location.reload();
                },
    
            });
            //苹果系统分享问题,页面重定向,返回分享失效,解决的代码
            var isPageHide = false;
            window.addEventListener('pageshow', function () {
                if (isPageHide) {
                    window.location.reload();
                }
            });
            window.addEventListener('pagehide', function () {
                isPageHide = true;
            });
        });
    </script>

    后端Jssdk.class.php文件在百度云端,有点多不写了。

    百度云链接:https://pan.baidu.com/s/1iHeqHUdtozQfEJh_RjKGbg
    提取码:sr4j
     

     

    展开全文
  • 一直以来在微信里面始终无法用&lt;input id="videofile" name="videofile" type="file" accept="video/*" multiple="" onchange="uploadFile(this,3)&...
  • 转载于:https://www.cnblogs.com/renpei/p/7871872.html
  • 微信开发实例,实现了大多数接口。可以直接用,也可以学习研究,与君共勉!
  • 微信支付、小程序、企业号和公众号(包括服务号订阅号) Java SDK开发工具包
  • Jeewx实现了微信公众号、支付窗、微信企业号、小程序等触点的基础管理功能,集成了Oauth2.0、扩展业务、工具箱、报表等实用模块,强大的代码生成器,便于用户二次开发。 二、平台特性 1、JEEWX基于快速开发平台jeecg...
  • 微信企业号OAuth2.0验证,微信企业号拍照上传,下载图片到自己的服务器 总路线 调用jssdk,先传到微信,再下载到自己的服务器 一、微信 code获取userId(java),作用:获取用户信息 二、前台拍照调用,选择图片,...
  • 在当下,微信开发如火如荼,许多客户的软件需求中都不免涉及企业号公众号订阅号,小编作为码农的一员,当然也不可避免的涉及到这一块的开发。最让人头疼的不是公众号与订阅号。而是企业号。开发过公众号和订阅...
  • 1,企业:建设自己的企业,微信公众号接口系统 2,技术人员或站长:用来给客户做微信公众号接口系统 3,建站初学者:用作练习代码,是很好的学习材料 4,学生:作为学习微信公众号接口系统的样例程序 5,网络爱好者...
  • 代码是vb.net的,可以转换成c# 通过URL,token,EncodingAESKey接入微信企业号公众号
  • 微信企业号出来之后,本人也抱着前面开发订阅号服务号的经验来探究了一番,这里整理了下再开发企业号时候碰到的一些细节参数。企业号开发文档详见http://qydev.weixin.qq.com/wiki/index.php?title=首页
  • 之前在微信企业号开发:微信考勤中使用了百度地图的定位组件,但发现在部分手机上会出现定位失败的提示,于是有研究了一下百度地图。原来使用的Web组件百度不打算更新了,也是重新查了一下百度地图的其他API,还有一...
  • Jeecg BPM 重磅来袭,推出移动OA审批功能 功能点: 1.表单采用多模板方式,实现PC模板移动模板的双模式切换使用 2.实现移动审批客户端,实现移动端业务办理,流程...3.轻量级,可以无缝对接微信公众号和微信企业号
  • 支持小程序,JeeWx捷微3.1小程序版本发布^_^JeeWx捷微V3.1——多触点小程序版本管理平台(支持微信公众号微信企业号,支付窗)JeeWx捷微V3.1.0版本紧跟微信小程序更新,在原有多触点版本基础上,引入了更多的...
  • 喜迎双旦,JeeWx捷微3.0多触点版本发布^_^JeeWx捷微V3.0——多触点版本管理平台(支持微信公众号微信企业号,支付窗)JeeWx捷微V3.0.0版本是一个颠覆跨时代版本,官方团队历时十月,倾注了大量的时间精力,...
  • JeeWx捷微V3.2——多触点管理平台(支持微信公众号微信企业号,支付窗、小程序) JeeWx捷微V3.2.0版本引入了更多新特性,支持微信公众号微信企业号、支付宝服务窗等多触点平台。多触点模式采用微服务框架实现...
  • 微信企业号

    2015-10-28 18:54:15
    微信平台分为:微信企业号,微信服务号,微信公众号 我总结的他们分三种的原因就是,微信企业号主要是针对公司内部的一个管理,交流, 可以不限次数的发送消息(文字,图片, 图文),而且有管理的权限,只有在企业...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,615
精华内容 1,446
关键字:

微信企业号和公众号的区别