- 校验商户号和秘钥 的编码规则?
商户号和秘钥的编码规则是什么样的呀
2019-08-23 - 微信小程序 websocket 获取不到 session ?
[代码]@RequestMapping[代码][代码]([代码][代码]"login"[代码][代码])[代码][代码] [代码][代码]public[代码] [代码]ReturnValue login(HttpServletRequest request, HttpServletResponse response) [代码][代码]throws[代码] [代码]Exception {[代码][代码] [代码][代码]String userId = request.getParameter([代码][代码]"userId"[代码][代码]);[代码][代码] [代码][代码]String proxyId=request.getParameter([代码][代码]"proxyId"[代码][代码]);[代码][代码] [代码][代码]String workOrderId=request.getParameter([代码][代码]"workOrderId"[代码][代码]);[代码][代码] [代码][代码]String clientType=request.getParameter([代码][代码]"clientType"[代码][代码]);[代码][代码] [代码][代码]if[代码][代码](Strings.isBlank(userId)||Strings.isBlank(proxyId)||Strings.isBlank(workOrderId)||Strings.isBlank(clientType)) {[代码][代码] [代码][代码]return[代码] [代码]new[代码] [代码]ReturnValue([代码][代码]false[代码][代码],[代码][代码]"参数异常"[代码][代码]);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]HttpSession session = request.getSession();[代码][代码] [代码][代码]if[代码][代码]([代码][代码]null[代码][代码]!=session) {[代码][代码] [代码][代码]System.out.println([代码][代码]"登陆WebSocket成功:"[代码][代码]+([代码][代码]"1"[代码][代码].equals(clientType)?[代码][代码]"P"[代码][代码]+proxyId+workOrderId:[代码][代码]"U"[代码][代码]+userId+workOrderId));[代码][代码] [代码][代码]session.setAttribute([代码][代码]"WEBSOCKET_SESSSION_ID"[代码][代码], [代码][代码]"1"[代码][代码].equals(clientType)?[代码][代码]"P"[代码][代码]+proxyId+workOrderId:[代码][代码]"U"[代码][代码]+userId+workOrderId); [代码][代码]//一般直接保存user实体[代码][代码] [代码][代码]}[代码][代码]else[代码] [代码]{[代码][代码] [代码][代码]System.out.println([代码][代码]"登陆WebSocket失败,session==null:"[代码][代码]+([代码][代码]"1"[代码][代码].equals(clientType)?[代码][代码]"P"[代码][代码]+proxyId+workOrderId:[代码][代码]"U"[代码][代码]+userId+workOrderId));[代码][代码] [代码][代码]logger.error([代码][代码]"登录websocket+login时,获取session失败"[代码][代码]);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码] [代码]new[代码] [代码]ReturnValue([代码][代码]true[代码][代码]);[代码][代码] [代码][代码]}[代码]这是小程序登录websocket 时的代码,当在session 中设置好键值后,在spring tcp握手连接时得不到这个session 和其中的值。 下面是tcp 握手连接时的代码 ,就是得不到session ,但是浏览器端是可以的,因为他加了xhrFields 带了凭证可以保证得到的session是一致的, [代码]var url="<%=afterSaleServer%>/ptt/controller/websocket/websocketcontroller/login";[代码][代码] [代码][代码]$.ajax({[代码][代码] [代码][代码]url: url,[代码][代码] [代码][代码]type: 'post',[代码][代码] [代码][代码]async:false,[代码][代码] [代码][代码]data: messageJsonLogin,[代码][代码] [代码][代码]xhrFields: { [代码][代码] [代码][代码]withCredentials: true//允许带上凭据[代码][代码] [代码][代码]},[代码][代码] [代码][代码]crossDomain: true,[代码][代码] [代码][代码]success:function(res){[代码][代码] [代码][代码]if(res.code=="200"){[代码][代码] [代码][代码]if ('WebSocket' in window) {[代码][代码] [代码][代码]ws = new WebSocket(""+socketUrl+"/ptt/websocket/socketServer");[代码][代码] [代码][代码]console.log("连接成功");[代码][代码] [代码][代码]}[代码][代码] [代码][代码]else if ('MozWebSocket' in window) {[代码][代码] [代码][代码]ws = new MozWebSocket(""+socketUrl+"/ptt/websocket/socketServer");[代码][代码] [代码][代码]}[代码][代码] [代码][代码]else {// 这个是应对浏览器不支持websocket协议的时候降级为轮询的处理。[代码][代码] [代码][代码]ws = new SockJS("https://"+socketUrl+"/ptt/sockjs/socketServer");[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码][代码] [代码][代码]error:function(){[代码][代码] [代码][代码]}[代码][代码] [代码][代码]});[代码][代码]@Override[代码][代码] [代码][代码]public[代码] [代码]boolean[代码] [代码]beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,[代码][代码] [代码][代码]Map<String, Object> attributes) [代码][代码]throws[代码] [代码]Exception {[代码][代码] [代码][代码]System.out.println([代码][代码]"Before Handshake"[代码][代码]);[代码][代码] [代码][代码]if[代码] [代码](request [代码][代码]instanceof[代码] [代码]ServletServerHttpRequest) {[代码][代码] [代码][代码]ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;[代码][代码] [代码][代码]HttpSession session = servletRequest.getServletRequest().getSession();[代码][代码] [代码][代码]System.out.println([代码][代码]"握手时,获取到的session:"[代码][代码]+session);[代码][代码] [代码][代码]if[代码] [代码](session != [代码][代码]null[代码][代码]) {[代码][代码] [代码][代码]//使用拼接ID区分WebSocketHandler,以便定向发送消息[代码][代码] [代码][代码]String sessionId = (String) session.getAttribute([代码][代码]"WEBSOCKET_SESSSION_ID"[代码][代码]); [代码][代码]//一般直接保存user实体[代码][代码] [代码][代码]if[代码] [代码](sessionId!=[代码][代码]null[代码][代码]) {[代码][代码] [代码][代码]attributes.put([代码][代码]"WEBSOCKET_SESSSION_ID"[代码][代码],sessionId);[代码][代码] [代码][代码]}[代码] [代码] [代码][代码]//使用拼接ID区分WebSocketHandler,以便定向发送消息 出来处理工单也,在主页面的socket[代码][代码] [代码][代码]String sessionNo_workOrderId = (String) session.getAttribute([代码][代码]"WEBSOCKET_NO_WORKORDER_WAIT_MESSAGE_SESSSION_ID"[代码][代码]); [代码][代码]//一般直接保存user实体[代码][代码] [代码][代码]if[代码] [代码](sessionNo_workOrderId!=[代码][代码]null[代码][代码]) {[代码][代码] [代码][代码]attributes.put([代码][代码]"WEBSOCKET_NO_WORKORDER_WAIT_MESSAGE_SESSSION_ID"[代码][代码],sessionNo_workOrderId);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]return[代码] [代码]super[代码][代码].beforeHandshake(request, response, wsHandler, attributes);[代码] [代码] [代码][代码]}[代码] 下面是小程序端的代码,虽然我每次请求都发送了sessionId, 但是都是没有用,就是获取不到session,为什么要获取这个session呢? [代码]loginWebSocket({ workOrderId: workOrderId, userId: userId, proxyId: proxyId, clientType: clientType}).then([代码][代码] [代码][代码]console.log("登陆成功"),[代码][代码] [代码][代码]wx.connectSocket({[代码][代码] [代码][代码]url: "" + socketUrl + "/ptt/websocket/socketServer",[代码][代码] [代码][代码]success() {[代码][代码] [代码][代码]console.log('连接成功')[代码][代码] [代码][代码]that.initEventHandle()[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]);[代码][代码]initEventHandle() {[代码][代码] [代码][代码]let that = this[代码][代码] [代码][代码]wx.onSocketMessage((res) => {[代码][代码] [代码][代码]console.log("收到消息",res);[代码][代码] [代码][代码]//收到消息[代码][代码] [代码][代码]if (res.data == "pong") {[代码][代码] [代码][代码]heartCheck.reset().start()[代码][代码] [代码][代码]} else {[代码][代码] [代码][代码]//处理数据[代码][代码] [代码][代码]console.log(res.data);[代码][代码] [代码][代码]var nowDate2 = util.formatDate(new Date());//发送日期 [代码][代码] [代码][代码]var nowTime2 = util.formatNowTime(new Date());//发送时间 [代码][代码] [代码][代码]var messageJson2 = {};[代码][代码] [代码][代码]messageJson2.content = res.data;[代码][代码] [代码][代码]messageJson2.makeDate = nowDate2;[代码][代码] [代码][代码]messageJson2.makeTime = nowTime2;[代码][代码] [代码][代码]messageJson2.proxyId = proxyId;[代码][代码] [代码][代码]messageJson2.userId = null;[代码][代码] [代码][代码]var array2 = that.data.leaveMsgList;[代码][代码] [代码][代码]array2.push(messageJson2);[代码][代码] [代码][代码]that.setData({[代码][代码] [代码][代码]leaveMsgList: array2[代码][代码] [代码][代码]});[代码][代码] [代码][代码]that.toButtom();[代码][代码] [代码][代码]}[代码][代码] [代码][代码]})[代码][代码] [代码][代码]wx.onSocketOpen(() => {[代码][代码] [代码][代码]console.log('WebSocket连接打开')[代码][代码] [代码][代码]heartCheck.reset().start()[代码][代码] [代码][代码]})[代码][代码] [代码][代码]wx.onSocketError((res) => {[代码][代码] [代码][代码]console.log('WebSocket连接打开失败')[代码][代码] [代码][代码]this.reconnect()[代码][代码] [代码][代码]})[代码][代码] [代码][代码]wx.onSocketClose((res) => {[代码][代码] [代码][代码]console.log('WebSocket 已关闭!')[代码][代码] [代码][代码]this.reconnect()[代码][代码] [代码][代码]})[代码][代码] [代码][代码]},[代码][代码] [代码][代码]reconnect:function() {[代码][代码] [代码][代码]console.log(this.lockReconnect);[代码][代码] [代码][代码]if (this.lockReconnect) return;[代码][代码] [代码][代码]this.lockReconnect = true;[代码][代码] [代码][代码]console.log("....");[代码][代码] [代码][代码]clearTimeout(this.timer)[代码][代码] [代码][代码]if (this.data.limit < [代码][代码]12[代码][代码]) {[代码][代码] [代码][代码]this.timer[代码] [代码]= [代码][代码]setTimeout[代码][代码](() => {[代码][代码] [代码][代码]this.linkWebSocket();[代码][代码] [代码][代码]this.lockReconnect = false;[代码][代码] [代码][代码]}, 5000);[代码][代码] [代码][代码]this.setData({[代码][代码] [代码][代码]limit: this.data.limit + 1[代码][代码] [代码][代码]})[代码][代码] [代码][代码]}[代码][代码] [代码][代码]},[代码] 因为要通过在session 中设置的值来往 集合中放入session,方便对这个session 发送消息 [代码]/**[代码][代码] [代码][代码]* 连接成功时候,会触发页面上onopen方法[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]@Override[代码][代码] [代码][代码]public[代码] [代码]void[代码] [代码]afterConnectionEstablished(WebSocketSession session) [代码][代码]throws[代码] [代码]Exception {[代码][代码] [代码] [代码] [代码][代码]System.out.println([代码][代码]"成功建立websocket连接!"[代码][代码]);[代码][代码] [代码][代码]String userId = (String) session.getAttributes().get(USER_ID);[代码][代码] [代码][代码]String no_workOrderId_userId = (String) session.getAttributes().get(No_WORKORDER_USERID);[代码][代码] [代码][代码]System.out.println([代码][代码]"成功建立websocket连接 userId=!"[代码][代码]+userId);[代码][代码] [代码][代码]System.out.println([代码][代码]"成功建立websocket连接no_workOrderId_userId=!"[代码][代码]+no_workOrderId_userId);[代码][代码] [代码][代码]if[代码][代码](Strings.isNotBlank(userId)) {[代码][代码] [代码][代码]if[代码][代码](users.containsKey(userId)) {[代码][代码]//如果已包含将关闭之前的session,发送消息到新的session[代码][代码] [代码][代码]WebSocketSession wss=users.get(userId);[代码][代码] [代码][代码]wss.close();[代码][代码] [代码][代码]}[代码][代码] [代码][代码]users.put(userId,session);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]if[代码][代码](Strings.isNotBlank(no_workOrderId_userId)) {[代码][代码] [代码][代码]if[代码][代码](users.containsKey(no_workOrderId_userId)) {[代码][代码]//如果已包含将关闭之前的session,发送消息到新的session[代码][代码] [代码][代码]WebSocketSession wss=users.get(no_workOrderId_userId);[代码][代码] [代码][代码]wss.close();[代码][代码] [代码][代码]}[代码][代码] [代码][代码]users.put(no_workOrderId_userId,session);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]System.out.println([代码][代码]"当前线上用户数量:"[代码][代码]+users.size());[代码][代码] [代码][代码]users.entrySet().forEach(System.out::println);[代码][代码] [代码][代码]System.out.println([代码][代码]".......以上为用户session数量"[代码][代码]);[代码][代码] [代码][代码]//这块会实现自己业务,比如,当用户登录后,会把离线消息推送给用户[代码][代码] [代码][代码]//TextMessage returnMessage = new TextMessage("成功建立socket连接,你将收到的离线");[代码][代码] [代码][代码]//session.sendMessage(returnMessage);[代码][代码] [代码][代码]}[代码][代码]/**[代码][代码] [代码][代码]* 给某个用户发送消息[代码][代码] [代码][代码]*[代码][代码] [代码][代码]* @param userId[代码][代码] [代码][代码]* @param message[代码][代码] [代码][代码]*/[代码][代码] [代码][代码]public[代码] [代码]void[代码] [代码]sendMessageToUser(String userId, TextMessage message) {[代码][代码] [代码][代码]logger.error([代码][代码]"开始发送消息!给->"[代码][代码]+userId +[代码][代码]" 信息"[代码][代码]+message);[代码][代码] [代码][代码]for[代码] [代码](String id : users.keySet()) {[代码][代码] [代码][代码]logger.error([代码][代码]"目前有:键值"[代码][代码]+id+[代码][代码]" 会话"[代码][代码]+users.get(id));[代码][代码] [代码][代码]if[代码] [代码](id.equals(userId)) {[代码][代码] [代码][代码]try[代码] [代码]{[代码][代码] [代码][代码]if[代码] [代码](users.get(id).isOpen()) {[代码][代码] [代码][代码]users.get(id).sendMessage(message);[代码][代码] [代码][代码]logger.error([代码][代码]"成功发送消息给:"[代码][代码]+userId);[代码][代码] [代码][代码]}[代码][代码] [代码][代码]} [代码][代码]catch[代码] [代码](IOException e) {[代码][代码] [代码][代码]e.printStackTrace();[代码][代码] [代码][代码]}[代码][代码] [代码][代码]break[代码][代码];[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码][代码] [代码][代码]}[代码] 跪求大佬们,耽误好几天了,在开发工具当中没有问题,但是小程序到了真机和体验版时,一致有这个问题
2019-08-22 - 我的小程序审核 问题?没有测试账号 通过不了
我的需求是这样,用户不用登陆,而是直接扫描小程序码(每个用户会生成一个小程序码),免登录,这个一直过不了审核,怎么办
2019-08-21 - 请加急审核,小程序着急上线?
现在要校验微信商户号,和秘钥 来判断用户输入的对不对,请问校验规则是什么呢
2019-08-20 - 现在有这样的需求:微信商户号需要配置,和秘钥配置 ?
现在要校验微信商户号,和秘钥 来判断用户输入的对不对,请问校验规则是什么呢
2019-08-20 - 微信小程序 webSocket 体验版 接收不到消息?
代码片段 :https://developers.weixin.qq.com/s/HkCKfJmP7fa7 wx.onSocketMessage()收不到信息
2019-08-19 - 微信小程序 webSocket 体验版 接收不到消息?
微信小程序 webSocket 体验版 接收不到消息,但是开发工具中可以收到怎么回事
2019-08-12 - 当前页面怎么设置指定页面中 的data 属性值呢?
有个问题,怎么在当前页面,设置 指定页面中 的data 属性值, 小程序的data,data问题
2019-08-09 - 自定义组件 bingtap事件 自定义值没传过去?
这是自定义组件 <view class="cu-custom" style="height:{{CustomBar}}px"> <view class="cu-bar fixed {{bgImage!=''?'none-bg text-white bg-img':''}} {{bgColor}}" style="height:{{CustomBar}}px;padding-top:{{StatusBar}}px;{{bgImage?'background-image:url(' + bgImage+')':''}}"> <view class="action" bindtap="BackPage" wx:if="{{isBack}}"> <text class="cuIcon-back"></text> <slot name="backText"></slot> </view> <view class="action border-custom" wx:if="{{isCustom}}" style="width:{{Custom.width}}px;height:{{Custom.height}}px;margin-left:calc(750rpx - {{Custom.right}}px)"> <text class="cuIcon-back" bindtap="BackPage"></text> <text class="cuIcon-homefill" bindtap="toHome"></text> </view> <view class="content" style="top:{{StatusBar}}px"> <slot name="content"></slot> </view> <slot name="right"></slot> </view> </view> 这个是这个 BackPage(e) { console.log("返回事件1",e); var url=e.currentTarget.dataset.url; console.log(url); if(url==null){ wx.navigateBack({ delta: 1 }); }else{ wx.navigateBack({ url: url }); } }, <cu-custom bgColor="bg-gradual-blue" data-url='../list/list' isBack="{{true}}"> <view slot="backText" data-url='../list/list'>返回</view> <view slot="content">工单处理</view> </cu-custom> 这个data-url 怎么没有传过去 ,该怎么传呢
2019-08-08 - 未上线的小程序 怎么测试 微信支付呢?
未上线的小程序 怎么测试 微信支付呢?
2019-08-07