目录

  • 1 开发条件
  • 2 在后台使用动态url方式获取signature
  • 3 改为接口进行访问

1 开发条件

1 申请一个微信公众号,并确认在开发–接口权限中拥有分享功能的权限。
2 公众号设置–功能设置:在JS接口安全域名中添加安全域名,这个安全域名不是url,只需添加一级域名即可。
3 开发,基本配置中,需要获得开发者id,开发者密码,ip白名单,ip白名单是服务器的ip。
4 获得jsapi_ticket:
先获取access_token:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140183
接口调用获取:https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数 说明
grant_type 获取access_token填写client_credential
appid 第三方用户唯一凭证
secret 第三方用户唯一凭证密钥,即appsecret

获取jsapi_ticket https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
5 signature获取:
jsapi_ticket=sM4AOVdWfPE4DxkXGEs8VMCPGGVi4C3VM0P37wVUCFvkVAy_90u5h9nbSlYy3-Sl-HhTdfl2fzFy1AOcHKP7qg&noncestr=Wm3WZYTPz0wzccnW&timestamp=1414587457&url=http://mp.weixin.qq.com?params=value

2 在后台使用动态url方式获取signature

前台:

 $(document).ready(function(){initPage();});function initPage() {//alert(window.location.href);/***用于获得当前连接url用**//***用户点击分享到微信圈后加载接口接口*******/$.post("/business/businessAction.do?method=getSharData",{"url":location.href.split('#')[0]},function(data,status){data=eval("("+data+")");console.log(data);wx.config({debug: false,appId: 'wx071f25226923fc00',timestamp:data.timestamp,nonceStr:data.nonceStr,signature:data.signature,jsApiList: ['checkJsApi','onMenuShareTimeline','onMenuShareAppMessage','hideOptionMenu',]});wx.ready(function(){wx.hideOptionMenu();/***隐藏分享菜单****/ }); });};

后台:

import java.util.UUID;
import java.util.Map;
import java.util.HashMap;
import java.util.Formatter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.UnsupportedEncodingException;
/**
*用来获得微信验证的所有参数
*/
public class Sign {public static void main(String[] args) {String jsapi_ticket = "bxLdikRXVbTPdHSM05e5u7pfX712TBiu6cLRUR0dNkywjZCMepIQeCTufMFPO6ARKcFQ1B_SkwMCD1MlAS-96Q";// 注意 URL 一定要动态获取,不能 hardcodeString url = "http://vip.cioe.cn";Map<String, String> ret = sign(jsapi_ticket, url);for (Map.Entry entry : ret.entrySet()) {System.out.println(entry.getKey() + ", " + entry.getValue());}};public static Map<String, String> sign(String jsapi_ticket, String url) {Map<String, String> ret = new HashMap<String, String>();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(string1);try{MessageDigest crypt = MessageDigest.getInstance("SHA-1");crypt.reset();crypt.update(string1.getBytes("UTF-8"));signature = byteToHex(crypt.digest());}catch (NoSuchAlgorithmException e){e.printStackTrace();}catch (UnsupportedEncodingException e){e.printStackTrace();}ret.put("url", url);ret.put("jsapi_ticket", jsapi_ticket);ret.put("nonceStr", nonce_str);ret.put("timestamp", 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);}
}

3 改为接口进行访问

 @ApiOperation(value = "2.获取企业微信签名", notes = "2.获取企业微信签名")@ApiImplicitParams({@ApiImplicitParam(name = "url", paramType = "query", value = "url" ,required = true)})@GetMapping("/getSign")public ResponseEntity<Map<String, String>> getSign(String url) throws ApiException {AccessTokenVO accessToken = WeComUtil.getAccessToken();String access_token = accessToken.getAccess_token();ResponseEntity<String> forEntity = restTemplate.getForEntity("https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket?access_token=" + access_token, String.class);String body = forEntity.getBody();com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(body);String ticket = jsonObject.getString("ticket");Map<String, String> sign = Sign.sign(ticket, url);return new ResponseEntity<>(sign,HttpStatus.OK);}@ApiOperation(value = "3.获取微信公众号签名", notes = "3.获取微信公众号签名")@ApiImplicitParams({@ApiImplicitParam(name = "url", paramType = "query", value = "url" ,required = true)})@GetMapping("/getWechatMpSign")public ResponseEntity<Map<String, String>> getWechatMpSign(String url) throws ApiException {AccessTokenVO mpAccessToken = WeChatMpUtil.getMpAccessToken();String access_token = mpAccessToken.getAccess_token();ResponseEntity<String> forEntity = restTemplate.getForEntity("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+access_token+"&type=jsapi", String.class);String body = forEntity.getBody();com.alibaba.fastjson.JSONObject jsonObject = JSON.parseObject(body);String ticket = jsonObject.getString("ticket");Map<String, String> sign = Sign.sign(ticket, url);return new ResponseEntity<>(sign,HttpStatus.OK);}

微信开发获取签名wx.config相关推荐

  1. 微信开发:配置 wx.config 实现图像接口(详细配置 wx.config 接口)

    前言   描述一下大概的应用场景,就是微信的移动端需要拍摄实时图像上传,然后传输到后台,由于我们需要的是直接可以显示的图片,所以要转换成 base 加密后的图片,然后放到 img 标签里进行展示 概述 ...

  2. Android开发之微信支付获取签名小工具分享

    老套路,先看图: 大家支付的时候下面的签名一般是如何弄出来的? 1.一个字母一个字母手写?容易出错 2.用QQ截图然后使用QQ的图片文字识别功能?(我一般用这个) 但是都特别麻烦,于是乎我自己把微信官 ...

  3. 微信开发获取地理位置实例(java,非常详细,附工程源码)

    在本篇博客之前,博主已经写了4篇关于微信相关文章,其中三篇是本文基础: 1.微信开发之入门教程,该文章详细讲解了企业号体验号免费申请与一些必要的配置,以及如何调用微信接口. 2.微信开发之通过代理调试 ...

  4. 微信开发 - 获取用户地理位置定位

    在项目的逻辑业务当中,有时候需要获取用户当前所在的地理位置.那么,我们怎么去获取用户的地理位置定位呢? 可以采用百度地图接口获取用户的地理位置定位.要使用该服务,你得先注册成为百度地图开发者.http ...

  5. 微信开发--获取用户信息中文乱码的解决方案

    为什么80%的码农都做不了架构师?>>>    在微信开发中我们会经常需要获取用户的信息. 微信给我们提供了获取用户信息的api, 地址为 https://api.weixin.qq ...

  6. 微信开发获取access_token(凭证)接口的详解

    在微信开发中,就有一些接口会涉及到获取接口凭证的接口,开发文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp142114018 ...

  7. 微信开发--获取用户信息 48001 问题

    获取用户信息接口:https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID 我用的是这个接口 ...

  8. 微信开发获取昵称乱码 emoji表情

    起因: 由于数据库及属性一致设为utf8,而utf8只支持1-3个字节.当用户昵称为emoji表情时,获取用户基本信息时会乱码. 解决步骤: 升级mysql到5.5以上,即建库时可以使用utf8mb4 ...

  9. android开发获取签名错误,android开发打包签名出现-failed to export application的解决思路...

    在app发布到应用平台的时候需要打包签名,这个时候会遇到一些头疼的事情,比如打包失败会出现failed to export application错误等.我这里就给大家讲一下我的深刻体会.本文为什么说 ...

  10. mysql保存emoji表情(比如微信开发用户昵称)

    使用mysql数据库的时候,如果字符集是UTF-8并且在php服务器上,当存储emoji表情的时候,会抛出以上异常(比如微信开发获取用户昵称,有的用户的昵称用的是emoji的图像) 这是由于字符集不支 ...

最新文章

  1. 无法远程分发安装软件原因
  2. [JVM-翻译]揭开java.lang.OutOfMemoryError面纱之一
  3. 《libGDX移动游戏开发从入门到精通》一第2章 libGDX的架构分析
  4. 移动通信网络频段大全,含5G、4G,各种公开频段汇总
  5. 使用pyspider爬取巨量淘宝MM图片
  6. oracle high watermark,Elasticsearch high disk watermark 问题
  7. 1001:Hello,World!
  8. python使用redis_使用Redis和Python构建自行车共享应用
  9. swoole mysql 连接池_基于Swoole的通用连接池 - 数据库连接池
  10. 专业摄影旗舰!vivo X30系列正式发布:支持60倍超级变焦
  11. 新手CrossApp 之demo SecondViewController小结
  12. linux查看是否安装了dns,Linux系统怎么查看和修改DNS配置
  13. 如何像专业人士一样使用 Google 学术搜索
  14. 计算机和软件专业大学排名,全国计算机软件专业大学排名TOP20,清华居然不是第一!...
  15. PHP获取上周一,获取指定日期的上周日期,上周一
  16. Excel 解决高次方程求解的方法
  17. 树莓派 zero 通过 max31865 连接 PT100 热电阻 测量温度
  18. Mysql中的三种循环
  19. js获取时间戳,将时间戳转换为年月日时分秒
  20. 迪士尼也追踪游客数据,但它为什么没有被批判?

热门文章

  1. Greenplum小把戏 - 官方布尔类型转换为文本类型(bool to text)的进步
  2. 用python画一条虚线_Python3 tkinter基础 Canvas create_line 画实线与虚线
  3. 两个对称正定阵的乘积是正定的吗?
  4. ‘lengths‘ argument should be a 1D CPU int64 tensor, but got 1D cuda:0 Long tensor
  5. 华为薪资等级结构表_2018华为等级工资表一览
  6. 《Android开发偶遇有趣算法问题》---获得地图方圆r米内的一个随机坐标点(求单位圆内随机点)
  7. 拼接、比较与计算——哥德尔读后之十四
  8. android 视频解决方案,短视频SDK升级为短视频解决方案
  9. iphoneX适配-客户端H5页面
  10. 美国大学计算机科学专业研究生排名,美国大学计算机科学专业研究生排名介绍...