本文实例为大家分享了java调用微信接口实现网页分享小功能的具体代码,供大家参考,具体内容如下
// 获取access_token *注意* 经过实际开发测试,微信分享不支持跨域请求,因此获取access_token的请求必须从服务器发起,否则无法获取到access_token所以以下都是服务端操作
微信接口说明参考地址
参考文章:Java微信分享接口开发详解
一、微信util类
public class ShareConstants { //微信获取ticket的接口 public static final String TICKET_URL_TEST = "https://api.weixin.qq.com/cgi-bin/ticket/getticket" ; public static final String type = "jsapi" ; //微信获取token的接口 public static final String GET_TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token"; public static final String grant_type = "client_credential" ; }
public class WeixinUtil { private static Logger logger = LoggerFactory.getLogger(WeixinUtil.class) ; public static boolean signatureCheck(String token,String timeStamp,String nonce,String signature) throws Exception{ List<String > list = new ArrayList<String>(3){ public String toString(){ return this.get(0)+this.get(1)+this.get(2) ; } } ; list.add(token) ; list.add(timeStamp) ; list.add(nonce) ; Collections.sort(list) ; MessageDigest md = MessageDigest.getInstance("SHA-1") ; byte[] digest = md.digest(list.toString().getBytes()) ; String testStr = WeixinUtil.byteArrayToHexString(digest) ; logger.info("token:{},timestamp:{},nonce:{},testStr:{}"); if(testStr.equalsIgnoreCase(signature.toUpperCase())){ return true; }else{ return false ; } } public static String signature(String jsapiTicket,String nonceStr,Long timestamp,String url) throws Exception{ String str = String.format("jsapi_ticket=%s&noncestr=%s×tamp=%d&url=%s", jsapiTicket,nonceStr,timestamp,url) ; logger.info("signature url:{}",str); MessageDigest md = MessageDigest.getInstance("SHA-1") ; byte[] digest = md.digest(str.getBytes()) ; String sigStr = WeixinUtil.byteArrayToHexString(digest) ; return sigStr ; } public static String byteArrayToHexString(byte[] array){ String strDigest = "" ; for(int i = 0 ;i<array.length;i++){ strDigest+=byteToHexString(array[i]) ; } return strDigest ; } public static String byteToHexString(byte ib){ char[] Digit = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'} ; char [] ob = new char[2] ; ob[0] = Digit[(ib >>> 4) & 0X0F] ; ob[1] = Digit[ib &0X0F] ; String s = new String(ob) ; return s ; } public static String getWeiXinShareToken(String appId,String secret) throws Exception{ Map<String,String> maps = new HashMap<String,String>() ; maps.put("grant_type", ShareConstants.grant_type) ; maps.put("appid",appId) ; maps.put("secret",secret) ; try{ String result = HttpInvokeUtil.httpGet(ShareConstants.GET_TOKEN_URL,maps) ; JSONObject jsonObject = JSONObject.parseObject(result) ; String access_token = (String) jsonObject.get("access_token") ; Integer expires_in = (Integer) jsonObject.get("expires_in") ; logger.debug("getToken access_token:{},expires_in:{}",access_token,expires_in); if(access_token !=null && expires_in!=null && expires_in==7200) return access_token ; else return null ; }catch (Exception ex){ logger.error("ex:stack:{}",ex.getStackTrace().toString()); throw new Exception("get Token failed"); } } public static String getJsApiTicket(String token) throws Exception{ Map<String,String> maps = new HashMap<String,String>() ; maps.put("access_token",token); maps.put("type",ShareConstants.type); try{ String result = HttpInvokeUtil.httpGet(ShareConstants.TICKET_URL_TEST,maps) ; JSONObject jsonObject = JSONObject.parseObject(result) ; Integer errcode = (Integer) jsonObject.get("errcode") ; if(errcode==null || (errcode!=null &&errcode!=0)){ logger.error("get jsapiTicket is failed, errcode:{}",errcode); return null ; }else{ String ticket = (String) jsonObject.get("ticket") ; return ticket ; } }catch (Exception ex){ logger.error("ex.stack:{}",ex.getStackTrace().toString()); throw new Exception("getJsApi Ticket is failed") ; } } }
注意上面HttpInvokeUtil.httpGet()是httpclint这个可以自己去写,只要能发请求就行,
二、controller层
//currUrl ==前端想要分享的网页地址 @RequestMapping(value = "/getWConfig", method = RequestMethod.GET) @ResponseBody //@RequiredLogin public FrameResp getWConfig(@Param("currUrl") String currUrl) throws UserException, Exception { if (currUrl == null) { return buildErrorResp(ErrorCodeConst.ERROR_PARAM_ERROR); } logger.info("get the encode currUrl {}", currUrl); String urlTmp = URLDecoder.decode(currUrl, "UTF-8"); logger.info("decode currUrl {}", currUrl); Long timestamp = new Date().getTime() / 1000; String url = urlTmp.split("#")[0]; WConfigResp wConfigResp = new WConfigResp(); //修改为本地加载分享 //shareConfig.getAppId()==自己的appid //shareConfig.getUxinAppSecret()==自己的AppSecret String token = WeixinUtil.getWeiXinShareToken(shareConfig.getAppId(), shareConfig.getUxinAppSecret()); String ticket = WeixinUtil.getJsApiTicket(token); if (ticket == null) { logger.error("get jsApiTicketSec is failed"); throw new Exception("get jsApi is failed"); } wConfigResp.setAppid(shareConfig.getAppId()); wConfigResp.setTimestamp(timestamp); wConfigResp.setNonceStr(RandomStringUtils.random(10, true, true)); logger.info("appid:{},ticket:{},timestamp:{},nonceStr:{},url:{}", shareConfig.getAppId(), ticket, timestamp, wConfigResp.getNonceStr(), url); String signature = WeixinUtil.signature(ticket, wConfigResp.getNonceStr(), wConfigResp.getTimestamp(), url); if (signature != null) { wConfigResp.setSignature(signature); return buildSuccessResp(wConfigResp); } else { logger.error("getWcConfig is failed"); throw new Exception("error getWConfig"); } }
三、自定义的返回值类-WConfigResp
@Data public class WConfigResp extends BaseModel{ private String appid ; private Long timestamp ; private String nonceStr; private String signature ; }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。
本文向大家介绍js微信分享接口调用详解,包括了js微信分享接口调用详解的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了js微信分享接口调用的具体代码,供大家参考,具体内容如下 微信api直通车,仔细阅读官方文档问题都可以解决的 好吧,最近用到了,整理下发出来,就这个效果吧 1.设置js接口安全域名 这需要使用微信的jssdk,先需要在微信公众号后台进行设置:公众号设置-->功能设置-
本文向大家介绍Java编程调用微信接口实现图文信息推送功能,包括了Java编程调用微信接口实现图文信息推送功能的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java编程调用微信接口实现图文信息等推送功能。分享给大家供大家参考,具体如下: Java调用微信接口工具类,包含素材上传、获取素材列表、上传图文消息内的图片获取URL、图文信息推送。 微信图文信息推送因注意html代码字符串中将双引
本文向大家介绍iOS 微信分享功能简单实现,包括了iOS 微信分享功能简单实现的使用技巧和注意事项,需要的朋友参考一下 PS:此文以简单实现功能为主,不足之前还望指点,大神勿喷. 在此之前如何申请微信认证的Key就不说了,公司一般会有人搞(自己申请一个也非常的简单) 1.首先下载微信SDK:微信SDK下载地址(更多关于微信SDK信息文档请访问官方网站:微信开放平台) 2.导入微信SDK 将下载下来
本文向大家介绍iOS实现微信分享多张图片功能,包括了iOS实现微信分享多张图片功能的使用技巧和注意事项,需要的朋友参考一下 前言 微信分享到朋友圈,可分享的类型有:文字类型、图片类型、音乐类型、视频类型和网页类型,但是我们在做图片分享的时候发现微信给的API只能分享一张图片,达不到一些APP的需求,而产品汪或者Boss想要分享多张图片,比如前段时间我做的一个APP,是电商类APP,想把商品的图片都
本文向大家介绍微信JS-SDK分享功能的.Net实现代码,包括了微信JS-SDK分享功能的.Net实现代码的使用技巧和注意事项,需要的朋友参考一下 JS-SDK接口是什么? 为了方便开发者实现微信内的网页(基于微信浏览器访问的网页)功能,比如拍照、选图、语音、位置等手机系统的能力,并方便开发者直接使用微信分享、扫一扫等微信特有的能力,微信推出了JS-SDK的整体开发包,供开发者方便使用。 分享功能
本文向大家介绍Django实现网页分页功能,包括了Django实现网页分页功能的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Django实现分页功能,为了容易区别功能的展现,先创建一个数据库,用数据库中的数据做演示。 创建数据库步骤如下: 1.创建模型,代码如下: 2.向数据库中添加数据,代码如下: 添加之后将代码就可以注释掉了,我们演示的时候再新建一个select接口作为演示界面