- 微信小程序商户向用户支付是使用:“商家转账到零钱” 还是 “分账”,请解答?
计划开发一个在线答题的小程序,用户之间可以互相咨询问题,咨询方需要向被咨询者支付一笔咨询费,但是因为,微信小程序不支持c to c的支付方式,所以咨询方的这笔咨询费是先支付到平台,平台再向被咨询方转账。我的问题是:按照我们的商业场景,如果使用转账到零钱会不会在未来的使用中出现类似“二清”的问题,导致平台运营出问题。还是必须使用“分账”方式就可以避免这类问题。那么转账到零钱的应用场景是什么?我们怎么使用它。
09-04 - 小程序使用websocket 本地测试可以,放到服务器就不通?,域名已经申请通过了
var myurl='wss://olddcblink.dcblink.com:12342/ws' connectStart: function () { var that = this ws = wx.connectSocket({ url: myurl, // header: { // "Authorization": app.globalData.token, // 'content-type': 'application/json' // }, // data: JSON.stringify({ // token: app.globalData.token, // type: 3, // payLoad: { // topic: that.data.fjh // } // }), success: (res) => { console.log("进入聊天", res) }, fail: (err) => { wx.showToast({ title: '网络异常!', }) console.log(err) }, }) // 连接成功 wx.onSocketOpen((res) => { console.log('WebSocket 成功连接', res) // that.resMes() // 开始心跳 // that.startHeartBeat() }) //连接失败 wx.onSocketError((err) => { console.log('websocket连接失败', err); // twice=0 that.connectStart() }) }, 服务端: /** * 开启WebSocket支持 */ @Configuration public class WebSocketConfig { @Bean public ServerEndpointExporter serverEndpointExporter() { System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@"); return new ServerEndpointExporter(); } } package io.renren.modules.miniapp.controller; import com.alibaba.druid.support.logging.Log; import com.alibaba.druid.support.logging.LogFactory; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.apache.commons.lang.StringUtils; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestMapping; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.ServerEndpoint; import java.io.IOException; import java.util.concurrent.ConcurrentHashMap; @ServerEndpoint(value="/ws") @Component public class WebSocketServer{ static Log log= LogFactory.getLog(WebSocketServer.class); /**静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。*/ private static int onlineCount = 0; /**concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。*/ private static ConcurrentHashMap<String,WebSocketServer> webSocketMap = new ConcurrentHashMap<>(); /**与某个客户端的连接会话,需要通过它来给客户端发送数据*/ private Session session; /**接收userId*/ private String userId=""; /** * 连接建立成功调用的方法*/ @OnOpen public void onOpen(Session session) { this.session = session; this.userId="998"; if(webSocketMap.containsKey(userId)){ webSocketMap.remove(userId); webSocketMap.put(userId,this); //加入set中 }else{ webSocketMap.put(userId,this); //加入set中 addOnlineCount(); //在线数加1 } log.info("用户连接:"+userId+",当前在线人数为:" + getOnlineCount()); try { sendMessage("请注意不要疲劳驾驶"); } catch (IOException e) { log.error("用户:"+userId+",网络异常!!!!!!"); } } /** * 连接关闭调用的方法 */ @OnClose public void onClose() { if(webSocketMap.containsKey(userId)){ webSocketMap.remove(userId); //从set中删除 subOnlineCount(); } log.info("用户退出:"+userId+",当前在线人数为:" + getOnlineCount()); } /** * 收到客户端消息后调用的方法 * * @param message 客户端发送过来的消息*/ @OnMessage public void onMessage(String message, Session session) { log.info("用户消息:"+userId+",报文:"+message); //可以群发消息 //消息保存到数据库、redis if(StringUtils.isNotBlank(message)){ try { //解析发送的报文 JSONObject jsonObject = JSON.parseObject(message); //追加发送人(防止串改) jsonObject.put("fromUserId",this.userId); String toUserId=jsonObject.getString("toUserId"); //传送给对应toUserId用户的websocket if(StringUtils.isNotBlank(toUserId)&&webSocketMap.containsKey(toUserId)){ webSocketMap.get(toUserId).sendMessage(jsonObject.toJSONString()); }else{ log.error("请求的userId:"+toUserId+"不在该服务器上"); //否则不在这个服务器上,发送到mysql或者redis } }catch (Exception e){ e.printStackTrace(); } } } /** * * @param session * @param error */ @OnError public void onError(Session session, Throwable error) { log.error("用户错误:"+this.userId+",原因:"+error.getMessage()); error.printStackTrace(); } /** * 实现服务器主动推送 */ public void sendMessage(String message) throws IOException { this.session.getBasicRemote().sendText(message); } /** * 群组发送 * */ public static void sendallInfo(String message,@PathParam("userId") String userId) throws IOException { for (String key : webSocketMap.keySet()) { try { //判断接收用户是否是当前发消息的用户, 注意 这里因为是聊天室,聊天室就不不能收到自己 // if (!userno.equals(key)) { webSocketMap.get(key).sendMessage(message); System.out.println("key = " + key); // } } catch (IOException e) { e.printStackTrace(); } } // log.info("发送消息到:"+userId+",报文:"+message); // if(StringUtils.isNotBlank(userId)&&webSocketMap.containsKey(userId)){ // webSocketMap.get(userId).sendMessage(message); // }else{ // log.error("用户"+userId+",不在线!"); // } } /** * 发送自定义消息 * */ public static void sendInfo(String message,@PathParam("userId") String userId) throws IOException { log.info("发送消息到:"+userId+",报文:"+message); if(StringUtils.isNotBlank(userId)&&webSocketMap.containsKey(userId)){ webSocketMap.get(userId).sendMessage(message); }else{ log.error("用户"+userId+",不在线!"); } } public static synchronized int getOnlineCount() { return onlineCount; } public static synchronized void addOnlineCount() { WebSocketServer.onlineCount++; } public static synchronized void subOnlineCount() { WebSocketServer.onlineCount--; } }
2021-07-15