java开发微信分享接口的步骤

微信分享接口的java开发的一些小步骤,具体内容如下

1.配置接口信息进行验证

代码如下:

  /**
   * 访问没认证的地址跳转
   *
   * @param request
   * @return 登录页面
   * @throws Exception
   */
  @RequestMapping(value = "/checkWxDomainUrl", method = RequestMethod.GET)
  public void checkWxDomainUrl(HttpServletRequest request) throws Exception {

    try {
      // 开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数
      String signature = request.getParameter("signature");// 微信加密签名(token、timestamp、nonce。)
      String timestamp = request.getParameter("timestamp");// 时间戳
      String nonce = request.getParameter("nonce");// 随机数
      String echostr = request.getParameter("echostr");// 随机字符串
      // 将token、timestamp、nonce三个参数进行字典序排序
      String[] params = new String[] { TOKEN, timestamp, nonce };
      Arrays.sort(params);
      // 将三个参数字符串拼接成一个字符串进行sha1加密
      String clearText = params[0] + params[1] + params[2];
      String algorithm = "SHA-1";
      String sign = new String(Hex.encodeHex(
          MessageDigest.getInstance(algorithm).digest((clearText).getBytes()), true));
      // 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
      if (signature.equals(sign)) {
        response.getWriter().print(echostr);
      }
    } catch (Exception e) {
      e.printStackTrace();
    }
  }

2.js配置

3.获取分享页面js需要参数   其中获取token、ticket加入缓存

  /**
  * 方法名:getWxConfig</br>
  * 详述:获取微信的配置信息 </br>
  * 开发人员:gy
  * @param request
  * @return 说明返回值含义
  * @throws 说明发生此异常的条件
   */
  @Override
  public Map<String, Object> getWxConfig(HttpServletRequest request) {
    Map<String, Object> ret = new HashMap<String, Object>();
    String appId = wXConfigure.getAppId(); // 必填,公众号的唯一标识
    String requestUrl = request.getRequestURL().toString();
    String accessToken = null;
    String jsapiTicket = null;
    String url = "";
    String timestamp = Long.toString(System.currentTimeMillis() / 1000); // 必填,生成签名的时间戳
    String nonceStr = UUID.randomUUID().toString(); // 必填,生成签名的随机串
    //此处先在缓存中查询,查询不到在调用接口查询 缓存中需要设置access-token的有效时间
//    redisTemplate.opsForValue().getOperations().delete(prefix);
    // accessToken = (String) redisTemplate.opsForValue().get(prefix);
    Token accessTokenFromRedis = getAccessTokenFromRedis();
    accessToken = accessTokenFromRedis.getAccessToken();
    if (accessTokenFromRedis.getAccessToken() != null) {
      jsapiTicket = (String) redisTemplate.opsForValue().get(prefixTicket);
      if (jsapiTicket==null) {
        url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken
            + "&type=jsapi";
        JSONObject json = httpRequest(url, "GET", null);
        if (json != null) {
          jsapiTicket = json.getString("ticket");
          redisTemplate.opsForValue().set(prefixTicket, jsapiTicket);
          redisTemplate.expire(prefixTicket, Integer.parseInt(wXConfigure.getExpireTime()),
              TimeUnit.SECONDS);
        }
    }
    }
    String signature = "";
    // 注意这里参数名必须全部小写,且必须有序
    String sign = "jsapi_ticket=" + jsapiTicket + "&noncestr=" + nonceStr + "&timestamp="
        + timestamp + "&url=" + requestUrl;
    try {
      MessageDigest crypt = MessageDigest.getInstance("SHA-1");
      crypt.reset();
      crypt.update(sign.getBytes("UTF-8"));
      signature = byteToHex(crypt.digest());
    } catch (NoSuchAlgorithmException e) {
      e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    }
    ret.put("appId", appId);
    ret.put("timestamp", timestamp);
    ret.put("nonceStr", nonceStr);
    ret.put("signature", signature);
    return ret;
  }

  /**
  * 方法名:byteToHex</br>
  * 详述:字符串加密辅助方法 </br>
  * 开发人员:gy </br>
  * @param hash
  * @return 说明返回值含义
  * @throws 说明发生此异常的条件
   */
  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;

  }

  /**
   * 从redis中获取accessToken,指定key的String值,过期时间7200s
   *
   * @param key
   * @return
   */
  public Token getAccessTokenFromRedis() {
    Token token = null;
    String assesstoken = (String) redisTemplate.opsForValue().get(wXConfigure.getTokenKey());
    if (null != assesstoken && !"".equals(assesstoken)) {
      token = new Token();
      token.setAccessToken(assesstoken);
      return token;
    } else {
      token = CommonWxUtil.getToken(wXConfigure.getAppId(), wXConfigure.getSecret());
      redisTemplate.opsForValue().set(wXConfigure.getTokenKey(), token.getAccessToken());
      redisTemplate.expire(wXConfigure.getTokenKey(), Integer.parseInt(wXConfigure.getExpireTime()),
          TimeUnit.SECONDS);
      return token;
    }
  }

