公众号图片上传随笔

前端部分:html页面引入
<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
<script>
/*微信配置*/
         $.ajax({
             url:'upload',
             type:'post',
             dataType:'json',
   data : {"path":window.location.href},
             async:false,
             success:function(data){
                 var appId = data.data[0].appId;
                 var timestamp = data.data[0].timestamp;
                 var nonceStr = data.data[0].nonceStr;
                 var signature = data.data[0].signature;
                 alert(JSON.stringify(data.data[0]));
                 wx.config({
                     debug: true,//调试模式   当为tru时,开启调试模式
                     appId: appId,
                     timestamp: timestamp,//签名时间戳
                     nonceStr: nonceStr, //生成签名的随机串
                     signature: signature,//签名
                     jsApiList: ['chooseImage','uploadImage','getLocalImgData'],
                     success: function(data){
                         alert(222);
                         alert(JSON.stringify(data));
                     },
                     fail: function(data){
                         alert(111);
                         alert(JSON.stringify(data));
                     }
                 });
             },
             error:function(){alert("error");
             }
         })

.......微信签名验证

</script>

后台java代码 

@RequestMapping(value = "/upload",method = RequestMethod.POST)
@ResponseBody
public Object upload(HttpServletRequest request, HttpServletResponse response){
    String url = request.getParameter("path").toString();
    WXjsTicket wXjsTicket =coreService.getJsTicket();//微信获取的ticket;
    Map<String, Object> map = sign(wXjsTicket.getJsTicket(),url);
    return  new Result(map);
}
//对应前端签名验证逻辑
//url是引用js-SDK的html页面路径,路径有参数必须传(最好是前端传过来,如:url=window.location.href)
public static Map<String, Object> sign(String jsapi_ticket,String url) {
        Map<String, Object> ret = new HashMap<String, Object>();
        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("Sign string1:"+string1);
        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(string1.getBytes("UTF-8"));
            signature = byteToHex(crypt.digest());
            System.out.println("Sign signature:"+signature);

        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (UnsupportedEncodingException e)
        {
            e.printStackTrace();
        }
        ret.put("appId",APP_ID);
//        ret.put("jsapi_ticket", jsapi_ticket);
        ret.put("nonceStr", nonce_str);
        ret.put("timestamp", Long.valueOf(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);
}

注:除了ticket和accessToken方法没写,其他都可CV

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值