企业微信调用扫一扫_企业微信调用扫一扫方法 - CSDN
精华内容
参与话题
  • 微信调用jssdk在网页端实现调用扫一扫,java+jsp

    万次阅读 多人点赞 2017-08-06 20:01:46
    这篇文章以讲解的方式,帮助大家来理解微信官方的文档,同时给出调用扫一扫的例子。 微信官方技术文档jssdk:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html 打开技术文档,看到一个大目录...


    这篇文章以讲解的方式,帮助大家来理解微信官方的文档,同时给出调用扫一扫的例子。

    微信官方技术文档jssdk:http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html

    打开技术文档,看到一个大目录,我们只需要关注下面几部分目录即可。


    图1



    图2

        图1所示的目录是使用任何js接口页面都要配置的。下面结合官方文档介绍配置方法,其中绿色字体是自己写的批注,黑色的是复制官方文档:

    JSSDK使用步骤

    步骤一:绑定域名

    先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。

    备注:登录后可在“开发者中心”查看对应的接口权限。

    这里注意域名不要带http:// 等前缀。(顺便推荐做微信开发测试时,使用花生壳账号,映射出公网ip。)比如网址:http://test.wicp.net 那么它的域名就是 test.wicp.net。

    步骤二:引入JS文件

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

    请注意,如果你的页面启用了https,务必引入 https://res.wx.qq.com/open/js/jweixin-1.0.0.js ,否则将无法在iOS9.0以上系统中成功使用JSSDK

    如需使用摇一摇周边功能,请引入 jweixin-1.1.0.js

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

    这个就是jsp页面直接引入即可

    <script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

    步骤三:通过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: '',// 必填,签名,见附录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可以在这里更新签名。
    
    });

    基础接口

    判断当前客户端版本是否支持指定JS接口

    wx.checkJsApi({
        jsApiList: ['chooseImage'], // 需要检测的JS接口列表,所有JS接口列表见附录2,
        success: function(res) {
            // 以键值对的形式返回,可用的api值true,不可用为false
            // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
        }
    });
    

    备注:checkJsApi接口是客户端6.0.2新引入的一个预留接口,第一期开放的接口均可不使用checkJsApi来检测。

    微信扫一扫

    调起微信扫一扫接口

    wx.scanQRCode({
        needResult: 0, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
        scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
        success: function (res) {
        var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
    }
    });
    前面的官方文档写的很详细,但有人会疑问,具体写到网页中是怎么样?直接复制就可以吗?其实大部分直接复制就可以,针对jsp我们只需要做一点小改变。

    <script  type="text/javascript">
    	wx.config({
    		debug: false,
    		appId: '<%=ret.get("appId")%>',
    		timestamp:'<%=ret.get("timestamp")%>',
    		nonceStr:'<%=ret.get("nonceStr")%>',
    		signature:'<%=ret.get("signature")%>',
    		jsApiList : [ 'checkJsApi', 'scanQRCode' ]
    	});//end_config
    
    	wx.error(function(res) {
    		alert("出错了:" + res.errMsg);
    	});
    
    	wx.ready(function() {
    		wx.checkJsApi({
    			jsApiList : ['scanQRCode'],
    			success : function(res) {
    			}
    		});
    
    		//扫描二维码
    		document.querySelector('#scanQRCode').onclick = function() {
    			wx.scanQRCode({
    				needResult : 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
    				scanType : [ "qrCode", "barCode" ], // 可以指定扫二维码还是一维码,默认二者都有
    				success : function(res) {
    					var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
    					document.getElementById("wm_id").value = result;//将扫描的结果赋予到jsp对应值上
    					alert("扫描成功::扫描码=" + result);
    				}
    			});
    		};//end_document_scanQRCode
    		
    	});//end_ready
    </script>

    wx.config 里面的各个属性ret.get("XXX")。是我们需要使用一个<% %>内部的java语言来获取的。具体如下:

    <pre name="code" class="html"><%
    Map<String, String> ret = new HashMap<String, String>();
    ret = JsSignUtil.sign(url);
    %>

    
    

    其中JsSignUtil 是获取js ticket的文件。这个文件的雏形,微信官方在jssdk技术文档底部给了demo,有三个版本,java, php,python。这里我对它做了一些微调:

    package util;
    
    import java.util.UUID;
    import java.util.Map;
    import java.util.HashMap;
    import java.util.Formatter;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.io.UnsupportedEncodingException;
    
    /**
     * 官方给的使用js的验证工具
     * @author Administrator
     *
     */
    public class JsSignUtil {
    	public static String accessToken = null;
    	
        public static Map<String, String> sign(String url) {
        	accessToken = WeixinUtil.getAccessToken("appid", "appsecret").getToken();
        	String jsapi_ticket = WeixinUtil.getJsApiTicket(accessToken);
       
        	
            Map<String, String> ret = new HashMap<String, String>();
            String nonce_str = create_nonce_str();
            String timestamp = create_timestamp();
            String string1;
            String signature = "";
    
            //注意这里参数名必须全部小写,且必须有序
            string1 = "jsapi_ticket=" + jsapi_ticket +
                      "&noncestr=" + nonce_str +
                      "×tamp=" + timestamp +
                      "&url=" + url;
            System.out.println("string1="+string1);
    
            try
            {
                MessageDigest crypt = MessageDigest.getInstance("SHA-1");
                crypt.reset();
                crypt.update(string1.getBytes("UTF-8"));
                signature = byteToHex(crypt.digest());
            }
            catch (NoSuchAlgorithmException e)
            {
                e.printStackTrace();
            }
            catch (UnsupportedEncodingException e)
            {
                e.printStackTrace();
            }
    
            ret.put("url", url);
            ret.put("jsapi_ticket", jsapi_ticket);
            ret.put("nonceStr", nonce_str);
            ret.put("timestamp", timestamp);
            ret.put("signature", signature);
            ret.put("appId", "wxcbba33f6b9ce1286");
    
            System.out.println("1.ticket(原始)="+jsapi_ticket);
            System.out.println("2.url="+ret.get("url"));
            System.out.println("3.jsapi_ticket(处理后)="+ret.get("jsapi_ticket"));
            System.out.println("4.nonceStr="+ret.get("nonceStr"));
            System.out.println("5.signature="+ret.get("signature"));
            System.out.println("6.timestamp="+ret.get("timestamp"));
            
            return ret;
        }
        
        
        /**
         * 随机加密
         * @param hash
         * @return
         */
        private static String byteToHex(final byte[] hash) {
            Formatter formatter = new Formatter();
            for (byte b : hash)
            {
                formatter.format("%02x", b);
            }
            String result = formatter.toString();
            formatter.close();
            return result;
        }
    
        /**
         * 产生随机串--由程序自己随机产生
         * @return
         */
        private static String create_nonce_str() {
            return UUID.randomUUID().toString();
        }
    
        /**
         * 由程序自己获取当前时间
         * @return
         */
        private static String create_timestamp() {
            return Long.toString(System.currentTimeMillis() / 1000);
        }
    }
    

    接下来介绍
    wx.ready(function(){ wx.XXX});
    
    

    放在wx.ready 里面的内容,会等到相关信息全部加载完毕后才可以被触发。如果用户引入的接口是需要点击才会调用的,则放不放在里面都无所谓。比如上面例子的接口是用来检验当前配置信息是否合法的,那么这个功能是不需要用户来点击的,当你打开网页时,自动就会调用该接口,那么它就必须放在ready里面。再比如我们打算调用的扫一扫,这个必须(最好是)是用户进入页面后点击某个按钮才触发,这么就不必放到ready里面。

    下面再解释扫一扫接口的代码:

    //扫描二维码
    		document.querySelector('#scanQRCode').onclick = function() {
    			wx.scanQRCode({
    				needResult : 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
    				scanType : [ "qrCode", "barCode" ], // 可以指定扫二维码还是一维码,默认二者都有
    				success : function(res) {
    					var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
    					document.getElementById("wm_id").value = result;//将扫描的结果赋予到jsp对应值上
    					alert("扫描成功::扫描码=" + result);
    				}
    			});
    		};//end_document_scanQRCode

    我们看到官方的文档只有一个
    wx.scanQRCode({ XXX });,我们给他套上一个document.querySelector()。这个作用就是用户点击才会触发该事件。如果不套document,直接放在外面那么一旦进入该网页,系统就自动调用了接口。
    #scanQRCode这个值去掉#后,就是我们按钮的id,拥有该id的按钮即可调用接口。这个id是官方给的,不可以自己随意改。

    
    
    <button id="scanQRCode" >扫描二维码</button>

    水平有限,如有错误,多多指正


    展开全文
  • 微信企业号,测试扫一扫功能

    千次阅读 2018-01-23 18:25:44
    using Senparc.Weixin.HttpUtility; using Senparc.Weixin.Work.Containers; using Senparc.Weixin.Work.Helpers; using System; using System.Collections.Generic; using System.Linq;...using Sy
    using Senparc.Weixin.HttpUtility;
    using Senparc.Weixin.Work.Containers;
    using Senparc.Weixin.Work.Helpers;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    namespace wxwork
    {
        public partial class Index : System.Web.UI.Page
        {
            public string Secret = "acO2CkgxxxxqeEWT2IPzdvQxxxxx9H4";
            public string CorpID = "xxx1f3e8axxxbc2ddf";
            public string url = "http://wxt.buynow.com.cn/";
    
    
            public long timestamp = 0;
            public string nonceStr = null;
            public string jsapi_ticket = null;
            public string signature = null;
    
            protected void Page_Load(object sender, EventArgs e)
            {
    
                if (!IsPostBack)
                {
                    RequestUtility.SetHttpProxy("192.168.72.237", "8080", "jinyunni", "xxxx");
    
                    JsApiTicketContainer.Register(CorpID, Secret);
                    timestamp = JSSDKHelper.GetTimestamp();
                    nonceStr = JSSDKHelper.GetNoncestr();
                    jsapi_ticket = JsApiTicketContainer.GetTicket(CorpID, Secret, true);
                    signature = JSSDKHelper.GetSignature(jsapi_ticket, nonceStr, timestamp, url);
                }
            }
        }
    }

    下面是HTML代码

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="wxwork.Index" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
        <script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
    </head>
    <body>
    
        <div>
            <button id="sys" style="height: 100px; width: 400px;">扫一扫</button>
        </div>
    
        <script>
            wx.config({
                debug: false,
                beta: true,
                appId: '<%=CorpID%>',
                timestamp: <%=timestamp%>,
                nonceStr: '<%=nonceStr%>',
                    signature: '<%=signature%>',
                    jsApiList: [
                        'checkJsApi',
                        'onMenuShareAppMessage',
                        'onMenuShareWechat',
                        'shareAppMessage',
                        'shareWechatMessage',
                        'startRecord',
                        'stopRecord',
                        'onVoiceRecordEnd',
                        'playVoice',
                        'pauseVoice',
                        'stopVoice',
                        'uploadVoice',
                        'downloadVoice',
                        'chooseImage',
                        'previewImage',
                        'uploadImage',
                        'downloadImage',
                        'getNetworkType',
                        'openLocation',
                        'getLocation',
                        'hideOptionMenu',
                        'showOptionMenu',
                        'hideMenuItems',
                        'showMenuItems',
                        'hideAllNonBaseMenuItem',
                        'showAllNonBaseMenuItem',
                        'closeWindow',
                        'scanQRCode',
                        'previewFile',
                        'openEnterpriseChat',
                        'selectEnterpriseContact',
                        'onHistoryBack',
                        'openDefaultBrowser',
                    ]
            });
    
    
            wx.ready(function () {
    
                $(function () {
                    $("#sys").click(function () {
                        wx.scanQRCode({
                            desc: 'scanQRCode desc',
                            needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
                            scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                            success: function (res) {
                                // 回调
                                alert(res.resultStr);
                            },
                            error: function (res) {
                                if (res.errMsg.indexOf('function_not_exist') > 0) {
                                    alert('版本过低请升级')
                                }
                            }
                        });
                    });
    
    
    
                }
    
    
                );
    
    
    
    
    
            });
    
        </script>
    
    
    
    </body>
    </html>
    
    展开全文
  • 企业微信调用扫一扫功能,和公众号有点不一样,两种调用我都成功了。
  • 先引入 <scripttype="text/javascript"src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> 1.注册 首先请求后台,拿到注册参数 ,下面的第行代码 data 为后台返回值 ... ...

    引入(两种方式)

    (1)第一种方式

    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script> 

    (2)第二种方式

    用npm

    import wx from 'weixin-js-sdk'

     

    1.注册

     首先请求后台,拿到注册参数 ,下面的第一行代码  data 为后台返回值

    【配置wx.config,其中appIdtimestampnonceStrsignature都是由后台生成】

    let data ={}  //data为后台返回值
    
    wx.config({
      beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
      appId: data.corpId, // 必填,企业微信的corpID
      timestamp: data.timestamp, // 必填,生成签名的时间戳
      nonceStr: data.noncestr, // 必填,生成签名的随机串
      signature: data.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
      jsApiList: ["chooseImage", "invoke"] // 必填,需要使用的JS接口列表,凡是要调用的接口都需要传进来
    });
    /*wx.ready(function () {
      wx.checkJsApi({
        jsApiList: ["invoke", "scanQRCode"], // 需要检测的JS接口列表,所有JS接口列表见附录2,
        success: function (ress) {
          // 以键值对的形式返回,可用的api值true,不可用为false
          // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
        }
      });
    });*/
    wx.error(function (res) {
      console.log("错误:" + JSON.stringify(res));
    });

     

    2. 使用

    在需要的地方  调以下方法 打开扫一扫

    function scanCode() {
      wx.ready(() => {
        wx.checkJsApi({
          jsApiList: ["invoke", "scanQRCode"], // 需要检测的JS接口列表,所有JS接口列表见附录2,
          success: res => {
            // 以键值对的形式返回,可用的api值true,不可用为false
            // 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"}
          }
        });
        wx.invoke("enterpriseVerify", {}, res => {
          // alert(JSON.stringify(res));
        });
        wx.scanQRCode({
          desc: "scanQRCode desc",
          needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果,
          scanType: ["qrCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有
          success: res => {
        
            let data = JSON.parse(res.resultStr);
            //扫码后的后续动作
            
           
          },
          error: res => {
            if (res.errMsg.indexOf("function_not_exist") > 0) {
              alert("版本过低请升级");
            }
          }
        });
      });
    }

     

    展开全文
  • 难点:如何调起企业微信扫一扫功能 实现步骤如下 1:注册企业微信,成为管理员,得到CORPID(企业ID,每个企业微信都有一个,企业下的所有应用都是同一个)和CORPSECRET(应用Secret,每个应用都有,各不相同) 企业...

    需求:使用企业微信进行扫码装车。

    难点:如何调起企业微信扫一扫功能

    实现步骤如下

    1:注册企业微信,成为管理员,得到CORPID(企业ID,每个企业微信都有一个,企业下的所有应用都是同一个)和CORPSECRET(应用Secret,每个应用都有,各不相同)

    企业ID所在位置如下图

    应用Secret位置如下图,如果没有应用先创建应用(废话)

    3,开始配置扫码核心代码文件,单独一个php文件叫qy-weixin.php。就当接口文件吧

    <?php
    // 签名公司效验地址 https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
    // 方法1 get_access_token() 获取 access_token
    // 方法2 get_jsapi_ticket() 获取 jsapi_ticket
    // 方法3 fen_xaing_config($url) 获取js分享配置文件,需要传入分享的地址(#号以前的)
    class WeiXingInit
    {
    
        public $CORPID = 'wwc1f9******40';//这里填企业ID
        public $CORPSECRET = 'vDX_a5********L8w';//这里是应用Secret
    
        // access_token 存储文件 频繁刷新access_token会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存access_token
        public $fileName_access = 'access_token_xiaolong.txt';
        public $fileName_sing = 'sing_xiaolong.txt';
        // jsapi_ticket 存储文件 频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket
        public $fileName_jsapi_ticket = 'jsapi_ticket_xl.txt';
    
        public $debug = false;
    
        // 获取 access_token
        public function get_access_token()
        {
            $data = [];
    
            if (is_file($this->fileName_access)) {
    
                // 验证是否过期
                $time = time();
                $data = json_decode(file_get_contents($this->fileName_access), true);
    
                if (($time - $data['time']) > ($data['expires_in'] - 100)) {
                    $data = $this->access_token_get_save();
                }
            } else {
                $data = $this->access_token_get_save();
            }
    
            return $data;
        }
    
        // access_token 获取保存
        public function access_token_get_save()
        {
    
            $url = "https://qyapi.weixin.qq.com/cgi-bin/gettoken";
            $post_string = "corpid=" . $this->CORPID . "&corpsecret=" . $this->CORPSECRET;
    
            $url = $url . '?' . $post_string;
    
            $data = json_decode($this->curl($url), true);
            $data['time'] = time();
            file_put_contents($this->fileName_access, json_encode($data));
            return $data;
        }
    
        // 获取 jsapi_ticket
        public function get_jsapi_ticket()
        {
            $data = [];
    
            if (is_file($this->fileName_jsapi_ticket)) {
    
                // 验证是否过期
                $time = time();
                $data = json_decode(file_get_contents($this->fileName_jsapi_ticket), true);
    
                if (($time - $data['time']) > ($data['expires_in'] - 100)) {
                    $data = $this->jsapi_ticket_get_save();
                }
            } else {
                $data = $this->jsapi_ticket_get_save();
            }
    
            return $data;
        }
    
        // jsapi_ticket 获取保存
        public function jsapi_ticket_get_save()
        {
            $data = [];
    
            $data_access = $this->get_access_token();
    
            if (!empty($data_access['access_token'])) {
    
                $url = "https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket";
                $post_string = "access_token=" . $data_access['access_token'];
    
                $url = $url . '?' . $post_string;
    
                $data = json_decode($this->curl($url, $post_string), true);
                $data['time'] = time();
                file_put_contents($this->fileName_jsapi_ticket, json_encode($data));
            }
            return $data;
        }
    
        // 生成随机字符串
        public function generate_password($length = 8)
        {
            // 密码字符集,可任意添加你需要的字符
            $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
            $password = "";
            for ($i = 0; $i < $length; $i++) {
                // 这里提供两种字符获取方式
                // 第一种是使用 substr 截取$chars中的任意一位字符;
                // 第二种是取字符数组 $chars 的任意元素
                // $password .= substr($chars, mt_rand(0, strlen($chars) – 1), 1);
                $password .= $chars[mt_rand(0, strlen($chars) - 1)];
            }
            return $password;
        }
    
        // 微信分享config
        public function fen_xaing_config($url)
        {
            $noncestr = $this->generate_password(15);
            $time = time();
            file_put_contents($this->fileName_sing, 'sing='.$this->get_qian_ming($url, $time, $noncestr).'url:'.$url.'time'.$time.'--non'.$noncestr);
            return [
                'debug' => $this->debug,
                'appId' => $this->CORPID, // 必填,公众号的唯一标识
                'timestamp' => $time, // 必填,生成签名的时间戳
                'nonceStr' => $noncestr, // 必填,生成签名的随机串
                'signature' => $this->get_qian_ming($url, $time, $noncestr), // 必填,签名
                'jsApiList' => ['onMenuShareTimeline', 'onMenuShareAppMessage', 'onMenuShareQQ', 'onMenuShareWeibo', 'onMenuShareQZone', 'scanQRCode'], // 必填,需要使用的JS接口列表
            ];
    
        }
    
        // 生成签名
        public function get_qian_ming($url, $t_time, $noncestr)
        {
            $data_jsapi = $this->get_jsapi_ticket();
    
            $str = "";
            if (!empty($data_jsapi['ticket'])) {
                $jsapi_ticket = $data_jsapi['ticket'];
                $timestamp = $t_time;
                $str = 'jsapi_ticket=' . $jsapi_ticket . '&noncestr=' . $noncestr . '&timestamp=' . $timestamp . '&url=' . $url;
                $str = sha1($str);
            }
            return $str;
    
        }
    
        // 获取接口数据
        public function curl($url, $post_string = '')
        {
    
            $curl = curl_init();
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($curl, CURLOPT_TIMEOUT, 500);
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
            curl_setopt($curl, CURLOPT_URL, $url);
            $res = curl_exec($curl);
            curl_close($curl);
            return $res;
    
        }
    
    }
    
    $weiXingInit = new WeiXingInit();
    $url = $_GET['url'];
    $info = $weiXingInit->fen_xaing_config($url);
    $protocol = (!empty($_SERVER[HTTPS]) && $_SERVER[HTTPS] !== off || $_SERVER[SERVER_PORT] == 443) ? "https://" : "http://";
    $url1 = $protocol.$_SERVER[HTTP_HOST].$_SERVER[REQUEST_URI];
    file_put_contents('url.txt',$url1);
    header('Access-Control-Allow-Origin:*'); //支持全域名访问,不安全,部署后需要固定限制为客户端网址
    header('Access-Control-Allow-Methods:POST,GET,OPTIONS,DELETE'); //支持的http 动作
    header('Access-Control-Allow-Headers:x-requested-with,content-type'); //响应头 请按照自己需求添加。
    $result = array('code' => 1, 'msg' => 'findok', 'data' => $info, 'url' => '', 'wait' => '');
    echo json_encode($result);exit;
    

    4,开始使用功能,创建一个文件进行测试。如下是doqrcode.php(不能直接使用,要填自己的接口地址

    <?php
    header('Content-Type:text/html;charset=UTF-8');
    ?>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width,height=device-height,inital-scale=1.0,maximum-scale=1.0,user-scalable=no;">
        <meta name="apple-mobile-web-app-capable" content="yes">
        <title>装车验收扫码入口</title>
        <link rel="stylesheet" href="//cdn.bootcss.com/bootstrap/3.3.4/css/bootstrap.min.css">
        <script src="//cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>
        <script src="//cdn.bootcss.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
        <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
        <style>
            body{margin: 0;padding: 0;height: 100%;}
            .mian{
                width: 100%;
                overflow: hidden;
                height: 100%;
                position: absolute;
                left: 0px;
                width: 100%;
                background-image: linear-gradient(160deg, #4F77AB 20%,#008cff 80%);
            }
            .center{
               text-align: center;
                position: relative;
                top: 30%;
                width: 100%;
            }
            #scanQRCode{
                margin: 0 auto;
                background-color: #fff;
                display: flex;
                justify-content: center;
                align-items: center;
                width: 155px;
                height: 155px;
                border-radius: 50%;
                font-size: 20px;
                font-weight: bold;
                text-align: center;
                letter-spacing:10px;
                padding-left: 10px;
            }
            .footer{
                position: absolute;
                bottom: 50px;
                width: 100%;
            }
            .texts{
                text-align: center;
                color: #BFBFBF;
            }
        </style>
    </head>
    
    <body>
    <div class="mian">
        <div class="center">
            <div id="scanQRCode">扫客户码</div>
        </div>
        <div class="footer"><div class="texts">本应用由深圳市中用软件科技有限公司提供技术支持</div></div>
    </div>
    </body>
    <script>
        window.onload = function () {
            var pageUrl = location.href.split('#')[0];
            //alert(location.href.split('#')[0]);
            // console.log(pageUrl)
            $.get('http://你的接口地址/qy-weixin.php', {
                url: pageUrl
            }, function (data) {
                if (data != '') {
                    var res = JSON.parse(data);
                    //alert(data);
                    resd = res.data;
                    wx.config({
                        beta: true, // 必须这么写,否则wx.invoke调用形式的jsapi会有问题
                        debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
                        appId: resd.appId, // 必填,企业微信的corpID
                        timestamp: resd.timestamp, // 必填,生成签名的时间戳
                        nonceStr: resd.nonceStr, // 必填,生成签名的随机串
                        signature: resd.signature, // 必填,签名,见 附录-JS-SDK使用权限签名算法
                        jsApiList: ["scanQRCode", "translateVoice"] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
                    });
    
    
    
                }
    
            });
    
            wx.error(function (res) {
                alert("出错了:" + res.errMsg); //这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
            });
    
            wx.ready(function () {
                wx.checkJsApi({
                    jsApiList: ['scanQRCode', 'translateVoice'],
                    success: function (res) {}
                });
    
                //点击按钮扫描二维码
                document.querySelector('#scanQRCode').onclick = function () {
                    wx.scanQRCode({
                        desc: 'scanQRCode desc',
                        needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                        scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
                        success: function (res) {
                           // alert(res);
                            var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                            window.location.href = './goodlist.php?khid='+result;//扫描后有个链接,然后跳转到该页面
    
                        },
                        error: function(res) {
                            if (res.errMsg.indexOf('function_not_exist') > 0) {
                                alert('版本过低请升级')
                            }
                        }
                    });
                };
    
            });
    
        }
    </script>
    </html>

    5,接口和测试文件都写好了,就回到企业微信进行配置应用配置访问路径。

    设置内容:https://open.weixin.qq.com/connect/oauth2/authorize?appid=你的企业ID&redirect_uri=你的测试文件地址&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    如:https://open.weixin.qq.com/connect/oauth2/authorize?appid=wwc123456e40&redirect_uri=http://baidu.com/doqrcode.php&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

    6,最后一步。非常重要。验证域名合法性

    具体验证方法里面有说明,其实很简单,就下载那个txt文件放到域名根目录,然后点击开始验证就可以了

    以上就是简单的企业微信上的扫码功能,其实微信扫码也差不多。附件包含以上文件和另加微信扫一扫接口文件。修改参考企业微信的接口文件即可。

    点我附件下载

    展开全文
  • 参考微信JS-SDK说明文档 尽管作用不是很大1.首先在JSP页面引入http://res.wx.qq.com/open/js/jweixin-1.1.0.js2.通过config接口注入权限验证配置
  • 企业微信--扫一扫功能(隐形坑)

    千次阅读 2019-05-09 16:13:17
    由于项目上有扫条码功能,所以调用企业微信扫一扫 一路下来都很顺,包括打包到公司线上环境走整个流程都没有任何问题 直到项目部署到客户那边,bug就来了 在公司的线上环境扫描条形码后返回的res.resultStr是一...
  • 微信企业号或微信公众号调用扫一扫功能JS-SDK安全域名配置配置设置好之后下面就上代码java代码 JS-SDK安全域名配置 企业微信号 —— 安全域名配置需要通过验证(如下图) 微信公众 ——— 安全域名配置 设置 ——&...
  • 该项目包含调用企业微信扫一扫接口或微信扫一扫接口,实现直接扫码功能
  • JAVA调用微信扫一扫

    千次阅读 2016-09-26 16:19:27
    java开发,调用微信扫一扫功能。
  • 企业微信使用扫一扫功能实现,配置一下即可。具体步骤可以到https://me.csdn.net/itxiaolong3查看对应文章
  • php页面调用微信扫一扫

    千次阅读 2017-05-15 14:15:59
    define("appID", "微信公众号appId"); define("appsecret", ""); class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appSecret) { $this->appI
  • 代码详细描述了如何通过微信接口且调用,代码简介明了
  • 页面调用微信扫一扫功能

    千次阅读 2018-06-06 09:51:31
    1.页面代码//调用扫一扫功能 function callScaning() { wx.config({ debug: false, appId: '${wxJson.appId}', timestamp: '${wxJson.timestamp}', nonceStr: '${wxJson...
  • 刚写了一个小DEMO 微信调用扫一扫功能的 java项目 但不知道怎么测试 怎么到手机上运行? (有微信公众号,另外还有新浪云的sae云应用,不知道用得上不) 求大神赐教!!!~~~
  • 利用微信JSSDK调用微信扫一扫功能

    万次阅读 2017-07-25 03:44:42
    1. 确保有 调起微信扫一扫接口 权限,测试号可能不行; 2. 导入相关JS 3. 页面触发扫码元素 4. 相关JS代码 var _appId = "wxz88dbd30e5580e59"; var _data = { appId : _appId, url : location.href, ...
  • 调用微信扫码接口实现扫一扫功能

    千次阅读 2019-06-25 10:58:56
    直接上源码: 先要引入js文件 ... debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 ...
  • 微信公众号调用扫一扫

    千次阅读 2019-04-27 15:58:00
    文章目录微信公众号调用扫一扫1.申请测试账号2.通过AppID和AppSecret获取access_token3.通过access_token添加菜单4.通过access_token获取jsapi_ticket5.配置JS接口安全域名6.在js中添加以下代码7.调用扫码 微信...
  • Java调用微信扫一扫

    千次阅读 热门讨论 2019-07-24 18:49:48
    公司公众号二次开发需要调用微信扫一扫接口,在网上查了很多相关资料感觉也不是特别的全,在此特意整理一遍资料,供给自己和大家参考,如有相关缺陷请大家指出。 步骤一:绑定域名 ...id=mp1421141115打开微信官方...
  • 调用微信扫一扫接口

    千次阅读 2018-03-05 18:55:32
    &lt;script type="text/javascript"...//微信配置 wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会...
1 2 3 4 5 ... 20
收藏数 22,529
精华内容 9,011
关键字:

企业微信调用扫一扫