• 以前公司准备开发微信公众号,自己百度一下,学习别人的做的,具体从哪看的记不清了。这是整理的笔记。贴出代码,以供参考 后台 public class WeiXinConfigModel { public String timestamp; public String ...

    以前公司准备开发微信公众号,自己百度一下,学习别人的做的,具体从哪看的记不清了。这是整理的笔记。贴出代码,以供参考

    后台

    public class WeiXinConfigModel {
    public String timestamp;


    public String signature;


    public String noncestr;
    public String appid;


    public String getAppid() {
    return appid;
    }


    public void setAppid(String appid) {
    this.appid = appid;
    }


    public String getNoncestr() {
    return noncestr;
    }


    public void setNoncestr(String noncestr) {
    this.noncestr = noncestr;
    }


    public String getTimestamp() {
    return timestamp;
    }


    public void setTimestamp(String timestamp) {
    this.timestamp = timestamp;
    }


    public String getSignature() {
    return signature;
    }


    public void setSignature(String signature) {
    this.signature = signature;
    }


    }


    import java.sql.Timestamp;


    import javax.persistence.Entity;
    import javax.persistence.Id;
    import javax.persistence.Table;


    @Entity
    @Table(name = "accesstoken")
    public class AccessToken {
    @Id
    private String accessTokenId;
    private String appid;
    private String secret;
    private String access_token;
    private String create_time;
    private Timestamp createTimeStamp;


    public Timestamp getCreateTimeStamp() {
    return createTimeStamp;
    }
    public void setCreateTimeStamp(Timestamp createTimeStamp) {
    this.createTimeStamp = createTimeStamp;
    }
    public String getAccessTokenId() {
    return accessTokenId;
    }
    public void setAccessTokenId(String accessTokenId) {
    this.accessTokenId = accessTokenId;
    }
    public String getAppid() {
    return appid;
    }
    public void setAppid(String appid) {
    this.appid = appid;
    }
    public String getSecret() {
    return secret;
    }
    public void setSecret(String secret) {
    this.secret = secret;
    }
    public String getAccess_token() {
    return access_token;
    }
    public void setAccess_token(String access_token) {
    this.access_token = access_token;
    }
    public String getCreate_time() {
    return create_time;
    }
    public void setCreate_time(String create_time) {
    this.create_time = create_time;
    }


    }


    import java.io.InputStream;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    import java.util.UUID;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;


    import org.apache.log4j.Logger;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.ui.Model;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;


    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import com.carlock.model.AccessToken;
    import com.carlock.model.WeiXinConfigModel;
    import com.carlock.service.AccessTokenService;
    @Controller
    @RequestMapping("/weixin")
    public class WeiXinController1 {
    Logger logger = Logger.getLogger(this.getClass());
    static String AppId = "wxb2fdcdfsdfdsfs";// 第三方用户唯一凭证
    static String secret = "1cd9198e6bc4sdsdsdsdsds";// 第三方用户唯一凭证密钥,即appsecret


    @Autowired
    AccessTokenService accessTokenService;


    public static String getAccessToken() {
    String access_token = "";
    String grant_type = "client_credential";// 获取access_token填写client_credential
    // 这个url链接地址和参数皆不能变
    String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=" + grant_type + "&appid=" + AppId + "&secret="
    + secret;
    try {
    URL urlGet = new URL(url);
    HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
    http.setRequestMethod("GET"); // 必须是get方式请求
    http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    http.setDoOutput(true);
    http.setDoInput(true);
    System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
    System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
    http.connect();
    InputStream is = http.getInputStream();
    int size = is.available();
    byte[] jsonBytes = new byte[size];
    is.read(jsonBytes);
    String message = new String(jsonBytes, "UTF-8");
    JSONObject demo=JSON.parseObject(message);
    access_token=demo.getString("access_token");
    is.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return access_token;
    }


    public static String getTicket(String access_token) {
    String ticket = null;
    String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + access_token + "&type=jsapi";// 这个url链接和参数不能变
    try {
    URL urlGet = new URL(url);
    HttpURLConnection http = (HttpURLConnection) urlGet.openConnection();
    http.setRequestMethod("GET"); // 必须是get方式请求
    http.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    http.setDoOutput(true);
    http.setDoInput(true);
    System.setProperty("sun.net.client.defaultConnectTimeout", "30000");// 连接超时30秒
    System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时30秒
    http.connect();
    InputStream is = http.getInputStream();
    int size = is.available();
    byte[] jsonBytes = new byte[size];
    is.read(jsonBytes);
    String message = new String(jsonBytes, "UTF-8");
    JSONObject demoJson = JSON.parseObject(message);
    ticket = demoJson.getString("ticket");
    is.close();
    } catch (Exception e) {
    e.printStackTrace();
    }
    return ticket;
    }


    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 "";
    }


    @RequestMapping("/index")
    @ResponseBody
    public WeiXinConfigModel Index(HttpServletRequest request, HttpServletResponse response, String address,
    AccessToken accessToken,Model model) {
    // 1、获取AccessToken

    String access_token ="";
    if(access_token==null||access_token==""){
    accessToken=accessTokenService.select();
    if(accessToken.getAccess_token()==null||accessToken.getAccess_token().equals("")||accessToken.getAccess_token().length()<=0){
    access_token=getAccessToken();
    saveAccessToken(access_token);
    }else{
    //如果以前获取过
    //access_token有失效时间,先检查以前存入的是不是已经失效
    Long now = new Date().getTime();//获取当前时间的
    //当前时间减去存入时间,看看是不是在失效时间范围7200S内,我这里设置的验证时间小于7200s
    Long count = now - accessToken.getCreateTimeStamp();// 1000*60*2
    int nowLong = 1000 * 60 * 100;// 100分钟
                  if (count > nowLong) {//失效了  重新获取存入
                  access_token=getAccessToken();
         saveAccessToken(access_token);
                  }else{//未失效,下面直接调用,这个可以不要
                  
                  }
    }

    }
    // 2、获取Ticket
    String jsapi_ticket = getTicket(access_token);
    // 3、时间戳和随机字符串
    String noncestr = UUID.randomUUID().toString().replace("-", "").substring(0, 16);// 随机字符串
    String timestamp = String.valueOf(System.currentTimeMillis() / 1000);// 时间戳
    // 5、将参数排序并拼接字符串
    String str = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + noncestr + "&timestamp=" + timestamp + "&url="
    + address;
    // 6、将字符串进行sha1加密
    String signature = SHA1(str);
    WeiXinConfigModel weixin = new WeiXinConfigModel();
    weixin.setSignature(signature);
    weixin.setNoncestr(noncestr);
    weixin.setTimestamp(timestamp);
    weixin.setAppid(AppId);
    return weixin;
    }

    //保存access_token

    public void saveAccessToken(String access_token){
    try {
    AccessToken accessToken=new AccessToken();
    accessToken.setAccess_token(access_token);//AppId
    accessToken.setAppid(AppId);
    accessToken.setSecret(secret);
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
    Date date=new Date();
    String time=df.format(date);
    accessToken.setCreate_time(time);
    accessTokenService.insert(accessToken); //保存accessToken,可以根据自己情况存入数据库
    } catch (Exception e) {
    // TODO: handle exception
    e.printStackTrace();
    }
    }



    }

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

    <script type="text/javascript" src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
    <script type="text/javascript">
    //获取微信验证
    $(function() {
    var signature;
    var noncestr;
    var timestamp;
    var appid;
    var url1 = window.location.href;  //获取当前路径  记住域名一定要在微信公众号添加了安全域名配置
    $(document).ready(
    function() {
    $.ajax({
    type : "post",
    url : "/weixin/index?address="+ window.location.href,//通过后台请求,获取微信验证信息
    dataType : "json",
    contentType : "application/json; charset=utf-8",
    success : function(data) {
    signature = data.signature;
    noncestr = data.noncestr;
    timestamp = data.timestamp; 
    appid = data.appid;
    wx.config({
    debug : false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId : appid, // 必填,公众号的唯一标识
    timestamp : timestamp1, // 必填,生成签名的时间戳
    nonceStr : noncestr,// 必填,生成签名的随机串
    signature : signature,// 必填,签名,见附录1
    jsApiList : [ 'scanQRCode' ]// 必填,需要使用的JS接口列表,所有JS接口列表见附录2
    });
    //config信息验证失败
    wx.error(function(res) {
    alert("验证失败");
    });
    },
    error : function(data) {
    alert('网络错误');
    }
    });
    });
    });


    //点击扫码按钮
    $("#scanRCode").click(function(){
    wx.scanQRCode({
    needResult : 1,//默认0,扫描结果,微信处理,1,直接返回扫描结果
    scanType : [ "qrCode" ],//指定扫二维码
    success : function(res) {
    var url = res.resultStr;//result为1时,扫码返回的结果  url即为二维码中数据
    if(url.indexOf(",")>=0){
                         var getresult = url.split(',');
                         var getresult1 = getresult[1];
                         //弹出二维码结果
                        alert(getresult1);
                     }else{
                         //有问题
                     }
    }
    });    
    });


    展开全文
  • 微信开发之JSSDK调用 2016-11-22 17:03:13
    由于项目需要,需要接触微信开发,并要调用微信JS-SDK里面的接口。 因为经验缺乏,我百度一下关于微信开发的资料,但收集的资料都不尽人意。网上的主流的微信开发是采用PHP开发的,而本人学的Java。所以对PHP微信...
  • 微信JSSDK引入微信开发 2016-07-15 11:08:47
    微信JS-SDK是微信公众平台面向网页开发者提供的基于微信内的网页开发工具包。通过使用微信JS-SDK,网页开发者可借助微信高效地使用拍照、选图、语音、位置等手机系统的能力,同时可以直接使用微信分享、扫一扫、卡券...
  • 微信开发之入门教程 2016-01-12 10:55:26
    时间葱葱,小宝鸽入职也有半年了,刚入的时候刚好有负责开发一个微信企业号的新项目。从项目的一无所有到第一版上线,再一步步完善升级。期间学到了许多东西。对微信开发也是有了一定的认识。在此,小宝鸽再次无私地...
  • 在微信项目开发中,我们有时候需要用到微信的一些功能,这就需要引入微信jssdk,这个js引入的协议应该与项目使用的协议之,例如:http时:http://res.wx.qq.com/open/js/jweixin-1.0.0.jshttps时:...
  • 第一步,在微信小程序开发工具里,找到utils的文件夹,可以通过新建js文件,将需要引入js文档拷贝到对应文档里,也可以直接从文件夹里放入js文件。  第二步,在需要使用的js页面文件里使用require的将文件引入...
  • 微信小程序 引入es6 promise 2017-03-07 09:25:58
    微信小程序开发两个月了.大家的项目都在不断迭代.已经不是小程序.这时候就会遇到多层回调嵌套的问题.有些目不忍视了.迫不得已引入es6-promise.在微信小程序内测的时候promise不需要手动引入,后来被微信移除了.看看...
  • 手把手教你springboot企业微信开发(二)1、企业微信开发第一步2、weixin-java-cp-demo-master1)、引入thymeleaf改造项目2)增加Configuration3)回到企业号4)穿透内外网5)完善 从这一篇开始,开始从实际项目探索...
  • 3.在您要使用的js引入js 4.使用暴露出来的方法 例子:使用md5加密 首先将md5.js放入项目里某个文件夹中(我这里放在了utils工具文件夹中) 打开md5.js ,将我要使用的方法用module.exports给暴露...
  •  基于H5开发项目,嵌入到企业微信中,并接入js-sdk 并运用企业微信接口。 开发环境:  腾讯企业微信最新版本。后端环境不做要求,能跑通即可(这里我选用的是eclipse的maven项目,之前也出了一篇搭建后台项目的...
  • 首先请阅读微信JS-SDK说明文档,了解微信JS的相关说明。 根据官方的使用步骤,关键的有以下几步 绑定域名(很关键) 引入JS文件(很简单) 通过config接口注入权限验证配置(很重要) 通过ready接口处理成功验证...
  • 微信公众号开发
  • 微信js-sdk引入!绝对干货 2019-04-19 17:22:54
    微信公众号开发js-sdk 首先申请一个测试号,然后进行配置。 话不多说,直接上图: 其中这里的url和token是需要自己定义的,url要确保能跟外网能访问,是一个地址,微信后台能进行访问和验证,确保能跟外网联通。...
  • 微信开发的准备工作(不熟,不是我来搞的,copy一下别人和官方的) 1.绑定域名 先登录微信公众平台进入“公众号设置”的“功能设置”里填写“JS接口安全域名”。 备注:登录后可在“开发者中心”查看对应的接口...
  • 微信H5开发(二) 2018-07-15 10:45:14
    这篇主要讲解微信H5 常用到的微信模块和微信文件的引入微信公众号、微信商务平台、微信开放平台的相关配置。 第一次使用微信开发文档的时候,感觉文档里面写的内容不算太难,但在实际开发中会碰到很多预想不到的...
  • 3.一定需要仔细看企业微信开发文档,不然很多自己意想不到的bug。企业微信jsSdk的说明 4.关于 应用注意事项wx.agentConfig调用的说明 5.配置问题(下载说明中的文件配置到自己的根目录) 6,其实...
  • 首先需要公众号管理员去设置JS接口安全域名 再引入jssdk的js文件 在需要调用JS接口的页面引入如下JS文件,(支持https):http://res.wx.qq.com/open/js/jweixin-1.4.0.js 如需进一步提升服务稳定性,当上述资源...
  • 微信小程序引入外部js 2018-12-03 14:06:32
    var API_URL = 'https://web.ynstkz.com/'; var token;   var requestHandler = { url:{}, params: {}, header:{}, success: function (res) { // success }, fail: function () { ......
  • 最近需要做一个页面,该页面使用微信浏览器打开,功能如下: 1、用户打开链接之后获取到用户的openId,用于支付、获取后台数据等场景 2、自定义分享链接、标题、图标、描述等 3、隐藏微信页面中的某些菜单项列表 ...
  • 最近项目中的网页通过微信分享朋友或朋友圈等功能出现了无法显示分享图片等信息,后经过排查发现是微信版本升级导致,采用js-sdk完成分享接口,为了快速实现该功能效果,于是我打算通过前台js进行实现来看看分享效果...
1 2 3 4 5 ... 20
收藏数 29,655
精华内容 11,862