4.页面的相关js的引入

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

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

<script type="text/javascript">

 // 微信信息的以及调用的配置
// 微信信息的以及调用的配置
  var signature=$("#signature").val();
  var appId=$("#appId").val();
  var timestamp=$("#timestamp").val();
  var nonceStr=$("#nonceStr").val();
  var userId=$("#userId").val();
  var productName=1;

  alert(signature);
wx.config({
  debug: false,
  appId:appId ,
  timestamp:timestamp,
  nonceStr: nonceStr,
  signature:signature,
  jsApiList: ['onMenuShareTimeline', 'onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone']
});

 wx.ready(function(){
   var isOk = true;
   wx.checkJsApi({
     jsApiList: ['onMenuShareTimeline'],
     fail: function (res) {
       alert("微信版本太低,不支持分享给朋友的功能!");
       isOk = false;
     },
     success: function (res) {
       alert("支持QQ分享。");
     }
   });
     // 获取“分享到朋友圈”按钮点击状态及自定义分享内容接口
      wx.onMenuShareTimeline({
        title: '第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单',
        desc: '第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单',
        link: 'http://4d536256.ngrok.io/login',
        imgUrl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png',
        success: function (res) {
           alert(JSON.stringify(res));
           if (res.errMsg=='shareTimeline:ok') {
           /*   $.ajax({
                type:"get",
                url:'insertCollectShare',
                data:{
                  userId:userId,
                },
                dataType:"json",
                async: false,
                success:function(data){
                 alert(200);
                },
                error:function(data){
                  var rUrl = xhr.getResponseHeader('CONTENTPATH');
                  window.location.href = rUrl;
                }
              }); */
             // 用户确认分享后执行的回调函数
              /* window.location.href = contextRoot + 'insertCollectShare?userId=' + userId; */
          }
        },
        cancel: function (res) {
          // 用户取消分享后执行的回调函数
           alert(res);
        }
      });

     // 获取“分享给朋友”按钮点击状态及自定义分享内容接口
      wx.onMenuShareAppMessage({
        title: '第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息', // 分享标题
        desc: "第七篇 :微信公众平台开发实战Java版之如何获取微信用户基本信息", // 分享描述
        link:'http://4d536256.ngrok.io/login',
        imgUrl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // 分享图标
        type: 'link', // 分享类型,music、video或link,不填默认为link
      });

      //获取“分享到QQ”按钮点击状态及自定义分享内容接口
      wx.onMenuShareQQ({
        title: '第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单', // 分享标题
        desc: '第六篇 :微信公众平台开发实战Java版之如何自定义微信公众号菜单', // 分享描述
        link: 'http://4d536256.ngrok.io/login', // 分享链接
        imgUrl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // 分享图标
        success: function () {
          // 用户确认分享后执行的回调函数
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
        }
      });

      //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口
      wx.onMenuShareWeibo({
        title: '分享到腾讯微博标题', // 分享标题
        desc: '分享到腾讯微博描述', // 分享描述
        link: 'http://4d536256.ngrok.io/login', // 分享链接
        imgUrl: 'http://busc.4ggogo.com/media/media/img/home-show-a.png', // 分享图标
        success: function () {
          // 用户确认分享后执行的回调函数
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
        }
      });

      //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口
      wx.onMenuShareQZone({
        title: '分享到QQ空间标题11111111111111111', // 分享标题
        desc: '分享到QQ空间描述2222222222222222222', // 分享描述
        link: 'http://4d536256.ngrok.io/login',
        imgUrl:'http://busc.4ggogo.com/media/media/img/home-show-a.png', // 分享图标
        success: function () {
          // 用户确认分享后执行的回调函数
        },
        cancel: function () {
          // 用户取消分享后执行的回调函数
        }
      });
 });

 </script>

