微信开发如何调用扫一扫 - CSDN
  • 文章目录微信公众号调用扫一扫1.申请测试账号2.通过AppID和AppSecret获取access_token3.通过access_token添加菜单4.通过access_token获取jsapi_ticket5.配置JS接口安全域名6.在js中添加以下代码7.调用扫码 微信...

    微信公众号调用扫一扫

    1.申请测试账号

    https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login
    

    2.通过AppID和AppSecret获取access_token

    get https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=AppID&secret=AppSecret
    成功后返回:
    {
        "access_token": "20_7fXzw7DDR8uB6qY11-1NJb2WeZ5IkaOHQVpAzGQE7aPcJkaMJXed556yxDqIxqgx7PO2i8_mKVpNH2Zgq8A_pzmKlxUrg_NRhsudR8bkvzxlabsL7QWANuJueesgKxMqJtSVfDE6RJGUjJrRIQYeAHARZH",
        "expires_in": 7200
    }
    

    3.通过access_token添加菜单

     post https://api.weixin.qq.com/cgi-bin/menu/create?access_token=access_token
     参数:
     {
        "button": [
          {    
               "type":"view",
               "name":"搜索",
               "url":"http://localhost"
            },
        ]
    }
    成功后返回:
    {
        "errcode": 0,
        "errmsg": "ok"
    }
    

    4.通过access_token获取jsapi_ticket

    get https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=access_token&type=jsapi
    成功后返回:
    {
        "errcode": 0,
        "errmsg": "ok",
        "ticket": "HoagFKDcsGMVCIY2vOjf9jdV2ERo0qqIUE-ITmjCOdrOyWeL-POKb4BYkz4n5j4Ef7PJJobZvEmk3XUgH2aHvA",
        "expires_in": 7200
    }
    

    5.配置JS接口安全域名

    6.在js中添加以下代码

    $(document).ready(function () {
        wx.config({
            appId: appId, // 必填,公众号的唯一标识
            timestamp: timestamp, // 必填,生成签名的时间戳
            nonceStr: nonceStr, // 必填,生成签名的随机串
            signature: signature,// 必填,签名,见附录1
            jsApiList: ['scanQRCode']// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
        });
    });
    

    7.调用扫码

    wx.scanQRCode({
        needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
        scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
        success: function (res) {
            alert(JSON.stringify(res)) // 当needResult 为 1 时,扫码返回的结果
        },
        fail: function (res) {
            alert(JSON.stringify(res))
        }
    });
    
    展开全文
  • 微信扫一扫功能调用开发里面整个我开发的项目,直接下载导入eclipse中就可启动使用配置好自己的appid和screet即可

    前台:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"/>
        <meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=no"/>
        <title>51管票</title>
        <link rel="stylesheet" href="../css/bootstrap.css">
        <link rel="stylesheet" href="../css/type.css">
        <script  type="text/javascript" src="../js/jquery-3.2.1.min.js"></script>
        <script type="text/javascript" src="../js/bootstrap.js"></script>
        <script src="../js/jweixin-1.2.0.js"> </script>
    </head>
    <body>
    <script>
    var appId = '';// 必填,公众号的唯一标识 不用获取直接去微信拿
    var timestamp = 0;//为了让后台传过来的timetamp是数字类型 否则字符串 估计又会报config fail错误  必填,生成签名的时间戳不用获取程序可以生成
    var nonceStr = '';// 必填,生成签名的随机串 不用获取程序可以生成
    var signature = '';// 必填,签名 这是我们要获取的
    var curPath = location.href.split('#')[0];
    var pathName=window.document.location.pathname;
    var projectName=pathName.substring(0,pathName.substr(1).indexOf('/')+1);
    var userName=getCookie("userName1");
    var surl=getCookie("surl");
    $(document).ready(function(){
    $.ajax({
            url:projectName+'/wechat/getTicket.do',
            data:{"url":curPath},
            type:'GET',//get
            async:true,//false是否异步
            dataType:'text',//返回的数据格式类型json/xml/html/script/jsonp/text
            success:function(data){
                console.log(data);
                var obj = JSON.parse(data);
                appId = obj.appId;
                timestamp = Number(obj.timestamp);
                nonceStr = obj.nonceStr;
                signature = obj.signature;


                wx.config({//开始微信的配置 将获取的数据拿去请求
                    debug: false,
                    appId: appId,
                    timestamp:timestamp,
                    nonceStr: nonceStr,
                    signature: signature,
                    jsApiList: [//可以调用下面的接口 我们这里只是调用scanQRCode 也就是扫码接口
                      'checkJsApi',
                      'hideOptionMenu',
                      'scanQRCode',
                      'closeWindow'
                    ]
                });
            },
            error:function(data){
                console.log(data);//在前端控制台打印请求的状态
            }
        });


    wx.ready(function () {
    wx.scanQRCode({
                needResult: 1,
                desc: 'scanQRCode desc',
                scanType: ["qrCode","barCode"],
                success: function (res) {
               
     
                }
            });
     
       wx.error(function (res) {
     alert("出错了:"+res.errMsg);
       });
    });

    });
    </script>
    <script src="http://demo.open.weixin.qq.com/jssdk/js/api-6.1.js?ts=1420774989"> </script>
    </body>
    </html>


    java代码Controller:

    package com.dditax.project.ckts.web.controller.kprj;


    import java.io.PrintWriter;
    import java.util.Arrays;
    import java.util.Map;


    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    import org.apache.commons.codec.digest.DigestUtils;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.ResponseBody;


    import com.dditax.project.ckts.util.kprj.HttpUtils;
    import com.dditax.project.ckts.util.kprj.Sign;




    @Controller
    @RequestMapping("wechat/")
    public class WeiXinController{
        
        //public final static String TOKEN = "weixin";
        @Value("${token}")
        private String TOKEN;
        @Value("${appId}")
        private String appId;
        @Value("${secret}")
        private String secret;

        @SuppressWarnings("rawtypes")
        @RequestMapping(value = "getTicket.do", method = RequestMethod.GET)
        public @ResponseBody void getTicket(HttpServletRequest request, HttpServletResponse response) throws Exception{
            String jsonstr = "{\"appId\":\""+appId+"\",";
            String jsapi_ticket = HttpUtils.getJsTicket(appId,secret);
            // 注意 URL 一定要动态获取
            String url = request.getParameter("url");
            System.out.println("url:"+url);
            Map<String, String> ret = Sign.sign(jsapi_ticket, url);
            for (Map.Entry entry : ret.entrySet()) {
                jsonstr += "\""+entry.getKey() + "\":\"" + entry.getValue()+"\",";
            }
            jsonstr = jsonstr.substring(0,jsonstr.length()-1);
            jsonstr +="}";
            System.out.println(jsonstr);
            response.getWriter().println(jsonstr);
        }


    }

    工具类:

    package com.dditax.project.ckts.util.kprj;
    import java.io.BufferedInputStream;
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.OutputStreamWriter;
    import java.net.MalformedURLException;
    import java.net.URI;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;
    import java.util.zip.GZIPInputStream;
     
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.ClientProtocolException;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.CloseableHttpResponse;
    import org.apache.http.client.methods.HttpGet;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.entity.StringEntity;
    import org.apache.http.impl.client.CloseableHttpClient;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.impl.client.HttpClients;
    import org.apache.http.message.BasicNameValuePair;
    import org.apache.http.protocol.HTTP;
    import org.apache.http.util.EntityUtils;


    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    public class HttpUtils {
        private static String access_Token = "";
        /**
         * @Description: http get请求共用方法
         * @param @param reqUrl
         * @param @param params
         * @param @return
         * @param @throws Exception
         * @author dapengniao
         * @date 2016年3月10日 下午3:57:39
         */
        @SuppressWarnings("resource")
        public static String sendGet(String reqUrl, Map<String, String> params)
                throws Exception {
            InputStream inputStream = null;
            HttpGet request = new HttpGet();
            try {
                String url = buildUrl(reqUrl, params);
                HttpClient client = new DefaultHttpClient();
     
                request.setHeader("Accept-Encoding", "gzip");
                request.setURI(new URI(url));
     
                HttpResponse response = client.execute(request);
     
                inputStream = response.getEntity().getContent();
                String result = getJsonStringFromGZIP(inputStream);
                return result;
            } finally {
                if (inputStream != null) {
                    inputStream.close();
                }
                request.releaseConnection();
            }
     
        }
     
        /**
         * @Description: http post请求共用方法
         * @param @param reqUrl
         * @param @param params
         * @param @return
         * @param @throws Exception
         * @author dapengniao
         * @date 2016年3月10日 下午3:57:53
         */
        @SuppressWarnings("resource")
        public static String sendPost(String reqUrl, Map<String, String> params)
                throws Exception {
            try {
                Set<String> set = params.keySet();
                List<NameValuePair> list = new ArrayList<NameValuePair>();
                for (String key : set) {
                    list.add(new BasicNameValuePair(key, params.get(key)));
                }
                if (list.size() > 0) {
                    try {
                        HttpClient client = new DefaultHttpClient();
                        HttpPost request = new HttpPost(reqUrl);
     
                        request.setHeader("Accept-Encoding", "gzip");
                        request.setEntity(new UrlEncodedFormEntity(list, HTTP.UTF_8));
     
                        HttpResponse response = client.execute(request);
     
                        InputStream inputStream = response.getEntity().getContent();
                        try {
                            String result = getJsonStringFromGZIP(inputStream);
     
                            return result;
                        } finally {
                            inputStream.close();
                        }
                    } catch (Exception ex) {
                        ex.printStackTrace();
                        throw new Exception("网络连接失败,请连接网络后再试");
                    }
                } else {
                    throw new Exception("参数不全,请稍后重试");
                }
            } catch (Exception ex) {
                ex.printStackTrace();
                throw new Exception("发送未知异常");
            }
        }
     
        /**
         * @Description: http post请求json数据
         * @param @param urls
         * @param @param params
         * @param @return
         * @param @throws ClientProtocolException
         * @param @throws IOException
         * @author dapengniao
         * @date 2016年3月10日 下午3:58:15
         */
        public static String sendPostBuffer(String urls, String params)
                throws ClientProtocolException, IOException {
            HttpPost request = new HttpPost(urls);
            
            StringEntity se = new StringEntity(params, HTTP.UTF_8);
            request.setEntity(se);
            // 发送请求
            @SuppressWarnings("resource")
            HttpResponse httpResponse = new DefaultHttpClient().execute(request);
            // 得到应答的字符串,这也是一个 JSON 格式保存的数据
            String retSrc = EntityUtils.toString(httpResponse.getEntity());
            request.releaseConnection();
            return retSrc;
     
        }
     
        /**
         * @Description: http请求发送xml内容
         * @param @param urlStr
         * @param @param xmlInfo
         * @param @return
         * @author dapengniao
         * @date 2016年3月10日 下午3:58:32
         */
        public static String sendXmlPost(String urlStr, String xmlInfo) {
            // xmlInfo xml具体字符串
     
            try {
                URL url = new URL(urlStr);
                URLConnection con = url.openConnection();
                con.setDoOutput(true);
                con.setRequestProperty("Pragma:", "no-cache");
                con.setRequestProperty("Cache-Control", "no-cache");
                con.setRequestProperty("Content-Type", "text/xml");
                OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
                out.write(new String(xmlInfo.getBytes("utf-8")));
                out.flush();
                out.close();
                BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream()));
                String lines = "";
                for (String line = br.readLine(); line != null; line = br.readLine()) {
                    lines = lines + line;
                }
                return lines; // 返回请求结果
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return "fail";
        }
     
        private static String getJsonStringFromGZIP(InputStream is) {
            String jsonString = null;
            try {
                BufferedInputStream bis = new BufferedInputStream(is);
                bis.mark(2);
                // 取前两个字节
                byte[] header = new byte[2];
                int result = bis.read(header);
                // reset输入流到开始位置
                bis.reset();
                // 判断是否是GZIP格式
                int headerData = getShort(header);
                // Gzip 流 的前两个字节是 0x1f8b
                if (result != -1 && headerData == 0x1f8b) {
                    // LogUtil.i("HttpTask", " use GZIPInputStream  ");
                    is = new GZIPInputStream(bis);
                } else {
                    // LogUtil.d("HttpTask", " not use GZIPInputStream");
                    is = bis;
                }
                InputStreamReader reader = new InputStreamReader(is, "utf-8");
                char[] data = new char[100];
                int readSize;
                StringBuffer sb = new StringBuffer();
                while ((readSize = reader.read(data)) > 0) {
                    sb.append(data, 0, readSize);
                }
                jsonString = sb.toString();
                bis.close();
                reader.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
     
            return jsonString;
        }
     
        private static int getShort(byte[] data) {
            return (data[0] << 8) | data[1] & 0xFF;
        }
     
        /**
         * 构建get方式的url
         * 
         * @param reqUrl
         *            基础的url地址
         * @param params
         *            查询参数
         * @return 构建好的url
         */
        public static String buildUrl(String reqUrl, Map<String, String> params) {
            StringBuilder query = new StringBuilder();
            Set<String> set = params.keySet();
            for (String key : set) {
                query.append(String.format("%s=%s&", key, params.get(key)));
            }
            return reqUrl + "?" + query.toString();
        }
        
        
        /**
         * get请求获取网址
         * @param url
         * @param charset
         * @return
         */
        public static String sendGet(String url,String charset){
            CloseableHttpClient httpClient=HttpClients.createDefault();
            HttpGet get=new HttpGet(url);
            CloseableHttpResponse response = null;  
            String result=null;
            try {
                response=httpClient.execute(get);
                HttpEntity entity=response.getEntity();
                //System.out.println(entity.getContentType().getValue());
                result=EntityUtils.toString(entity,charset);
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return result;
        }
        //获取tickect
        public static synchronized String getJsTicket(String appId,String secret) throws Exception{
            JSONObject jsonObject = new JSONObject();
            String ticket = "";
            if(access_Token ==""){//如果是第一次获取就直接去请求新的
                ticket = getTicket(appId,secret);
            }else{//否则就请求旧的
                String result = sendGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_Token+"&type=jsapi","UTF-8");
                jsonObject = JSON.parseObject(result);
                int resultCode = jsonObject.getIntValue("errcode");
                if(resultCode!=0){//请求旧的如果不行
                    ticket = getTicket(appId,secret);//再去请求新的
                }else{//如果请求的新的ok
                    ticket = jsonObject.getString("ticket");//直接获取
                }
            }
            System.out.println("token:"+access_Token);
            return ticket;
        }
        /**
         * 获取最新的ticket
         * @return
         * @throws Exception 
         */
        public static String getTicket(String appId,String secret) throws Exception{
            JSONObject jsonObject = new JSONObject();
            Map<String, String> params = new HashMap<String, String>();
            params.put("grant_type", "client_credential");
            params.put("appid",appId);//wx78c7f3bd1a8a0806
            params.put("secret",secret);//8e93006f3b6d8f2f6edf7958393a0378
            String jstoken = HttpUtils.sendGet("https://api.weixin.qq.com/cgi-bin/token", params);
            System.out.println(jstoken);
            access_Token = net.sf.json.JSONObject.fromObject(jstoken).getString("access_token"); // 获取到token并赋值保存
            String result = sendGet("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_Token+"&type=jsapi","UTF-8");
            jsonObject = JSON.parseObject(result);
            return jsonObject.getString("ticket");
        }
    }


    具体的实现发送方式可以参考链接地址:

    里面含有所需要的整个项目:http://download.csdn.net/download/u010737411/10167401

    展开全文
  • 使用JS-SDK调用微信扫一扫,需要有公众号支持,通过公众号生成JS-SDK使用权限签名。本文直接调用已封装好的接口来获取随机数(noncestr)、时间戳(timestamp)、签名(signature),接口地址:...

    使用JS-SDK调用微信扫一扫,需要有公众号支持,通过公众号生成JS-SDK使用权限签名。本文直接调用已封装好的接口来获取随机数(noncestr)、时间戳(timestamp)、签名(signature),接口地址:http://xx.xx.com/xxmap/wechat/jsapi/getSignature.do?appId=APPID&url=URL。appId是公众号的标识,url是需要调用微信扫一扫的页面的地址,需要进行encodeURIComponent编码。

    调用微信扫一扫前端页面代码:

    <html lang="en">

    <head>

        <meta charset="UTF-8">

        <script src="plug-in/qrcode/jquery.min.js"></script>

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

        <title>微信扫一扫</title>

    </head>

    <body>

    <script type="application/javascript">

        var purl = encodeURIComponent(location.href);

        $.ajax({

            url:"voucherController.do?getSignature",

            data:{"url":purl},

            type:"POST",

            dataType:"json",

            success:function(result){

                wx.config({

                    debug:false,

                    appId:result.obj.appId,

                    timestamp:result.obj.timestamp,

                    nonceStr:result.obj.noncestr,

                    signature:result.obj.signature,

                    jsApiList:['scanQRCode']

                });

            },

            error:function(){

                alert("请求失败");

            }

        });

        function scanQr(){

            var ua = navigator.userAgent.toLowerCase();

            var isWeiXin  =ua.indexOf('micromessenger') != -1;

            if(!isWeiXin){

                alert('请用微信打开链接,才可使用扫一扫!');

            }

            wx.scanQRCode({

                needResult:1,

                scanType:["qrCode"],

                success:function (res) {

                    var scan = res.resultStr;

                    location.href=scan;

                },

                error:function(res) {

                    if(res.errMsg.indexOf('function_not_exist') > 0){

                        alert('当前版本低,请进行升级!');

                    }

                }

            });

        }

        wx.error(function(res){

            alert(res.errMsg);

        });

        //$(function(){

         //   setTimeout("scanQr()","1000");

        //});

    </script>

    <input type="button" οnclick="scanQr()" id="test" value="微信扫一扫" style="font-size: 30px;border: solid 1px;padding: 10px;"/>

    </body>

    </html>

    调用微信扫一扫后端代码:

    @RequestMapping(params = “getSignature”)

    @ResponseBody

    public AjaxJson getSignature(String url){

    AjaxJson j = new AjaxJson();

    String sigUrl = “http://xx.xx.com/xxmap/wechat/jsapi/getSignature.do?appId=APPID&url=” + url;

    //Get请求接口,获取随机数、时间戳、签名

    JSONObject jsonObject = HttpRequest.sendGet(sigUrl);

    JSONObject jsonObj = JSON.parseObject(jsonObject.getString(“result”));

    jsonObj.put(“appId” ,APPID);//公众号appid

    j.setObj(jsonObj);

    return j;

    }

     

    注意:jweixin-1.0.0.js的引用,使用vConsole调试,IOS系统可能会出现找不到变量:wx异常,这个时候可以直接把整个jweixin-1.0.0.js复制到你的JS中,就可以解决。

    展开全文
  • 根据微信api,整理了一下调用微信扫一扫功能。如有问题请指正: 以下是具体步骤: 1、绑定域名(很关键)2、引入JS文件(很简单) script src="http://res.wx.qq.com/open/js/jweixin-1.1.0.js">script>3、通过...

    根据微信api,整理了一下调用微信扫一扫功能。如有问题请指正:

    以下是具体步骤:

    1. 1、绑定域名(很关键
    2. 2、引入JS文件(很简单)<scriptsrc="http://res.wx.qq.com/open/js/jweixin-1.1.0.js"></script>
    3. 3、通过config接口注入权限验证配置(很重要
    4. 4、通过ready接口处理成功验证(还没用到)
    5. 5、通过error接口处理失败验证(还没用到)
    绑定域名(第一步):


    以下是通过config接口注入权限验证配置(第三步):

    下面是js代码:

    $.ajax({
                type : "post",
                url : "/weixin/open/weixinOAuthCallback_sign.action",
                data : {
                    "url" : location.href.split('#')[0]
                },
                dataType : "json",
                success : function(data) {
                    wx.config({ 
                        debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。   
                        appId: data.appId, // 必填,公众号的唯一标识
                        timestamp: data.timestamp, // 必填,生成签名的时间戳
                        nonceStr: data.nonceStr, // 必填,生成签名的随机串
                        signature: data.signature,// 必填,签名,见附录1
                        jsApiList: [
                                      'checkJsApi',
                                      'startRecord',
                                      'stopRecord',
                                      'translateVoice',
                                      'scanQRCode',// 微信扫一扫接口
                                      'openCard'
                                   ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 
                    }); 
                    wx.error(function(res) {
                        alert("出错了:" + res.errMsg);//这个地方的好处就是wx.config配置错误,会弹出窗口哪里错误,然后根据微信文档查询即可。
                    });
    
                    wx.ready(function() {
                        wx.checkJsApi({
                             jsApiList : ['scanQRCode'],
                             success : function(res) {
    
                             }
                        });
                    });
                    //点击按钮扫描二维码
                    $("#scanQRCode").click(function(){
                        wx.scanQRCode({
                            needResult : 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
                            scanType : [ "qrCode"], // 可以指定扫二维码还是一维码,默认二者都有
                            success : function(res) {
                                var result = res.resultStr; // 当needResult 为 1 时,扫码返回的结果
                                window.location.href = result;//因为我这边是扫描后有个链接,然后跳转到该页面
                            },
                            error : function(){
                                console.log('123');
                            }
                        });
                    });
                }
            });
    

    下面是后台java代码,用于获取sign签名AppID:微信公众号应用的唯一标识,AppSecret微信公众号的私匙(相当于密码)

    /**
           * 得到jsApi-ticket
           * @return
           */
          @SuppressWarnings({ "static-access", "unused" })
          private String getJsapiTicket(){
                HttpServletRequest request = ServletActionContext.getRequest();
                String code = request.getParameter("code");
            String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?"; 
            String params = "grant_type=client_credential&appid=" + APPID + "&secret=" + APP_SECRET + ""; 
            String result = this.httpGet(requestUrl+params); 
            String accessToken = com.alibaba.fastjson.JSONObject.parseObject(result).getString("access_token"); 
           
            requestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?"; 
            params = "access_token=" + accessToken + "&type=jsapi"; 
            result = this.httpGet(requestUrl+params); 
            String jsapi_ticket = com.alibaba.fastjson.JSONObject.parseObject(result).getString("ticket"); 
            return jsapi_ticket;
        }
          /**
           * 获取sign签名
           * @return
           */
          public String sign() {
                HttpServletRequest request = ServletActionContext.getRequest();
            Map ret = new HashMap();
            String url = request.getParameter("url");
            String jsapi_ticket= getJsapiTicket();
            String nonce_str = create_nonce_str();
            String timestamp = create_timestamp();
            String string1;
            String signature = "";
            int length=url.indexOf("#");
                String uri = url;
                if(length > 0){
                      uri=url.substring(0,length);//当前网页的URL,不包含#及其后面部分
                }
            //注意这里参数名必须全部小写,且必须有序
            string1 = "jsapi_ticket=" + jsapi_ticket +
                      "&noncestr=" + nonce_str +
                      "&timestamp=" + timestamp +
                      "&url=" + url;
            System.out.println(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("appId", APPID);
            ret.put("url", uri);
            ret.put("jsapi_ticket", jsapi_ticket);
            ret.put("nonceStr", nonce_str);
            ret.put("timestamp", timestamp);
            ret.put("signature", signature);
            System.out.println(signature);
            this.setJsonString(JsonUtil.toJSONString(ret));
            return "json";
        }
        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;
        }
        private static String create_nonce_str() {
            return UUID.randomUUID().toString();
        }
        private static String create_timestamp() {
            return Long.toString(System.currentTimeMillis() / 1000);
        }
          /**
         * 发送get请求
         * @param url    路径
         * @return
         */ 
        public static String httpGet(String url){ 
            //get请求返回结果 
             String strResult = null; 
            try { 
                DefaultHttpClient client = new DefaultHttpClient(); 
                //发送get请求 
                HttpGet request = new HttpGet(url); 
                HttpResponse response = client.execute(request); 
      
                /**请求发送成功,并得到响应**/ 
                if (response.getStatusLine().getStatusCode() == org.apache.http.HttpStatus.SC_OK) { 
                    /**读取服务器返回过来的json字符串数据**/ 
                      strResult = EntityUtils.toString(response.getEntity()); 
                } else { 
                    logger.error("get请求提交失败:" + url); 
                } 
            } catch (IOException e) { 
                logger.error("get请求提交失败:" + url, e); 
            } 
            return strResult; 
        }
    

    展开全文
  • 调用范例完整代码下载: ... csdn的这个博文写的有点啰嗦,建议移步...在网页上点一个按钮或者链接调用微信扫一扫然后返回结果我们继续处理,很多人应该都会有这样的需求,不过微信对这个空子比较严格,需要你的网页...
  • 求大神给个 微信开发 微信公众号sdk 调用扫一扫功能 java 项目 demo
  • 1、前端页面: <!DOCTYPE html> <html> <head>...meta charset="utf-8">...扫一扫测试</title> <meta name="renderer" content="webkit"> <meta http-equiv=...
  • 最近开发一个食堂项目,项目中用到使用微信扫一扫实现项目中的扫一扫的功能。 1、添加点击扫一扫的触发事件的按钮 <span id="scanQRCode">扫一扫</span> 2、添加微信扫一扫的js引用 <script ...
  • 前言这是自己第次进行微信开发,自己之前一直以为很简单,但是自己真正来做的时候才发现会遇到很多问题。认识的个小伙伴进行微信开发已经挺久了,如果需要可以直接问他或者将他的源代码拿过来。但是想想这个项目...
  • 功能需求:微信公众号里网页需要调用扫一扫功能 实现工具:微信JS-SDK接口 接口官方文档:微信JS-SDK说明文档 微信JS-SDK介绍: 微信JS-SDK是微信公众平台 面向网页开发者提供的基于微信内的网页开发工具包。 ...
  • 现实项目中业务需要开发微信公众号,业务场景其中有需求要使用微信扫一扫,奇怪的问题产生了,第一次进入页面的时候调用成功没有问题,当做别的操作之后,在点击调用微信扫一扫 发现无路如何都调用不起来了。...
  • C#、.NET 调用微信扫一扫接口完整demo,非常实用,已封装好微信扫一扫的接口
  • 所以就需要使用微信公众平台提供的JSSDK来调用扫一扫功能。仅以此来记录自己的学习过程,也希望能帮助到有此需求的一些朋友。 过程中参考文章有:https://blog.csdn.net/u011327333/article/details/50439...
  • Java调用微信扫一扫

    2019-07-24 18:49:48
    公司公众号二次开发需要调用微信扫一扫接口,在网上查了很多相关资料感觉也不是特别的全,在此特意整理一遍资料,供给自己和大家参考,如有相关缺陷请大家指出。 步骤一:绑定域名 ...id=mp1421141115打开微信官方...
  • 这章主要记录下调用微信JS-SDK中的扫一扫踩到的坑 一、引入JS文件 首先我们先引入js文件,地址为 http://res.wx.qq.com/open/js/jweixin-1.0.0.js,当然你也可以下载到本地,使用本地路径进行引入...
  • 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台 微信公众号开发--微信JS-SDK扫一扫功能后台
  • 正好微信JS-SDK提供了调用微信扫一扫的功能接口,下面让我们来看看是如何实现的吧。 第一步、微信JS-SDK的使用步骤,配置信息的生成获取讲解:  关于JS-SDK的使用步骤和timestamp(时间戳),nonceStr(随机串),...
  • 在自己的应用中打开微信扫一扫代码: private void toWeChatScan() { try { //利用Intent打开微信 Uri uri = Uri.parse("weixin://dl/scan"); Intent intent = new Intent(Intent.ACTION_VIEW, uri);
  • 1、安装、引用微信js-sdk #通过yarn安装 yarn add weixin-js-sdk #通过npm安装 npm i weixin-js-sdk 项目中的引用 import wx from 'weixin-js-sdk' ...wx.scanQRCode 调用微信扫一扫接口(官...
  • 先 说明本人是个新手,负责人要求我...废话少说,现在我分享一下调用微信扫一扫的过程及代码,系统框架采用的是SSH框架。  开发扫一扫的满足条件:   一、需要微信公众号的APP_ID  二、需要微信公众号的开发...
1 2 3 4 5 ... 20
收藏数 14,081
精华内容 5,632
热门标签
关键字:

微信开发如何调用扫一扫