1、获取公众号appid和secret

登录微信公众平台-基本配置

2、配置JS安全域名

公众号设置-功能设置

注意:MP_verify_0MVuWBvVPoPJOmPF.txt服务器不能拦截

3、IP白名单配置

打开baidu.com,搜索IP,将搜索结果在公众平台-基本配置-IP白名单内配置

4、前端代码展示

wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: 'appId', // 必填,公众号的唯一标识  正式需要修改新申请公众号timestamp: timestamp, // 必填,生成签名的时间戳nonceStr: nonceStr, // 必填,生成签名的随机串signature: signature,// 必填,签名jsApiList: ['onMenuShareTimeline','onMenuShareAppMessage'] // 必填,需要使用的JS接口列表
});
wx.ready(function(){//获取“分享到朋友圈”按钮点击状态及自定义分享内容接口(即将废弃)wx.onMenuShareTimeline({title: '', // 分享标题link: '', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: '', // 分享图标success: function () {// 用户点击了分享后执行的回调函数},});//获取“分享给朋友”按钮点击状态及自定义分享内容接口(即将废弃)wx.onMenuShareAppMessage({title: '百度测试', // 分享标题desc: '百度测试', // 分享描述link: 'http://sf8e39.natappfree.cc/admin', // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致imgUrl: '', // 分享图标type: 'link', // 分享类型,music、video或link,不填默认为linkdataUrl: '', // 如果type是music或video,则要提供数据链接,默认为空success: function () {
// 用户点击了分享后执行的回调函数}});
});
function getSignature() {$.ajax({url: '' //请求链接, type: 'POST'  // 请求类型, dataType: 'json'  // 返回请求的类型,有text/json两种, async: false   // 是否异步, cache: false   // 是否缓存, timeout: null  // 设置请求超时, success: function (result) {//获取红包rmb中的信息if(result.code === 0){var data = result.data;timestamp = data.timestamp;nonceStr = data.nonceStr;signature = data.signature;}}});
}

5、后台代码展示

1)接口

@RequestMapping(value = "/signature")
@ResponseBody
public Object signature() {logBefore(logger, "获取微信所需signature");Map<Object, Object> map = new HashMap<Object, Object>();PageData pd = new PageData();try {pd = WechatTool.getSignature();map.put("code", 0);map.put("msg", "成功");map.put("data", pd);} catch (Exception e) {logger.error(e.toString(), e);map.put("code", 1);map.put("msg", e.toString());} finally {logAfter(logger);}return AppUtil.returnObject(new PageData(), map);
}

2)辅助工具

