微信公众号开发--微信JS-SDK扫一扫功能(一)

来源:互联网 发布:家用网络50兆 编辑:程序博客网 时间:2024/05/29 09:02


package com.ouyeel.util;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.apache.commons.httpclient.HttpClient;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;

import com.ouyeel.controller.AuthController;
import com.ouyeel.wx.pojo.AccessToken;
import com.ouyeel.wx.util.WeixinUtil;

import net.sf.json.JSONObject; 

public class Sign {
 
 private static Logger log = LoggerFactory.getLogger(Sign.class); 
    public static void main(String[] args) {
       String url=request.getRequestURL()+"";
  if(request.getQueryString()!=null){
   url = url+"?"+request.getQueryString().toString();
  }
  Map map = Sign.sign( url ,appid,secret);
    }
 
 
    public static Map<String, String> sign(String url,String appid,String secret) {
     //这里的jsapi_ticket是获取的jsapi_ticket。
//        String jsapi_ticket1 = JSAPITicketTool.getTicket();
//      AccessToken accessToken = WeixinUtil.getAccessToken(appid, secret);
     String jsapi_ticket = getJsapiTicket(appid, secret);
     
        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 +
                  "&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("url", url);
        ret.put("jsapi_ticket", jsapi_ticket);
        ret.put("nonceStr", nonce_str);
        ret.put("timestamp", timestamp);
        ret.put("signature", signature);

        return ret;
    }

    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);
    }
   
    private static String getJsapiTicket(String appid, String secret){
     log.debug("请求获取getJsapiTicket==="+"参数是:"+"appid="+appid+";secret=="+secret+"==============");
        String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?"; 
        String params = "grant_type=client_credential&appid=" + appid + "&secret=" + secret + ""; 
       
        log.debug("获取Token路径"+requestUrl+params);
        JSONObject result = WeixinUtil.httpRequest(requestUrl+params,"GET",null);
        if(result==null){
         log.debug("result获取Token路径为空");
        }
        System.out.println("JSONObject result========"+result);
       
        String access_token = result.getString("access_token");
        
        requestUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?"; 
        params = "access_token=" + access_token + "&type=jsapi";
        log.debug("获取路径"+requestUrl+params);
        result = WeixinUtil.httpRequest(requestUrl+params,"GET",null); 
        String jsapi_ticket =result.getString("ticket"); 
//        int activeTime=Integer.parseInt(JSONObject.parseObject(result).getString("expires_in")); 
       /* Jssdk jssdk = new Jssdk(); 
        jssdk.setActiveTime(activeTime-600); 
        jssdk.setJsapiTicket(jsapi_ticket); 
        jssdkDao.update(jssdk);*/ 
        return jsapi_ticket; 
    }
}

阅读全文
0 0