费了九牛二虎之力才搞出来的微信扫码授权openid绑定房间
开发公众号时,常常通过扫码绑定信息,
1.首先二维码中包含页面链接,列如注册,我这边写举一个简单的列子
上代码吧
@RequestMapping("/roomsinpage")
public class RoomSinpageController extends BaseController{
@Autowired private HotelService hotelService;
@Autowired private RoomTypeService roomTypeService;
@Autowired private RoomService roomService;
@Autowired private WechatInfoService wechatInfoService;
@Autowired private BuildService buildService;
@Autowired private LayerService layerService;
@Autowired private RoomPublicService roomPublicService;
@Autowired private HistoryPublicInfoService historyPublicInfoService;
Logger logger = LoggerFactory.getLogger(getClass());
public static String wxurl = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=";
public static String oauthinfo_uri = "DOMAINMODELCONTEXT/weixin/oauthInfo";
public static String state = "&response_type=code&scope=snsapi_userinfo&state=DOMAINMODELCONTEXT/pages/sao2.jsp?deviceid=DEVICEID#wechat_redirect";
//进入管理页面
@RequestMapping(method = RequestMethod.GET)
public String index(@CurrentUser SysUser loginUser,Model model) {
return "hotel/room-list-sinpage";
}//...
@RequestMapping(value = "/layerlist", method = RequestMethod.GET)
public String layerlist(@CurrentUser SysUser loginUser, long layerid, Model model) {
Layer s = this.layerService.getLayer(layerid);
model.addAttribute("photelId", s.getHotel().getId() );
model.addAttribute("pbuild", s.getBuild().getBuildno());
model.addAttribute("pbuildid", s.getBuild().getId());
model.addAttribute("player", s.getLayerno() );
return "hotel/room-list-sinpage";
}//...
//列表结果查询
@RequestMapping(value = "/list",method = RequestMethod.GET)
@ResponseBody
public ApiResponseResult list(Long hotelId, String roomNo, Integer build, Integer layer, Page$Sort page$Sort){
Hotel h = hotelService.getHotel(hotelId);
page$Sort.setSort("id");
page$Sort.setOrder("DESC");
Room con = new Room();
con.setHotel(h);
if(StringUtils.isNotBlank(roomNo)){
con.setRoomNo(roomNo);
}
if(build!=null && build!=0){
Build b = buildService.getBuildByHotelIdAndBuildno(h.getId(), build);
con.setBuild(b);
if(layer!=null && layer!=0){
Layer la = layerService.getByHotelIdAndBuildIdAndLayerno(h.getId(), b.getId(), layer);
con.setLayer(la);
}
}
// if(StringUtils.isNotBlank(build)){
// con.setBuild(Integer.parseInt(build));
// }
// if(StringUtils.isNotBlank(layer)){
// con.setLayer(Integer.parseInt(layer));
// }
Page<Room> resultlist = this.roomService.pageResult(page$Sort, con);
return ApiResponseResult.success().data(resultlist);
}//..
@RequestMapping(value="/listcus",method = {RequestMethod.GET})
@ResponseBody
public List<RoomType> list(Long hotelId){
List<RoomType> list = roomTypeService.getRoomTypeByHotelId(hotelId);
return list;
}
//删除
@RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
@ResponseBody
public ApiResponseResult delete(@CurrentUser SysUser loginUser,@PathVariable long id,Model model){
Room so = this.roomService.getRoom(id);
OpenDoorReq req = new OpenDoorReq();
req.setRoomdevno(so.getRoomdevno());
// new Thread(new Runnable(){
// @Override
// public void run() {
// try {
// if(OpenDoorUtilMany.delRoomInfo( req, so.getHotel())){
// }else{
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// }
// }).start();
//
this.roomService.delete(id);
return ApiResponseResult.success();
}//..
@Autowired private OperatorInfoService operatorInfoService;
//测试开门
@RequestMapping(value = "/testopen/{id}", method = RequestMethod.GET)
@ResponseBody
public ApiResponseResult testopen(@CurrentUser SysUser loginUser,@PathVariable long id,Model model){
Room so = this.roomService.getRoom(id);
if(so.getDeviceId()==null||so.getGwId()==null) {
return ApiResponseResult.failure("设备或网关未绑定");
}
OpenDoorReq req = new OpenDoorReq();
req.setRoomname(so.getRoomName());
req.setRoomno(so.getRoomNo());
req.setDevtype(1);
try {
if(OpenDoorUtilMany.openDoor( req, so.getHotel())){
// 开门记录日志
String now = CommonUtil.now();
HistoryCustomerOperatorInfo ho = new HistoryCustomerOperatorInfo();
ho.setOpenid(req.getWechat_id());
ho.setRequestid(req.getRequestid());
ho.setHotel(so.getHotel());
ho.setOPTime(now);
ho.setRoomNo(so.getRoomNo());
ho.setCustomerName( loginUser.getName() );
ho.setMobilePhone(loginUser.getPhoneNumber() );
ho.setOperatorMode(WebAdminConstants.OPERATE_MODE_OPENDOOR_TEST);
ho.setDescription("房间一键开门");
operatorInfoService.add(ho);
return ApiResponseResult.success();
}else{
return ApiResponseResult.failure("未知问题");
}
} catch (Exception e) {
return ApiResponseResult.failure(e.getMessage());
}
}//..
//测试开门
@RequestMapping(value = "/testopenPublic/{id}", method = RequestMethod.GET)
@ResponseBody
public ApiResponseResult testopenPublic(@CurrentUser SysUser loginUser,@PathVariable long id,Model model){
RoomPublic so=roomPublicService.getRoomPublic(id);
if(so.getDeviceId()==null||so.getGwId()==null) {
return ApiResponseResult.failure("设备或网关未绑定");
}
OpenDoorReq req = new OpenDoorReq();
req.setRoomname(so.getRoomName());
req.setRoomno(so.getRoomNo());
req.setRoomname(so.getRoomName());
req.setDevtype(2);
try {
if(OpenDoorUtilMany.openDoor( req, so.getHotel())){
// 开门记录日志
String now = CommonUtil.now();
HistoryPublicInfo ho = new HistoryPublicInfo();
ho.setOpenid(req.getWechat_id());
ho.setRequestid(req.getRequestid());
ho.setHotel(so.getHotel());
ho.setOPTime(now);
ho.setRoomNo(so.getRoomNo());
ho.setCustomerName( loginUser.getName() );
ho.setMobilePhone(loginUser.getPhoneNumber() );
ho.setBackoptime(now);
ho.setRoomname(so.getRoomName());
ho.setOperatorMode(WebAdminConstants.OPERATE_MODE_OPENDOOR_TEST);
ho.setDescription("门禁一键开门");
historyPublicInfoService.add(ho);
return ApiResponseResult.success();
}else{
return ApiResponseResult.failure("未知问题");
}
} catch (Exception e) {
return ApiResponseResult.failure(e.getMessage());
}
}//..
@RequestMapping(value = "/sysn/{id}", method = RequestMethod.GET)
@ResponseBody
public ApiResponseResult sysn(@CurrentUser SysUser loginUser,@PathVariable long id,Model model){
return ApiResponseResult.failure("暂不支持");
// Room so = this.roomService.getRoom(id);
//
// OpenDoorReq req = new OpenDoorReq();
// req.setRoomname(so.getRoomName());
// req.setRoomdevno(so.getRoomdevno());
// req.setMethod(2);
// String roomname = so.getBuild().getBuildno()+"栋"+ so.getLayer().getLayerno()+"层" + so.getRoomName();
// try {
// if(OpenDoorUtilMany.addRoomInfo( req, so.getHotel(), roomname )){
// return ApiResponseResult.success();
// }else{
// return ApiResponseResult.failure("未知问题");
// }
// } catch (Exception e) {
// return ApiResponseResult.failure(e.getMessage());
// }
}//..
@RequestMapping(value = "/sysnhotelall/{id}", method = RequestMethod.GET)
@ResponseBody
public ApiResponseResult sysnhotelall(@CurrentUser SysUser loginUser,@PathVariable long id,Model model){
return ApiResponseResult.failure("暂不支持");
// Hotel h = hotelService.getHotel(id);
// List<Room> rmlist = this.roomService.findAll(h.getId());
// if(rmlist==null || rmlist.size()<1){
// return ApiResponseResult.failure(""+"没有房间可同步");
// }
// try {
// if(OpenDoorUtilMany.sync_room_info( h, rmlist)){
// return ApiResponseResult.success();
// }else{
// return ApiResponseResult.failure("未知问题");
// }
// } catch (Exception e) {
// return ApiResponseResult.failure(e.getMessage());
// }
}//..
//进入 编辑页面
@RequestMapping(value="/editPage",method = {RequestMethod.GET})
public String editPage(Model model,Long id){
Room c = this.roomService.getRoom(id);
model.addAttribute("id", id);
model.addAttribute("hotelId", c.getHotel().getId() );
return "hotel/room-edit-sinpage";
}//...
//创建页面
@RequestMapping(value = "/create", method = RequestMethod.GET)
public String createNew( Model model){
return "hotel/room-edit-sinpage";
}//...
//保存新增
@RequestMapping(value = "/create", method = RequestMethod.POST)
@ResponseBody
public ApiResponseResult add( Room vo,Long hotelId, Integer build, Integer layer,Model model){
Hotel h = hotelService.getHotel(hotelId);
vo.setHotel(h);
/*RoomType roomType = this.roomTypeService.getRoomType(roomTypeId);
vo.setRoomType(roomType);*/
if(vo.getId()==null || vo.getId()==0){
Room bb = roomService.getRoomByRoomNo(build+"-"+vo.getRoomNo(), hotelId);
if(bb!=null){
return ApiResponseResult.failure("该房间号已经存在");
}
}
if(StringUtils.isEmpty( vo.getRoomdevno() )){
vo.setRoomdevno( build+"-"+vo.getRoomNo() );
}
/*if(vo.getRoomPrice()!=0){
if(vo.getRoomPrice()==roomType.getRoomPrice()){
vo.setRoomPrice(0);
}else{
vo.setRoomPrice(vo.getRoomPrice()*100);
}
}
if (vo.getRoomPrice() == 0) {
vo.setRoomPrice(roomType.getRoomPrice());
}*/
String wxurl = RoomSinpageController.wxurl;
String redirect_uri = RoomSinpageController.oauthinfo_uri;
String state = RoomSinpageController.state;
WechatInfo info = wechatInfoService.getWechatInfoByHotelId(hotelId);
if(info==null){
if(WebAdminConstants.isgy.equals("1")){
info = wechatInfoService.getWechatInfoByHotelId(1l);
}
}
if(info!=null){
wxurl = wxurl.replaceAll("APPID", info.getWxappid());
redirect_uri = redirect_uri.replaceAll("DOMAIN", info.getDomain() );
redirect_uri = redirect_uri.replaceAll("MODELCONTEXT", info.getModelcontext() );
// redirect_uri = urlEncodeUTF8(redirect_uri);
state = state.replaceAll("DOMAIN", info.getDomain() );
state = state.replaceAll("MODELCONTEXT", info.getModelcontext() );
String deviceid=h.getAppid()+":"+vo.getRoomdevno();
state = state.replaceAll("DEVICEID", deviceid);
vo.setWxurl( urlEncodeUTF8 ( wxurl+ redirect_uri + state ));
} //..
if(build!=null && build!=0){
Build b = buildService.getBuildByHotelIdAndBuildno(hotelId, build);
vo.setBuild(b);
if(layer!=null && layer!=0){
Layer la = layerService.getByHotelIdAndBuildIdAndLayerno(hotelId, b.getId(), layer);
vo.setLayer(la);
}
}
if(StringUtils.isEmpty( vo.getRoomName() )){
vo.setRoomName( build+"-"+vo.getRoomNo() );
}
vo.setRoomNo(build+"-"+vo.getRoomNo());
roomService.addOrUpdate(vo);
Room r=new Room();
String nano = System.nanoTime() + "";
r.setHotel(h);
r.setRoomNo(vo.getRoomNo());
r.setRequestid(Long.parseLong(nano.substring(nano.length() - 13)));
r.setDevstatus(1);
r.setDoortype(0); //0添加 1,解绑 2,删除
try {
super.ImportRoomDev(r);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ApiResponseResult.failure().message(e.getMessage());
}
return ApiResponseResult.success();
}//...
// 保存新增
@RequestMapping(value = "/updateSingle", method = RequestMethod.POST)
@ResponseBody
public ApiResponseResult update(Room con, Model model) {
// Room ro = roomService.getRoomByDeviceId(con.getDeviceId(),con.getRoomNo());
// if (ro != null) {
// return ApiResponseResult.failure("设备Id已存在,不能重复添加", -1);
// } else {
Room vo = roomService.getRoom(con.getId());
RoomType rt = this.roomTypeService.getRoomType(con.getRoomTypeId());
vo.setDescription(con.getDescription());
vo.setRoomType(rt);
vo.setDoortype(con.getDoortype());
if (con.getRoomPrice() == 0) {
vo.setRoomPrice(rt.getRoomPrice());
}else {
vo.setRoomPrice(con.getRoomPrice()*100);
}
if (StringUtils.isNotEmpty(con.getRoomName())) {
vo.setRoomName(con.getRoomName());
}
roomService.addOrUpdate(vo);
// }
return ApiResponseResult.success();
}// ...
public static String urlEncodeUTF8(String source) {
String result = source;
try{
result = java.net.URLEncoder.encode(source,"utf-8");
}catch(UnsupportedEncodingException e){
e.printStackTrace();
}
return result;
}//...
//查看详情
@RequestMapping(value="/detail",method = {RequestMethod.GET})
@ResponseBody
public ApiResponseResult detail(Long id){
Room s = this.roomService.getRoom(id);
return ApiResponseResult.success().data(s);
}//..
//设备
@RequestMapping(value="/sbsearch",method = {RequestMethod.GET})
@ResponseBody
public ApiResponseResult sbsearch(Room con,Long hotelId){
Room ro = roomService.getRoomByDeviceId(con.getDeviceId(), hotelId);
if (ro != null) {
return ApiResponseResult.failure("设备Id已存在,不能重复添加", -1);
} else {
System.out.println(con.getRoomNo());
Room so =roomService.getRoomByRoomNo(con.getRoomNo(),hotelId);
so.setDeviceId(con.getDeviceId());
so.setBarry(0l);
so.setBarrytime(null);
so.setRecenttime(null);
roomService.addOrUpdate(so);
}//..
return ApiResponseResult.success();
}
}//end
主要代码部分是wxurl的生成,也就是其生成二维码的参数生成
//保存新增
@RequestMapping(value = "/create", method = RequestMethod.POST)
@ResponseBody
public ApiResponseResult add( Room vo,Long hotelId, Integer build, Integer layer,Model model){
Hotel h = hotelService.getHotel(hotelId);
vo.setHotel(h);
/*RoomType roomType = this.roomTypeService.getRoomType(roomTypeId);
vo.setRoomType(roomType);*/
if(vo.getId()==null || vo.getId()==0){
Room bb = roomService.getRoomByRoomNo(build+"-"+vo.getRoomNo(), hotelId);
if(bb!=null){
return ApiResponseResult.failure("该房间号已经存在");
}
}
if(StringUtils.isEmpty( vo.getRoomdevno() )){
vo.setRoomdevno( build+"-"+vo.getRoomNo() );
}
/*if(vo.getRoomPrice()!=0){
if(vo.getRoomPrice()==roomType.getRoomPrice()){
vo.setRoomPrice(0);
}else{
vo.setRoomPrice(vo.getRoomPrice()*100);
}
}
if (vo.getRoomPrice() == 0) {
vo.setRoomPrice(roomType.getRoomPrice());
}*/
String wxurl = RoomSinpageController.wxurl;
String redirect_uri = RoomSinpageController.oauthinfo_uri;
String state = RoomSinpageController.state;
WechatInfo info = wechatInfoService.getWechatInfoByHotelId(hotelId);
if(info==null){
if(WebAdminConstants.isgy.equals("1")){
info = wechatInfoService.getWechatInfoByHotelId(1l);
}
}
if(info!=null){
wxurl = wxurl.replaceAll("APPID", info.getWxappid());
redirect_uri = redirect_uri.replaceAll("DOMAIN", info.getDomain() );
redirect_uri = redirect_uri.replaceAll("MODELCONTEXT", info.getModelcontext() );
// redirect_uri = urlEncodeUTF8(redirect_uri);
state = state.replaceAll("DOMAIN", info.getDomain() );
state = state.replaceAll("MODELCONTEXT", info.getModelcontext() );
String deviceid=h.getAppid()+":"+vo.getRoomdevno();
state = state.replaceAll("DEVICEID", deviceid);
vo.setWxurl( urlEncodeUTF8 ( wxurl+ redirect_uri + state ));
} //..
if(build!=null && build!=0){
Build b = buildService.getBuildByHotelIdAndBuildno(hotelId, build);
vo.setBuild(b);
if(layer!=null && layer!=0){
Layer la = layerService.getByHotelIdAndBuildIdAndLayerno(hotelId, b.getId(), layer);
vo.setLayer(la);
}
}
if(StringUtils.isEmpty( vo.getRoomName() )){
vo.setRoomName( build+"-"+vo.getRoomNo() );
}
vo.setRoomNo(build+"-"+vo.getRoomNo());
roomService.addOrUpdate(vo);
Room r=new Room();
String nano = System.nanoTime() + "";
r.setHotel(h);
r.setRoomNo(vo.getRoomNo());
r.setRequestid(Long.parseLong(nano.substring(nano.length() - 13)));
r.setDevstatus(1);
r.setDoortype(0); //0添加 1,解绑 2,删除
try {
super.ImportRoomDev(r);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return ApiResponseResult.failure().message(e.getMessage());
}
return ApiResponseResult.success();
}//...
我这边是生成房间的同时生成相关联的房间二维码信息,方便后面扫码的参数获取
2.扫码
手机微信扫一扫识别二维码,如下
3.确认绑定,我这边是openid和房间号关联,需要触发公众号接口,也就是sao2.jsp如下
<%@page import="com.bochiot.amain.StringConst"%>
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Cache-Control" content="no-cache"/>
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
<meta http-equiv="description" content="申请微信开门业务">
<meta http-equiv="author" content="铂智科技">
<meta http-equiv="date" content="2018-1-4">
<!-- https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxa46160863e938c91&redirect_uri=http%3A%2F%2Fpku.bochiot.com%2Fweixin%2FoauthInfo&response_type=code&scope=snsapi_userinfo&state=http://pku.bochiot.com/pages/home.jsp#wechat_redirect -->
<title>扫一扫绑定房间</title>
<%
String openID = request.getParameter("openID");
String nickName=request.getParameter("nickname");
if(openID != null){
// session.setAttribute("openID", openID);
}
String openid = "";
String nickname="";
try{
openid = (String)session.getAttribute("openID");
nickname=(String)session.getAttribute("nickname");
}catch(Exception e){
}
if(openid == null || openid.equals("")){
response.sendRedirect("./warm_usewx.jsp");
}
String deviceid1 = request.getParameter("deviceid");
String[] deviceid2 = deviceid1.split(":");
String appid = deviceid2[0];
String deviceid=deviceid2[1];
%>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery.cookie.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#contact").submit();
WeixinJSBridge.call('closeWindow');
});
</script>
</head>
<body>
<div class="form_black m_2 p_2 mt1">
<form id="contact" name="contact" method="get" action="../bozhi/openRoom?action=saoyisao" >
<input type="text" id="action" name="action" value="saoyisao" />
<input type="text" id="appid" name="appid" value="<%=appid %>" />
<input type="text" id="deviceid" name="deviceid" value="<%=deviceid %>" />
<input type="text" id="openid" name="openid" value="<%=openid %>" />
<input type="text" id="nickname" name="nickname" value="<%=nickname %>" />
<input class="block btn_fill_green mt_1 wp100 hp100 f3" id="bind_btn"
name="bind_btn" type="submit" value="绑定"/>
</form>
</div>
</body>
</html>
也就是接口../bozhi/openRoom?action=saoyisao
if ("saoyisao".equals(action)) {
this.saoyisao(request, response);
return;
}
转入
protected void saoyisao(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
L.i(TAG, "saoyisao start");
// openID
/* String openId = (String) request.getSession().getAttribute("openid");
String nickname1=(String)request.getSession().getAttribute("nickname");
if (openId == null) {
response.sendRedirect(OauthUtil.MycreateOauth(MainConst.getDomain_bozhi() + "passOpen"));
L.d(TAG, "openID == null");
return;
}*/
String deviceid = request.getParameter("deviceid");
String appid=request.getParameter("appid");
String openid = request.getParameter("openid");
String nickname=request.getParameter("nickname");
if (deviceid != null) {
JSONObject result = null;
String errorMsg = "";
ENUM_BOZHI_RESULT enum_BOZHI_RESULT = ENUM_BOZHI_RESULT.MSG_ERR_INVALID;
try {
//扫一扫微信id和房间绑定
result = HttpGyRentUserService.sendCmd_AUTH_SCAN( deviceid, openid,appid,nickname);
enum_BOZHI_RESULT = ENUM_BOZHI_RESULT.getCODE(result.getInt("code"));
if (enum_BOZHI_RESULT == ENUM_BOZHI_RESULT.MSG_SUCCESS) {
JSONObject data = result.getJSONObject("data");
int room_number = 0;
try {
room_number = data.getInt("room_number");
} catch (Exception e) {
e.printStackTrace();
}
// response.sendRedirect(MainConst.getDomain_pages() + "successed.html");
L.d(TAG, "successed " + " room : " + room_number);
// 客服消息
WeixinKFUtil.sendText(MainConst.getToken(), openid,
String.format(StringConst.WEIXIN_TEXT_BIND_SUCCESSED, room_number));
} else {
errorMsg = result.getString("message");
String errString = String.format(StringConst.WEIXIN_WEB_ERR_BINDROOM_CONTENT,
ENUM_BOZHI_RESULT.getStatusString(enum_BOZHI_RESULT, errorMsg, errorMsg));
WeixinKFUtil.sendText(MainConst.getToken(), openid, errString);
L.e(TAG, "failed result value : " + enum_BOZHI_RESULT.getValue() + " deviceid : " + deviceid);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}//get
4.跳到service配置
result = HttpGyRentUserService.sendCmd_AUTH_SCAN( deviceid, openid,appid,nickname);
5.转入HttpGyRentUserService
//微信扫一扫绑定
public static JSONObject sendCmd_AUTH_SCAN(String deviceid, String openid,String appid,String nickname) throws IOException {
JSONObject info = new JSONObject();
info.put("wechat_id", openid);
info.put("deviceid", deviceid);
info.put("appid", appid);
info.put("nickname", nickname);
return HttpRequestUtils.sendCmdToServer(sendCmd_AUTH_SCAN,info);
}//...
里面关联服务器的路径
public static String sendCmd_AUTH_SCAN=WxConfiguration.URL_PREFIX + "api/gyrentclient/userToauth"; //微信扫一扫授权
sendCmd_AUTH_SCAN=WxConfiguration.URL_PREFIX + "api/gyrentclient/userToauth"; //微信扫一扫授权
6.转入服务器后台GyRentClientController
接收处理数据:
@RequestMapping(value = "/userToauth",method = RequestMethod.POST, consumes = "application/json")
public ApiResponseResult userToauth(@RequestBody OpenDoorReq req){
Hotel h=hotelService.getHotelByAppid(req.getAppid());
RoomUser roomUser=roomUserService.getRoomOpen(h.getId(), req.getDeviceid(), req.getWechat_id());
if(roomUser!=null) {
//进入公众号租户的页面显示所绑定的房间
}
RoomUser roomUser2=new RoomUser();
roomUser2.setHotel(h);
roomUser2.setRoomNo(req.getDeviceid());
roomUser2.setOpenid(req.getWechat_id());
roomUser2.setNickname(req.getNickname());
RoomUser roomUser3=roomUserService.addOrUpdate(roomUser2);
//进入公众号租户的页面显示所绑定的房间
return ApiResponseResult.success();
}
7.openid和 房间进行绑定插入到数据库
好插入成功,绑定成功。
重点:1.我这边是用草料的二维码生成网址,生成网址最重要的参数要明确
2.扫码获取内容正确
3.获取内容传入接口入参,进行业务逻辑处理