package com.fh.controller.wechat.tool;import com.fh.util.HttpUtils;
import com.fh.util.Jurisdiction;
import com.fh.util.PageData;
import com.fh.util.UuidUtil;
import com.fh.util.pay.alipay.util.AlipayCore;
import com.fh.util.pay.tenpay.util.Sha1Util;
import net.sf.json.JSONObject;
import org.apache.shiro.session.Session;import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;/*** Created by 菜园子 on 2018/8/30.*/
public class WechatTool {/*获取access_token入口*/public static String  getAccessTokenMain(){String result = "";boolean b;//是否调用微信重新获取access_tokenSession session = Jurisdiction.getSession();JSONObject sessionData = (JSONObject) session.getAttribute(WechatConfigure.CACHE_ACCESS_TOKEN);if (sessionData != null){Long timestamp = sessionData.getLong("timestamp");if (isValid(timestamp,System.currentTimeMillis())){result = sessionData.getString("accessToken");b = false;}else {b = true;}}else {b = true;sessionData = new JSONObject();}if (b){String message = getAccessToken();JSONObject data = JSONObject.fromObject(message);sessionData.put("accessToken",data.getString("access_token"));sessionData.put("timestamp",System.currentTimeMillis());session.setAttribute(WechatConfigure.CACHE_ACCESS_TOKEN,sessionData);result = data.getString("access_token");}return result;}/*获取access_token*/public static String getAccessToken(){String message = "";String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + WechatConfigure.APPID + "&secret="+ WechatConfigure.SECRET;message = request(url);return message;}/*获取jsapi_ticket入口*/public static String getTicketMain(){String result = "";boolean b;//是否调用微信重新获取access_tokenSession session = Jurisdiction.getSession();JSONObject sessionData = (JSONObject) session.getAttribute(WechatConfigure.CACHE_JSAPI_TICKET);if (sessionData != null){Long timestamp = sessionData.getLong("timestamp");if (isValid(timestamp,System.currentTimeMillis())){result = sessionData.getString("ticket");b = false;}else {b = true;}}else {b = true;sessionData = new JSONObject();}if (b){String accessToken = getAccessTokenMain();String message = getTicket(accessToken);JSONObject data = JSONObject.fromObject(message);sessionData.put("ticket",data.getString("ticket"));sessionData.put("timestamp",System.currentTimeMillis());session.setAttribute(WechatConfigure.CACHE_JSAPI_TICKET,sessionData);result = data.getString("ticket");}return result;}/*获取jsapi_ticket*/public static String getTicket(String accessToken){String message = "";String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi";message = request(url);return message;}/*获取signature*/public static PageData getSignature(){PageData result = new PageData();String nonceStr = SignTool.getRandomStringByLength(32);Long timestamp = System.currentTimeMillis();String params = "jsapi_ticket="+getTicketMain()+"&noncestr="+nonceStr+"&timestamp="+timestamp+"&url="+WechatConfigure.GET_SINATURE_URL;result.put("signature", Sha1Util.getSha1(params));result.put("timestamp",timestamp);result.put("nonceStr",nonceStr);return result;}/*请求数据*/public static String request(String url){String message = "";try {URL getUrl = new URL(url);HttpURLConnection http = (HttpURLConnection) getUrl.openConnection();http.setRequestMethod("GET");http.setRequestProperty("Content-Type","application/x-www-form-urlencoded");http.setDoOutput(true);http.setDoInput(true);http.connect();InputStream is = http.getInputStream();int size = is.available();byte[] b = new byte[size];is.read(b);message = new String(b, "UTF-8");} catch (MalformedURLException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return message;}/*判断session内容是否有效*/private static boolean isValid(Long timestamp,Long nowTimestamp){boolean b;if (nowTimestamp > timestamp){if ((nowTimestamp -timestamp) / 1000 > 7200){b = false;}else {b = true;}}else {b = false;}return b;}public static void main(String[] args) throws InterruptedException {PageData data = getSignature();System.out.println();}}
package com.fh.controller.wechat.tool;/*** Created by 菜园子 on 2018/8/30.*/
public class WechatConfigure {public static final String APPID = "appId";//微信公众号appidpublic static final String SECRET = "secret";//微信公众号secretpublic static final String CACHE_ACCESS_TOKEN = "cache_access_token";public static final String CACHE_JSAPI_TICKET = "cache_jsapi_ticket";public static final String GET_SINATURE_URL = "";//wx.configure配置页面路径
}

微信js-sdk+JAVA实现分享接口相关推荐

  1. 微信js sdk 分享 失败 有时候好 有时候坏

    微信js sdk 分享 失败  有时候好 有时候坏 用了一个www开头的域名 和一个xx.com的域名 两个在解析上有问题. 实践是www.xx.com的比较 稳定 转载于:https://www.c ...

  2. 微信公众号开发之分享接口实现

    微信公众号开发之分享接口实现 第一步:先登录微信公众平台进行设置JS接口安全域名("域名不能包含http://"). 如图: 第二步:配置config接口权限验证 首先需要通过获取 ...

  3. 微信JS SDK开放,前端开发者“鸡冻”了!

    HTML5又一次逆袭了,其实之前微信也是有一些JS API的,比如分享.但这次一股脑开放了拍摄.录音.语音识别.二维码.地图.支付.分享.卡券等几十个API,这条消息不需宣传,瞬间就占满了HTML5从 ...

  4. 蚂蚁区块链第15课 JS SDK概述及API接口速查

    1,摘要 本文讲解蚂蚁BAAS的JavaScript SDK概述,说明JS SDK对应的API接口速查.其他语言包SDK参考官网其他章节说明即可. 2,JS SDK 说明 JavaScript SDK ...