备注:调转的路径为配置的域名路径,不然无法调用,图片大小不可以大于300k

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • java开发微信分享到朋友圈功能

    微信分享功能开发 用了一天时间,把微信发送给朋友和分享到朋友圈功能开发出来,在这里给大家分享一下,避免大家走弯路. 一.服务器端程序 package com.wiimedia.controller; import java.io.IOException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.ParseException; import

  • Java编程调用微信分享功能示例

    本文实例讲述了Java编程调用微信分享功能.分享给大家供大家参考,具体如下: 这篇文章介绍如何使用java开发微信分享功能,因为工作,已经开发完成,可使用. 如果想要自定义微信的分享功能,首先在自己的页面内首先使用AJAX.下面我具体举例. 首先是在页面内写入请求后台的AJAX /** * 调用微信分享接口 * */ public void WXConfig(){ String url = getPara("href"); WXConfigController scan = new W

  • java开发微信分享接口的步骤

    微信分享接口的java开发的一些小步骤,具体内容如下 1.配置接口信息进行验证 代码如下: /** * 访问没认证的地址跳转 * * @param request * @return 登录页面 * @throws Exception */ @RequestMapping(value = "/checkWxDomainUrl", method = RequestMethod.GET) public void checkWxDomainUrl(HttpServletRequest requ

  • Java微信分享接口开发详解

    本文实例为大家分享了Java微信分享接口开发的具体代码,供大家参考,具体内容如下 Java微信分享,步骤是 1.根据当前的url,获取signature,nonceStr,timestamp 和appId. 2.通过signature,nonceStr,timestamp 和appId来配置微信 wx.config. 3.通过wx.ready实现微信分享功能. 1.html端 引入微信JS-SDK. <script src="http://res.wx.qq.com/open/js/jwe

  • java开发微信公众号支付

    最近做了微信公众号支付的开发,由于是第一次做也摸索了几天的时间,也只是达到了实现功能的水平,并没有太多考虑到性能问题,所以这篇文章比较适合初学者. 微信公众号支付的总体其实很简单,大致就分为三步.第一步需要获取用户授权:第二步调用统一下单接口获取预支付id:第三步H5调起微信支付的内置的js.下面介绍具体每一步的开发流程. 一    首先要明确微信公众号支付属于网页版支付,所以相较于app的直接调取微信支付要多一步微信授权.也就是需要获取用户的openid.微信公众号使用的交易类型是JSAPI,

  • thinkPHP微信分享接口JSSDK用法实例

    本文实例讲述了thinkPHP微信分享接口JSSDK用法.分享给大家供大家参考,具体如下: 首先在数据库中添加access_token表: SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for access_token -- ---------------------------- DROP TABLE IF EXISTS `access_token`; CREATE TABLE `acc

  • 使用Typescript开发微信小程序的步骤详解

    Typescript的优势咱不需要赘述太多,有兴趣可以参考(https://www.typescriptlang.org/).今天给大家分享一下如何在微信小程序(或者其他同类小程序)开发中使用Typescript. 这个分两种情况,最简单的做法就是在创建项目时,选择Typescript这个选项,如下图所示.但要注意,这个选项只有在选择"Use no cloud service"才有,而另外一种Mini Program Cloud Base则不支持.这个可能是开发工具还没有跟上吧,希望以

  • Java开发SpringBoot集成接口文档实现示例

    目录 swagger vs smart-doc Swagger的代码侵入性比较强 原生swagger不支持接口的参数分组 简单罗列一下smart-doc的优点 SpringBoot集成 smart-doc 引入依赖,版本选择最新版本 新建配置文件smart-doc.json 通过执行maven 命令生成对应的接口文档 访问接口文档 功能增强 1. 开启调试 2. 通用响应体 3. 自定义Header 4. 参数分组 5. idea配置doc 6. 完整配置 小结 之前我在SpringBoot老鸟

  • js微信分享接口调用详解

    本文实例为大家分享了js微信分享接口调用的具体代码,供大家参考,具体内容如下 微信api直通车,仔细阅读官方文档问题都可以解决的 好吧,最近用到了,整理下发出来,就这个效果吧 1.设置js接口安全域名 这需要使用微信的jssdk,先需要在微信公众号后台进行设置:公众号设置-->功能设置-->JS接口安全域名.打开这个页面之后你会看到下面的提示.需要先下载这个文件并上传到指定域名的根目录. 这个文件里面是一个字符串,从名称看是用来校验用的.先上传了这个文件,你才能保存成功.这样你就可以使用jss

  • JAVA开发环境Vs code配置步骤详解

    目录 下载JDK 配置环境变量 安装完插件之后,打开code的“文件”-“首选项”-“设置”,进行参数设置,配置java和maven的路径,如下所示,配置完成就可以进行Java开发了. 点击settings.json,把下面的写进去. ("C:\\Program Files\\Java\\jdk1.8.0_172",)是你自己的jdk地址. "java.home": "C:\\Program Files\\Java\\jdk1.8.0_172",

  • 浅谈微信JS-SDK 微信分享接口开发(介绍版)

    本文主要是分享自己的开发过程,希望能给部分存在同样问题的朋友一点点帮助: 最近项目中的网页通过微信分享朋友或朋友圈等功能出现了无法显示分享图片等信息,后经过排查发现是微信版本升级导致,采用js-sdk完成分享接口,为了快速实现该功能效果,于是我打算通过前台js进行实现来看看分享效果. 通过查看微信公众平台文档,找到自己所需要的说明文档,明确开发步骤,说明文档截图如下: 开发步骤: 1.按照说明文档完成步骤1.1.1 2.引入js文件 在分享的页面中添加js文件 <script src="h

随机推荐