你是指对接插件呢还是一个单纯的在线聊天室一样的? 针对你说的,一般都不需要选择类目,类目是你主体相关的和功能用途才选择的,并不是每个都需要设置类目的,我之前也做了一个聊天的,没有选择什么类目的也可以的
im客服聊天?我们需要做一个类似美团酒店的平台,想接入自己开发的简单客服系统(就是商家和用户简单文字聊天),要选择什么类目(需要什么资质呢)
2020-10-20如果按照文档操作的,没起作用就要问下官方的人,目前没用到模板,可能给不了正确回复
模板消息参数first颜色不起作用2个消息模板 [图片] 发送的消息:(入参first参数的颜色不起作用,一直保持灰色) [图片] 请求参数: 1.颜色未标记出来的参数 { "touser": "", "template_id": "7iX925KO9FcjrLd9WPy4RYkJxuzAW-orkMyOkXWRc-4", "url": "http://weixin.qq.com/download", "topcolor": "#FF0000", "data":{ "first": { "value":"恭喜你购买成功!", "color":"#FF0000" }, "keyword1":{ "value":"巧克力", "color":"#00FF0D" }, "keyword2": { "value":"39.8元", "color":"#173177" }, "remark": { "value":"2014年9月22日", "color":"#0059FF" } } } 2.成功显示颜色的参数 { "touser": "", "template_id": "9O96ESE4rKVXKz7DSDcLoOA20FJ5A3LPob4nqjYK9Qc", "url": "http://weixin.qq.com/download", "topcolor": "#FF0000", "data":{ "result": { "value":"恭喜你购买成功!", "color":"#FF0000" }, "totalWinMoney":{ "value":"巧克力", "color":"#00FF0D" }, "issueInfo": { "value":"39.8元", "color":"#173177" }, "fee": { "value":"2014年9月22日", "color":"#0059FF" }, "betTime": { "value":"2014年9月22日", "color":"#FB00FF" }, "remark":{ "value":"欢迎再次购买!", "color":"#173177" } } }
2020-10-20可以的,只要共用的是同一个腾讯云产品
请问小程序支持两个不同的小程序进行语音通话吗?如题 两个不同的小程序 同一主体 比如商户版和用户版 这两个小程序可以相互之间语音通话吗 又或者有什么第三方服务可以办到的? 望解惑 谢谢
2020-05-20截图是我昨天截的
getUpdateManager 更新提示的竟然是前几个版本的内容?[图片][图片] 我这次版本更新的内容应该是1.文件重命名功能,有效提高文件识别与归档效率 ,结果却是我之前的版本更新内容?怎么会这样呢? 而且,早上有个用户反馈,更新的内容弹框,一直都没出现的,苹果和安卓的都没有看到过这个弹框的,我安卓的手机有出现过
2020-05-13[图片][图片] 跨越还真大
开发工具wx:if判断无效?调试基础库2.10.3 wx:if判断无效 [图片][图片]
2020-04-01[图片]
提交审核成功后无审核中版本重复提交了几次审核代码,提交成功后,完成返回到主页中就没了 [图片][图片][图片]
2020-03-28wx.getLocation({ type: 'gcj02', success: function (res) { wx.openLocation({//使用微信内置地图查看位置。 latitude: parseFloat(latitude),//要去的纬度-地址 longitude: parseFloat(longitude),//要去的经度-地址 name: address, address: imgurl }) } }) 我后台是字符串,前台用parseFloat转的
华为 P10 plus 无法打开定位华为 P10 plus Android9 授权成功后 wx.openLocation({//使用微信内置地图查看位置。 latitude: latitude,//要去的纬度-地址 longitude: longitude,//要去的经度-地址 name: address, address: address }) 执行到这里就没反应了,其他华为的机型都是可以的
2019-11-21[图片] getUserInfo: function (e) { var encryptedData = e.detail.encryptedData; var iv = e.detail.iv; //用户按了允许授权按钮后需要处理的逻辑方法体 if (e.detail.userInfo) { this.setData({ userInfo: e.detail.userInfo, hasUserInfo: true, avatarUrl: wx.getStorageSync('avatarUrl') }) // 登录 wx.login({ success: res => { console.log(res) wx.request({ url: wx.getStorageSync('serverurl') + "/advisorySmallUser/getuserInfo", data: { code: res.code, encryptedData: encryptedData, iv: iv }, method: "POST", header: { 'content-type': 'application/x-www-form-urlencoded' // 默认值 }, success: function (res) { } }); } }) } else { console.log("用户按了拒绝按钮") //用户按了拒绝按钮 wx.showModal({ title: '警告', content: '您点击了拒绝授权,将无法进入小程序,请授权之后再进入!!!', showCancel: false, confirmText: '返回授权', success: function (res) { if (res.confirm) { wx.setStorageSync('hasUserInfo', false); console.log('用户点击了“返回授权”') } } }) } }, Java @RequestMapping(value = "/getuserInfo", method = RequestMethod.POST) @ResponseBody public JSONObject getUserInfo(String code, String encryptedData, String iv) { JSONObject jsondata = new JSONObject(); if (StringUtils.isEmpty(code)) { jsondata.put(ConstantUtils.STATUS, ConstantUtils.ZERO); jsondata.put(ConstantUtils.MSG, "code不能为空"); log.error("code不能为空"); return jsondata; } String appid = "appid"; String appsecret = "appsecret"; jsondata = MgWeChat.getOpenId(appid, appsecret, code); if (jsondata.get("openid") != null) { System.out.println(jsondata.get("openid")); System.out.println(jsondata.get("session_key")); System.out.println(jsondata); System.out.println(jsondata.containsKey("unionid")); if (!jsondata.containsKey("unionid")) { // 被加密的数据 byte[] dataByte = Base64.decode(encryptedData); // 加密秘钥 byte[] keyByte = Base64.decode(jsondata.get("session_key").toString()); // 偏移量 byte[] ivByte = Base64.decode(iv); try { // 如果密钥不足16位,那么就补足. 这个if 中的内容很重要 int base = 16; if (keyByte.length % base != 0) { int groups = keyByte.length / base + (keyByte.length % base != 0 ? 1 : 0); byte[] temp = new byte[groups * base]; Arrays.fill(temp, (byte) 0); System.arraycopy(keyByte, 0, temp, 0, keyByte.length); keyByte = temp; } // 初始化 Security.addProvider(new BouncyCastleProvider()); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS7Padding", "BC"); SecretKeySpec spec = new SecretKeySpec(keyByte, "AES"); AlgorithmParameters parameters = AlgorithmParameters.getInstance("AES"); parameters.init(new IvParameterSpec(ivByte)); cipher.init(Cipher.DECRYPT_MODE, spec, parameters);// 初始化 byte[] resultByte = cipher.doFinal(dataByte); if (null != resultByte && resultByte.length > 0) { String result = new String(resultByte, "UTF-8"); System.out.println(result); JSONObject jSONObject = JSONObject.parseObject(result); String unionId = jSONObject.get("unionId").toString(); jsondata.put("unionid", unionId); } return jsondata; } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (InvalidParameterSpecException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (InvalidAlgorithmParameterException e) { e.printStackTrace(); } catch (NoSuchProviderException e) { e.printStackTrace(); } } else { jsondata.put("unionid", jsondata.get("unionid")); jsondata.put("openid", jsondata.get("openid")); jsondata.put("session_key", jsondata.get("session_key")); jsondata.put(ConstantUtils.STATUS, ConstantUtils.ONE); jsondata.put(ConstantUtils.MSG, ConstantUtils.SUCCESS); } } else { System.out.println("未获取到用户信息"); jsondata.put("unionid", null); jsondata.put("openid", null); jsondata.put("session_key", null); jsondata.put(ConstantUtils.STATUS, ConstantUtils.ZERO); jsondata.put(ConstantUtils.MSG, ConstantUtils.SUCCESS); } return jsondata; }
请问如果session_key过期,getUserInfo按钮获得encryptData用什么加密?在用户点击授权信息的按钮的之后,会获得授权拿到的用户的encryptData和iv 如果需要解密unionId,我需要拿着这两个数据和用户的sessionKey做解密 所以拿到encryptData的时候,会用wx.login去刷最新的sessionKey 但问题是,会不会刷到最新的sessionKey,但encryptData是用老的已经过期的sessionKey加密的?导致解密错误 那么用户点击getUserInfo解析unionId的最佳实践是什么呢? 页面先wx.login(),然后记录用户的sessionKey,然后用户点击页面上的getUserInfo的按钮,然后用存下来的sessionKey解密? 但这样会不会用户页面停留实践过久,然后点击按钮的时候导致sessionKey失效呢?
2019-10-18简称搜索的,目前在维护
为什么我的小程序性只能搜全称才能搜到,少一个字都搜不到 AppID是:wxece926e89ba为什么我的小程序性只能搜全称才能搜到,少一个字都搜不到 AppID是:wxece926e89ba
2019-10-18/** * 循环上传图片文件 发布咨询的时候 * * @param orderInf * @return * @param orderInf * @return * @param userid * state usertype comname comcode insurancedetail expertrate insuranceuser expertcompany title tags desc accessories username imagecontents accuratePrice conditions * @return jsonobject */ @RequestMapping(value = "/xcxAddUploadFile", method = RequestMethod.POST) @ResponseBody public JSONObject xcxAddUploadFile(HttpServletRequest request) { JSONObject jsondata = new JSONObject(); try { MultipartHttpServletRequest req = (MultipartHttpServletRequest) request; // 对应前端的upload的name参数"file" MultipartFile multipartFile = req.getFile("file"); String ordId = req.getParameter("ordId"); String userid = req.getParameter("userid"); String unionid = req.getParameter("unionid"); String filename = req.getParameter("filename"); System.out.println(ordId); // 服务器项目路径 String pathRoot = request.getSession().getServletContext().getRealPath(""); String realPath = pathRoot.substring(0, pathRoot.lastIndexOf("\\")) + "\\insurancepic\\"; // 取得图片的格式后缀 String originalLastName = multipartFile.getOriginalFilename(); String picLastName = originalLastName.substring(originalLastName.lastIndexOf(".")); // 拼接:名字+时间戳+后缀 String picName = UUID.generate() + picLastName; String accessories = "/insurancepic/" + picName; System.out.println("accessories:" + accessories); try { File dir = new File(realPath); // 如果文件目录不存在,创建文件目录 if (!dir.exists()) { dir.mkdir(); System.out.println("创建文件目录成功:" + realPath); } File file = new File(realPath, picName); multipartFile.transferTo(file); if (!StringUtils.isEmpty(ordId)) { AdvisoryRecord advisoryRecord = new AdvisoryRecord(); advisoryRecord.setId(UUID.generate()); advisoryRecord.setUserid(userid); advisoryRecord.setUnionid(unionid); advisoryRecord.setOrdId(ordId); advisoryRecord.setAccessories(accessories); advisoryRecord.setType(ConstantUtils.RECORD_TYPE_ZERO); if (filename == null || "".equals(filename)) { advisoryRecord.setContents(originalLastName); } else { advisoryRecord.setContents(filename); } // 增加新纪录 Boolean result = advisoryRecordDAO.addAdvisoryRecord(advisoryRecord); // 如果增加失败 if (result == false) { jsondata.put(ConstantUtils.STATUS, ConstantUtils.ZERO); jsondata.put(ConstantUtils.MSG, "提交失败"); log.error(advisoryRecord.getOrdId() + "提交失败"); return jsondata; } } jsondata.put(ConstantUtils.STATUS, ConstantUtils.ONE); jsondata.put(ConstantUtils.MSG, ConstantUtils.SUCCESS); } catch (IOException e) { e.printStackTrace(); } catch (IllegalStateException e) { e.printStackTrace(); } jsondata.put(ConstantUtils.STATUS, ConstantUtils.ONE); } catch (Exception e) { jsondata.put(ConstantUtils.STATUS, ConstantUtils.ZERO); jsondata.put(ConstantUtils.MSG, "上传文件失败"); log.error("文件上传失败", e); return jsondata; } return jsondata; }
图片上传?图片上传的Java该怎么写,需要调用小程序的什么东西吗,小程序上传上去的是一个临时路径和一个name,该怎么解析啊,在线等,急求
2019-10-18