  5. 微信js sdk 授权上传头像下载代码片段和注意事项

    /*  * 描述:当前页授权  * @param url   例:index.html / 如果有参数,需加密index.html?id=1     */ 1.对需要运用js sdk的页面授权 get ...

  6. 实战微信JS SDK开发:贺卡制作与播放(1)

    前段时间忙于CanTK 2.0的开发,所以博客一直没有更新.CanTK 2.0主要增强了游戏和富媒体的开发,现在编码和测试基本完成了,等文档完成了再正式发布,里面有不少激动人心的功能,等发布时再一一细 ...

  7. 使用微信js sdk关于选择及上传图片至腾讯云COS

    使用微信js sdk关于选择及上传图片至腾讯云COS 使用微信js sdk关于选择及上传图片至腾讯云COS 背景 名词 参考 效果图展示 开发步骤 1:概要步骤 2:上代码 结束: 使用微信js sd ...

  8. 微信-js sdk invalid signature签名错误 问题解决

    微信-js sdk invalid signature签名错误 问题解决 参考文章: (1)微信-js sdk invalid signature签名错误 问题解决 (2)https://www.cn ...

  9. php转发朋友圈缩略图片,解释最全的,手把手教的微信JS sdk分享设置教程-微信分享插件PHP源码JS-SDK接口,分享到朋友圈 转发好友带缩略图...

    亲们,此文是我上传的有关微信分享插件PHP源码JS-SDK接口的.rar和.zip的说明使用文件 许多朋友都面临自己编写的网站通过微信转发时,无论是分享微信好友或是微信朋友圈时,出现无缩略图显示的问题 ...

  10. 微信开发(一)--分享接口

    最近在做微信服务号开发,简单总结一下,便于自己学习积累和分享给大家: 环境介绍: Spring+ Spring MVC +Mybatis 开发语言: JAVA 微信公众平台的开发中,微信只公布了一个基 ...

最新文章

  1. 安装debian总结以及编译linux内核
  2. JAVA NIO之Direct Buffer 与 Heap Buffer的区别?
  3. python的pandas方法_python使用Pandas处理数据的方法
  4. LUA脚本调用C场景,使用C API访问脚本构造的表
  5. 鸿蒙系统平板界面,鸿蒙OS平板UI界面曝光:双Dock栏设计+超级终端互联功能
  6. 史上最详细最容易理解的HMM文章
  7. 使用SPEncode.HtmlEncodePreserverSpace保存输入
  8. 前端学习(3002):vue+element今日头条管理--创建组件和设置路由
  9. pandas取某一索引的数据
  10. 12月12日习题答案大剖析!再接再厉
  11. Effective C++ Notebook
  12. 遥感原理与应用_遥感原理与应用考试题库及答案
  13. Mac墨刀怎么导出HTML,mockingbot墨刀中文使用说明.pdf
  14. U盘写保护修复(亲测可用)
  15. 基于STM32的MLX90614(GY-906)人体红外测温
  16. VC中画虚线矩形的方法
  17. 开放平台-web实现QQ第三方登录
  18. 2012 windows 端口聚合_如何在WindowsServer2012中实现NIC组合
  19. linux格式化sd卡,并进行挂载
  20. yilia 的html模板,Hexo搭建个人博客:yilia主题配置(七) - 自定义Subnav图标

热门文章

  1. Procdump+Mimikatz获取Windows明文密码
  2. 《每日一荐月刊》2019-11
  3. 各种神经网络的应用领域,神经网络还有哪些应用
  4. 中国石油大学-《现代应用文写作》第三阶段在线作业
  5. Learning Music Notation 学习音乐符号 Lynda课程中文字幕
  6. python操作微信电脑版_【Python】【微信】+操作电脑版微信
  7. 定积分证明题例题_数列极限求法十五种(25个例题+推文送给微积分和数学分析同学)...
  8. 通过一个html简单实现下载功能
  9. PDManer数据库建模工具介绍
  10. windbg内核诊断方式--转载