使用微信测试号 实现微信扫一扫功能时 出现的问题

1. 环境: springboot + js +微信测试号 + 花生壳穿透

2. 问题

ios系统 调用微信扫一扫时候出现 realauthurl:xxx errmsg config:invalid signature 错误
经过比对 生成和传递的signature 值是相同的,排除签名问题
微信 JS 接口签名校验:https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign
错误提示中有url 猜测是url 问题 , 一直没有搞懂这里的url到底是什么的url 。 此时的url应该是当前网页的url http://xxxx/xx.html
如果url是正确的会提示 errMsg: config:invalid url domain

3. 解决

url中从#号前边的都要有 通过js 获取当前网页的url

<script>window.onload = function() {var wx_invite_url = location.href.split('#')[0]; //获取当前网页的url !!!!console.log("url",wx_invite_url);$.get("jsapi/getSign",{url:wx_invite_url},function(data){wx.config({debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。appId: data.appId, // 必填,公众号的唯一标识timestamp: data.timestamp, // 必填,生成签名的时间戳nonceStr: data.nonceStr, // 必填,生成签名的随机串signature: data.signature,// 必填,签名jsApiList: ['scanQRCode'] // 必填,需要使用的JS接口列表});wx.error(function(res){alert(res);// config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。});});}function scaneMethod() {var ua = navigator.userAgent.toLowerCase()var isWeixin = ua.indexOf('micromessenger') !== -1if (!isWeixin) {alert('请用微信打开连接,才可使用扫一扫')}window.wx.scanQRCode({needResult: 1, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有success: function (res) {// 扫码成功,跳转到二维码指定页面(res.resultStr为扫码返回的结果)var scan = res.resultStralert(scan)}})}</script>

完整的代码:

  1. 获取签名的接口:
@RequestMapping(value = "/getSign")@ResponseBodypublic Map tiaoma( HttpServletRequest request,String url) throws Exception {String Url=request.getRequestURL().toString();log.info("请求的url={}",Url);Map resMap = new HashMap();resMap = JsUtils.sign(url);log.info("=======map参数:{}",resMap);return resMap;}
  1. 签名的工具类 加密 获取token ticket … 直接修改appid appsecret 就可用
public class JsUtils {public static String accessToken = null;public static String ticket = null;private static final String appid=null;private static final String appsecret=null;public static Map sign(String url) {if(accessToken==null){String sendUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="+appid+"&secret="+appsecret;String result = getHttpResult(sendUrl);JSONObject tokenJson = JSONObject.parseObject(result);accessToken= tokenJson.get("access_token").toString();log.info("toke={}",accessToken);}if(ticket==null){String signUrl = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=" + accessToken + "&type=jsapi";String resultSign = getHttpResult(signUrl);JSONObject tokenJson = JSONObject.parseObject(resultSign);ticket= tokenJson.get("ticket").toString();}Map<String, Object> ret = new HashMap();String nonce_str = create_nonce_str();String timestamp = create_timestamp();String string1;String signature = "";//注意这里参数名必须全部小写,且必须有序string1 = "jsapi_ticket=" + ticket +"&noncestr=" + nonce_str +"&timestamp=" + timestamp +"&url=" + url;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("nonceStr", nonce_str);ret.put("timestamp", Integer.parseInt(timestamp));ret.put("signature", signature);ret.put("jsapi_ticket", ticket);ret.put("appId", appid);return ret;}/*** 随机加密** @param hash* @return*/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 getHttpResult(String url) {String result = "";HttpGet httpRequest = new HttpGet(url);try {HttpResponse httpResponse = HttpClients.createDefault().execute(httpRequest);if (httpResponse.getStatusLine().getStatusCode() == 200) {result = EntityUtils.toString(httpResponse.getEntity());}} catch (ClientProtocolException e) {e.printStackTrace();result = e.getMessage().toString();} catch (IOException e) {e.printStackTrace();result = e.getMessage().toString();}return result;}/*** 产生随机串--由程序自己随机产生** @return*/private static String create_nonce_str() {return UUID.randomUUID().toString();}/*** 由程序自己获取当前时间** @return*/private static String create_timestamp() {return Long.toString(System.currentTimeMillis() / 1000);}}

微信测试号地址:https://mp.weixin.qq.com/debug/cgi-bin/sandboxinfo?action=showinfo&t=sandbox/index
微信js sdk 文档地址:https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/JS-SDK.html

微信扫一扫错误提示realauthurl:xxx errmsg config:invalid signature相关推荐

  1. 提示wx.chooseImage permission denied或提示errmsg config:invalid signature怎么解决?

    因为是帮别人修复问题,只能一点点排查了. 微信端上传图片时提示wx.chooseImage permission denied或提示errmsg config:invalid signature怎么解 ...

  2. 微信jssdk开发巨坑,errmsg config invalid signature

    如果你检查了千百遍,并且通过了https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign的检测,那么你可以看看你是不是这个问题: 例如:你的域 ...

  3. 微信二次分享链接,出现config:invalid signature错误的解决方法

    当开发微信时需要做特定的页面做分享时,根据官方提供的jssdk.php文件创建的签名数据包调试时,大家碰到的最多的错误而且解决最麻烦的大概就是signature错误了, 分享时提示错误"{& ...

  4. 微信分享链接出现config:invalid signature错误的解决方法

    当开发微信时需要做特定的页面做分享时,根据官方提供的jssdk.php文件创建的签名数据包调试时,大家碰到的最多的错误而且解决最麻烦的大概就是signature错误了,如下图: 分享时提示错误&quo ...

  5. 微信小程序支付错误提示“商户号mch_id或sub_mch_id不存在”

    微信小程序支付错误提示"商户号mch_id或sub_mch_id不存在" 今天做微信小程序支付遇到这样一个问题,支付接口返回错误信息出显示"商户号mch_id或sub_m ...

  6. 微信分享踩坑:config:invalid signature错误的解决方法

    微信分享踩坑:config:invalid signature错误的解决方法 一般出现这个错误多半是签名获取失败,而我根据我获取到的签名跟签名算法校验里面得到的签名是一样的,于是查找大量文档,核实可能 ...

  7. 微信jssdk ios下报config invalid signature签名错误问题 Android正常

    微信jssdk ios下报config invalid signature签名错误问题 Android正常 最近Taro项目出于安全考虑,所有上传图片的地方都要改为,先把图片上传到微信服务器,然后根据 ...

  8. vue3实现微信公众号一次性订阅消息+ios和Android的63002 config:invalid signature问题

    微信开放文档https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.html#23 微信 JS 接口签 ...

  9. 微信公众号config:invalid signature签名失效

    做微信公众号项目时,在调用SDK的时候,经常会出现config:invalid signature签名失效的问题,下面来介绍一下出现问题的原因以及解决方法. 出现的原因,我只从前端方面做一下介绍,如果 ...

最新文章

  1. PHP 连接 MSSQL用port时候的注意事项
  2. [LeetCode] Linked List Cycle II
  3. NDuiker项目第2天总结
  4. .NET 基金会完成第一次全面改选
  5. linux 信号_Linux信号量(1)-SYSTEM V
  6. jetbrick-template 和其他模板的性能测试比较
  7. centOS无法联网
  8. QImage对一般图像的处理
  9. 发那科程序全部输出_走,去看看发那科机器人全新的自动化解决方案!
  10. [20150803]触发器对dml的影响.txt
  11. win10 开机启动_win10 -- 取消不需要的开机启动项和服务项加快win10系统开机速度...
  12. 【更新】怎样免费下载百度文库文档
  13. 刀片系统服务器优点,刀片服务器是什么?介绍ibm刀片服务器优点
  14. 摇杆控制方向原理_摇杆电位器结构及工作原理详解
  15. Markdown由浅入深
  16. 被国人误传了数千年的七句话(转自天涯)
  17. uni-app小程序自定义样式的下拉选择框
  18. 职业科普丨PMP是什么呢?
  19. 27款国外最新Photoshop色板
  20. 关于QQ pc端登录界面的测试用例 11——28

热门文章

  1. p站高配虚拟专网怎么用?
  2. 公务员笔试——2020年中国科技大事件盘点!
  3. 互联网行业应届生薪资是制造业四倍不止?如何丰富简历进大厂?
  4. 产品未出 百度朋友圈“开演”
  5. mysql core_mysql core文件的正确打开姿势
  6. vr虚拟旅游:躺在自家的沙发上“来一场说走就走”的旅行
  7. 帝国CMS百度实时主动推送插件
  8. hive 十六进制转十进制_0026-Hive使用十六进制分隔符异常分析
  9. 解决EasyPoi导出Excel文件后提示无法打开文件的问题
  10. 我的十年,一点一滴皆成风景?