config:invalid url donmain 微信 config:invalid url donmain解决办法,微信上传图片,js-sdk
来源:互联网 发布:奶粉推荐 知乎 编辑:程序博客网 时间:2024/05/19 19:34
config:invalid url donmain 首先,这是一个很蛋疼很蛋疼的问题;相信你正在使用微信的某些操蛋的功能,来两张图;感受下症状,我的需求是调用图片库和相机,调用其他的功能也会出现这个类似的情况
以上就是症状,估计都挺崩溃的,如果你是第一次搞这些东西,并且没人指导那简直就是蛋疼,微信那帮孙子写的文档大家都是了解的 ,想当年我们搞个微信支付配置,按照微信的文档全公司包括一个十年工作经验的大哥都他妈没看懂。。。后来就放弃了。。。
撤了半天犊子,我们今天的需求是:调用微信公众号的相机和图片库,然后就给老子出了上面的异常。。。。。如何在公众号里面调用相机和图片库?
我们是在微信公众号里面开发
那么不管你开发啥子,AppId 和 AppSecret你一定是需要的 ,然后下一步
我们打开微信的文档看看,微信教我们如何上传图片。。。。。。接着来张截图
或许跟我一样有同样的疑惑, 这他娘的是啥?关键信息都他妈必填
debug:true 这个东西我们勉强还能看懂
appId:这个就是我们微信公众号的appId 可以接受
timestamp:时间戳
nonceStr:随机字符串
signature:签名
jsApiList:[] 你需要调用的 接口列表
以上几个, 一脸懵逼的往下看,发现越看越看不懂了,这些东西到底怎么组合使用了 ?到最后
我们发现有个demo,一阵窃喜
相信你已经下载下来看了一次了,但是如果相信大部分人是做前端的,而下载代码一看。。。 我擦嘞,怎么看不懂啊。。 神马幺蛾子
貌似是后端的语言,注定这个项目必须前后端一起配合才行,我们打开我们熟悉的Java或PHP
Java代码执行下,发现输出的三个字段居然是我们需要的 ,来张图看下
那么还有个问题,在前端配置这些属性了 还是后端生成了 ?显然这些数据有千丝万缕的关系,如果放在前端的话,是不可能的。。。 还有url 和 jsapi_ticket又是个神马鬼?我们现在获取这些数据需要,一个URL和一个jsapi_ticket
蛋疼了 。。这些数据我们需要在后台生成,首先来段后台代码,获取jsapi_ticket这个鬼东西 api的票,必须拿到票才能调用API,这个票怎么获取了?
1.第一步获取access_token,附上代码
/// 获取 titet之前获取tokenpublic static String getAccessToken() {String requestUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + wechatAppID+ "&secret=" + wechatAppSecret;try {URL object = new URL(requestUrl);HttpURLConnection con = (HttpURLConnection) object.openConnection();con.setDoOutput(true);con.setDoInput(true);con.setRequestProperty("Content-Type", "application/json");con.setRequestProperty("Accept", "application/json");con.setRequestMethod("GET");OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream(), "utf-8");wr.flush();StringBuilder sb = new StringBuilder();int HttpResult = con.getResponseCode();if (HttpResult == HttpURLConnection.HTTP_OK) {BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));String line = null;while ((line = br.readLine()) != null) {sb.append(line + "\n");}br.close();net.sf.json.JSONObject data = net.sf.json.JSONObject.fromObject(sb.toString());return data.getString("access_token");} else {System.out.println(con.getResponseMessage());}return null;} catch (Exception e) {e.printStackTrace();}return null;}
我们把token值log下 ,到底token是个什么样子的 。。 返回7200表示正常
2.第二步通过token获取jsapi_ticket ,也就是将上面的access_token解析出来,然后当做参数传给下个接口,上代码
public static String getTiteck() {String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=jsapi&access_token=" + getAccessToken();try {URL object = new URL(url);HttpURLConnection con = (HttpURLConnection) object.openConnection();con.setDoOutput(true);con.setDoInput(true);con.setRequestProperty("Content-Type", "application/json");con.setRequestProperty("Accept", "application/json");con.setRequestMethod("GET");OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream(), "utf-8");wr.flush();StringBuilder sb = new StringBuilder();int HttpResult = con.getResponseCode();if (HttpResult == HttpURLConnection.HTTP_OK) {BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "utf-8"));String line = null;while ((line = br.readLine()) != null) {sb.append(line + "\n");}br.close();net.sf.json.JSONObject data = net.sf.json.JSONObject.fromObject(sb.toString());return data.getString("ticket");} else {System.out.println(con.getResponseMessage());}return null;} catch (Exception e) {e.printStackTrace();}return null;}
上面的accessToken是上个方法的返回值,异常等鬼东西就不处理了,我相信鹅厂的服务器,一般不会出异常,同样来个log
jsapi_ticket我们获取到了,但是我们发现一个问题。。。。。很蛋疼的问题,这个接口有限制调用次数
每一天限制调用十万次 ,但是这个jsapi_ticket 货在7200秒(七千二百秒 没打错)内有效,好吧,这已经不是我们讨论的范畴了,用户量大了,都他妈扯犊子,每天把十万次的调用量用完,公司早就发了,,,,(针对小公司,大公司我在此就不多说了自己知道处理,获取这玩意保存起来判断时效)
我们获取到了这货之貌似万事大吉了,但是还差一个东西url,url哪里来? 又他妈一脸懵逼了。。。。
好吧,不卖关子了。。直接贴上代码吧
<!DOCTYPE html><html><head><meta charset="UTF-8"><title></title><script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script><script src="jquery-1.8.3.min.js"></script></head><body><div style="width: 500px;height: 500px;background-color: red;" id="div"> </div></body><script>$(function() {findWxConfigParam();$("#div").on("click", function() {var sourceType = [];if(1 == 1) {sourceType.push('album');} else {sourceType.push('camera');}wx.chooseImage({count: 1,sourceType: sourceType,success: function(res) {var localId = res.localIds;alert(localId);}});});});function findWxConfigParam() {var url = "http://127.0.0.1/hb/wechat/getWXconfig.do";var data = {"url": location.href.split('#')[0]};$.ajax({type: "post",url: url,async: true,data: data,dataType: "json",success: function(data, textStatus, jqXHR) {initWxConfig(data["obj"]);}})};function initWxConfig(data) {wx.config({debug: true,appId: data["appId"],timestamp: data["timestamp"],nonceStr: data["noncestr"],signature: data["signature"],jsApiList: ['getLocation', 'checkJsApi','chooseImage','uploadImage','downloadImage','previewImage']});wx.ready(function() {});wx.error(function(res) {});};</script></html>
有以下几个地方要注意,
第一个:微信API的版本
微信官方提出来的版本是1.2,但是这个版本能用,尝鲜的人可以试下微信提供的版本
地址 https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115
第二个地方:就是url的值
就这样写,没错的 。。。
第三个地方:权限使用了哪些接口,这些东西微信有说明
这里就不解释了
说到这里我们不难发现,调取微信的接口是这样的,前端传一个url过去然后,服务端加密处理得到指定的字符串给到前端,那么到这里了。。。 服务端代码上了 。。 首先上签名的代码
不要怀疑,来自微信官方的代码
public static String signString(String jsapi_ticket, String url,String nonce_str,String timestamp) { Map<String, String> ret = sign(jsapi_ticket, url,nonce_str,timestamp); return ret.get("signature");} public static Map<String, String> sign(String jsapi_ticket, String url,String nonce_str,String timestamp) { Map<String, String> ret = new HashMap<String, String>(); String string1; String signature = ""; //注意这里参数名必须全部小写,且必须有序 string1 = "jsapi_ticket=" + jsapi_ticket + "&noncestr=" + nonce_str + "×tamp=" + 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; }
这是生成签名的代码,接口代码如下
@RequestMapping(value = "/getWXconfig.do")public void getWechat(String url,HttpServletRequest request, HttpServletResponse response) throws Exception {BaseBean baseBean = new BaseBean();try {HashMap<String, Object> map = new HashMap<>();String jsapi_ticket = WechatCode.getTiteck();map.put("jsapi_ticket", jsapi_ticket);String timestamp = "" + (new Date()).getTime();map.put("timestamp", timestamp);String noncestr = UUID.randomUUID().toString();map.put("noncestr", noncestr);map.put("url", url);String signature = CheckUtil.signString(jsapi_ticket,url,noncestr,timestamp);map.put("signature", signature);String appId = PropertiesUtil.getUrlPropertiesValue("wechatAppID");map.put("appId", appId);logger.error(map);baseBean.setObj(map);baseBean.setMsg("获取成功");baseBean.setCode(BaseBean.CODE_OK);} catch (Exception e) {logger.warn(Common.getRequestParam(request));logger.warn(Common.handle(e));baseBean.setMsg(e.getLocalizedMessage());}String json = JSONObject.fromObject(baseBean).toString();response.getOutputStream().write(json.getBytes("UTF-8"));}
这两个方法上文都提到了。。。 这里就不解释了。。。。。。。。
或许到了这里。。。 我们以为万事大吉了 ,结束收工了。。。
然而,并没有。。。。。。 或许你还会有同样的感受。。。。那就是
接下来才是本篇日志的精华部分 那就是配置域名
第一步。。。。。
第二步。。。。
需要将这个文件下载下来,上传到服务器的zszc的这个目录下。。。。 也就是腾讯确认你的服务器作用。。。。
你的调用微信的页面必须在/tomcat/webapp/zszc这个目录下
配置域名成功之后。。。。 over。。。 收工。。。。。。。。。。
- config:invalid url donmain 微信 config:invalid url donmain解决办法,微信上传图片,js-sdk
- config:invalid url donmain
- 微信服务号oauth报错config:invalid url donmain
- 关于微信公众号开发【微信JS-SDK】报错:config invalid url domian
- 微信开发 config:invalid url domain
- 微信JS之config:invalid url domain
- 微信JS接口安全域名 config:invalid url domain
- URL含特殊字符,微信JS-SDK接口config时报invalid signature签名错误
- 微信开发 遇到 config:invalid url domain
- 微信开发 遇到 config:invalid url domain
- 微信分享时报错 errMsg:config:invalid url domain
- 微信测试号:config:invalid url domain
- 微信开发报错:config:invalid url domain
- 微信公众号JS-SDK config:invalid signature
- 微信config:invalid signature
- 微信JS-SDK 调用config 出现invalid signature签名错误的部分解决方法
- 微信JS-SDK调试:config注入权限验证配置报错- invalid signature
- 微信js开发出现 errMsg: "config:invalid signature"错误
- 学习驱动:移植u-boot
- Vue 折腾记
- poj3273Monthly Expense 二分
- c++ 八大排序代码总结
- Xcode自带git将本地项目上传到GitHub
- config:invalid url donmain 微信 config:invalid url donmain解决办法,微信上传图片,js-sdk
- fetch使用的常见问题及解决办法
- JS中的事件绑定,事件捕获,事件冒泡以及事件委托,兼容IE
- 算法训练 前缀表达式
- 算法训练 出现次数最多的整数
- 百钱百鸡 (C语言,java同步)
- 手把手教你做北邮操作系统小学期实验一——Linux启动过程优化5
- C#中的循环结构
- 学霸的情书,包含了所有数学考点,…