- 03.getUserInfo和getUserProfile 对比
最近动态 wx.getUserProFile() 在2.16.0成功回调有iv、encryptedData,具体看这里https://developers.weixin.qq.com/community/develop/doc/000c04d0490118d8a6ebf675a56c00 调整背景 很多开发者在打开小程序时就通过组件方式唤起 getUserInfo 弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。详情可以点击官方调整链接(https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801) 调整前后API功能的对比[图片] [图片] 能力检测 两个前提条件: 1.开发者工具版本不低于 1.05.21030222.基础库版本不低于 2.10.4[图片] 代码片段: https://developers.weixin.qq.com/s/odMs3wmX7Ko3 测试过程 step1: 在开发工具设置清除全部缓存step2: 点击 getUserInfo 按钮,会弹出用户授权,允许后会得到这些信息,见截图[图片] step3: 在终端输入下面代码,也可以获取上面截图数据(今天还不到截止时间,还能获取完整的用户头像和昵称)wx.getUserInfo({ complete: (res) => { console.log(res) } }) step4: 点击 getUserProfile 按钮,会弹出用户授权,允许后会得到这些信息,见截图(只有用户昵称和头像信息)[图片] step5: 通用在终端输入下面代码,获取不到任何信息,符合`若开发者需要获取用户的个人信息(头像、昵称、性别与地区),可以通过wx.getUserProfile接口进行获取,且开发者每次通过该接口获取用户个人信息均需用户确认`wx.getUserProfile({ complete: (res) => { console.log(res) } }) step6: 可以重复点击 getUserInfo 按钮和 getUserProfile 按钮进行测试。功能对比讲解 1.4月13日前未发布的,wx.getUserInfo 能力 wx.getUserInfo(Object object) 会返回 encryptedData、signature、rawData,通过将返回的数据传递给服务器,服务端能解析出用户的身份标识,即 unionId(unionId 获取机制:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html) 【对我们业务来说】 从 wx.getUserInfo 就是要两样东西:unionId和用户信息(头像和昵称)。 但从 2021年2月23日起,可以通过 wx.login 接口获取的登录凭证可直接换取 unionID,可以替代一部分wx.getUserInfo 的功能了。 2.新增 getUserProfile 能力 wx.getUserProfile 能获取到头像和昵称,可以替代 wx.getUserInfo 的另外一部分功能。 3.小结 从这里是不是可以得出,wx.login + wx.getUserProfile 基础可以替代之前的 4月13日前未发布的,wx.getUserInfo 能力。其实不然,如果真是这样的,官方是不是没必要这样搞,咱们接着看。 4.wx.getUserInfo 和 wx.getUserProfile 区别 1.功能上是 wx.getUserInfo 不在返回用户授权的头像昵称,只返回匿名信息,但 wx.getUserProfile 会返回用户授权的头像昵称。2.wx.getUserInfo 授权成功后,当下次调用时,可以直接获取授权成功返回数据,不需要每次都需要用户确认,但 wx.getUserProfile 每次都需要用户确认允许后才能拿到用户信息3.对于业务来说,可以通过 wx.getUserProfile 获取用户信息和昵称后,要存在自己服务器,不能像之前那样每次都通过 wx.getUserInfo 方式获取,否则体验会比较差疑问 1.4月13日后发布的新版本小程序,如果用户未更新到新版本,此时调用 wx.getUserInfo 会不会返回用户授权的头像昵称(如果不确定,业务可能需要兼容处理)2.4月13日后发布的新版本小程序,用户更新到新版本,调用 wx.getUserInfo 返回匿名的头像昵称支持服务器解密吗? 常见问题汇总 1.wx.canIUse 判断getUserProfile结果是false,可以通过直接判断 wx.getUserProfile 即可,类似问题可以查看官方知识库(https://developers.weixin.qq.com/community/develop/doc/000cac40cf0eb8d3e429647c351c09?_at=1614912876047)
2021-04-02 - 【Java后台】校验一张图片是否含有违法违规内容
更新时间:2020年9月29日 具体介绍可查看 https://blog.csdn.net/u010651369/article/details/101697940 修改了提供的接口地址。可以直接调用了。 https://apis.ydxiaoshuai.cn/xai/rest/check/general_url 传递图片URL地址 https://apis.ydxiaoshuai.cn/xai/rest/check/general_file 传递图片FILE文件 接口文档地址:http://api.ydxiaoshuai.cn/1961525 近期应该部分个人开发者小程序会收到如下通知 [图片] 为了快速解决问题,就直接使用官方提供的接口 imgSecCheck校验一张图片是否含有违法违规内容 个人小程序只是图片的一些处理识别。固只拿imgSecCheck接口进行代码示例了。 1.在自己的Java后台服务增加接口调用(api.weixin.qq.com不能直接加入小程序安全域名中) 2.在小程序选择图片后优先走违法违规校验。校验通过再走自己的业务代码。 Java实现获取小程序的图片文件并进行违法违规校验 wx.uploadFile 传递图片文件到后台 [代码] wx.uploadFile({ url: 图片违法违规校验接口地址, filePath: res.tempFilePaths[0], header: { 'content-type': 'multipart/form-data' }, name: 'file', success: function(checkres) { var checkResult = JSON.parse(checkres.data); console.info(checkResult); if (checkResult.errcode == '0') { //校验没有违法违规进行自己业务代码处理 } else { if (checkResult.errcode == '87014') { wx.hideLoading(); wx.showModal({ content: '存在敏感内容,请更换图片', showCancel: false, confirmText: '明白了' }) } else { wx.hideLoading(); wx.showModal({ content: '其他错误,稍后再试', showCancel: false, confirmText: '明白了' }) } } } [代码] 后台代码 [代码]/** * 图片过滤检测 * @param file 图片文件 * @return */ @RequestMapping(value = "/imgcheck", method = {RequestMethod.POST}) @ResponseBody public AccessTokenWX checkPic(@RequestParam(value = "file") MultipartFile file, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { String token = ""; //自己写一个定时任务或其他方式 获取AccessToken AccessTokenWX accessTokenWX = new AccessTokenWX(); try { token = getAccessTokenJob.getAccessToken(); String url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + token; String result = uploadFile(url, file); accessTokenWX = JSON.parseObject(result, AccessTokenWX.class); System.out.println("图片检测结果 = " + result); return accessTokenWX; } catch (Exception e) { System.out.println("----------------调用腾讯内容过滤系统出错------------------" + e.getMessage()); accessTokenWX.setErrcode("500"); accessTokenWX.setErrmsg("system错误"); return accessTokenWX; } } /** * 上传二进制文件 * @param graphurl 接口地址 * @param file 图片文件 * @return */ public static String uploadFile(String graphurl,MultipartFile file) { String line = null;//接口返回的结果 try { // 换行符 final String newLine = "\r\n"; final String boundaryPrefix = "--"; // 定义数据分隔线 String BOUNDARY = "========7d4a6d158c9"; // 服务器的域名 URL url = new URL(graphurl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); // 设置为POST情 conn.setRequestMethod("POST"); // 发送POST请求必须设置如下两行 conn.setDoOutput(true); conn.setDoInput(true); conn.setUseCaches(false); // 设置请求头参数 conn.setRequestProperty("connection", "Keep-Alive"); conn.setRequestProperty("Charsert", "UTF-8"); conn.setRequestProperty("Content-Type","multipart/form-data; boundary=" + BOUNDARY); conn.setRequestProperty("User-Agent","Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1"); OutputStream out = new DataOutputStream(conn.getOutputStream()); // 上传文件 StringBuilder sb = new StringBuilder(); sb.append(boundaryPrefix); sb.append(BOUNDARY); sb.append(newLine); // 文件参数,photo参数名可以随意修改 sb.append("Content-Disposition: form-data;name=\"image\";filename=\"" + "https://api.weixin.qq.com" + "\"" + newLine); sb.append("Content-Type:application/octet-stream"); // 参数头设置完以后需要两个换行,然后才是参数内容 sb.append(newLine); sb.append(newLine); // 将参数头的数据写入到输出流中 out.write(sb.toString().getBytes()); // 读取文件数据 out.write(file.getBytes()); // 最后添加换行 out.write(newLine.getBytes()); // 定义最后数据分隔线,即--加上BOUNDARY再加上--。 byte[] end_data = (newLine + boundaryPrefix + BOUNDARY + boundaryPrefix + newLine).getBytes(); // 写上结尾标识 out.write(end_data); out.flush(); out.close(); // 定义BufferedReader输入流来读取URL的响应 BufferedReader reader = new BufferedReader(new InputStreamReader( conn.getInputStream())); while ((line = reader.readLine()) != null) { return line; } } catch (Exception e) { System.out.println("发送POST请求出现异常!" + e); } return line; } [代码] 为了方便大家。我这里直接封装了一个接口供大家使用 接口地址:https://www.ydxiaoshuai.cn/xai/rest/token/imgcheck/general 请求方式: POST Body参数: [代码]access_token 接口调用凭证 file 图片文件 [代码] POSTMAN截图示意 [图片] 实现Controller代码如下 [代码]/** * 图片过滤检测 * @param file 要校验的图片 * @param access_token 接口调用凭证 * @return */ @RequestMapping(value = "/imgcheck/general", method = {RequestMethod.POST}) @ResponseBody public AccessTokenWX checkPicgeneral(@RequestParam(value = "file") MultipartFile file, String access_token,HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) { logger.info("获取access_token======" + access_token + "访问的ip" + httpServletRequest.getRemoteAddr()); AccessTokenWX accessTokenWX = new AccessTokenWX(); try { String url = "https://api.weixin.qq.com/wxa/img_sec_check?access_token=" + access_token; String result = uploadFile(url, file); accessTokenWX = JSON.parseObject(result, AccessTokenWX.class); System.out.println("图片检测结果 = " + result); return accessTokenWX; } catch (Exception e) { System.out.println("----------------调用腾讯内容过滤系统出错------------------" + e.getMessage()); accessTokenWX.setErrcode("500"); accessTokenWX.setErrmsg("system错误"); return accessTokenWX; } } [代码]
2020-09-29