随着新零售时代的到来,许多店铺使用微信公众号实现扫码开门,下面简单介绍。

生成店铺URL

public void creatQrcode(String storeCode){String url = WechatConstant.getCreatQrcodeUrl(wechatAccessTokenService.takeAccessToken());String payResult = OkHttpUtil.getInstance().doPost(url,WechatConstant.getCreatQrcodePARAM("PAY_"+storeCode));String inDoorResult = OkHttpUtil.getInstance().doPost(url,WechatConstant.getCreatQrcodePARAM("INDOOR_"+storeCode));String outDoorResult = OkHttpUtil.getInstance().doPost(url,WechatConstant.getCreatQrcodePARAM("OUTDOOR_"+storeCode));String helpResult = OkHttpUtil.getInstance().doPost(url,WechatConstant.getCreatQrcodePARAM("HELP_"+storeCode));JSONObject payObject = JSON.parseObject(payResult);JSONObject inDoorObject = JSON.parseObject(inDoorResult);JSONObject outDoorObject = JSON.parseObject(outDoorResult);JSONObject helpObject = JSON.parseObject(helpResult);String payUrl = payObject.getString("url");String indoorUrl = inDoorObject.getString("url");String outdoorUrl = outDoorObject.getString("url");String helpUrl = helpObject.getString("url");if(!TextUtils.isEmpty(payUrl)&&!TextUtils.isEmpty(indoorUrl)&&!TextUtils.isEmpty(outdoorUrl)&&!TextUtils.isEmpty(helpUrl)){logger.info("update store urls===storeNum="+storeCode+"==payUrl=="+payUrl+"==inDoorUrl=="+indoorUrl+"==outDoorUrl=="+outdoorUrl+"==helpUrl=="+helpUrl);augeStoreMapper.updateUrlsByCode(storeCode,payUrl,indoorUrl,outdoorUrl,helpUrl);}
}
boolean isAddComplete = storeService.addStore(augeStore);
if (isAddComplete) {//新增完成后,调用微信的相关services来更新支付,进出门以及帮助地址try {wechatService.creatQrcode(augeStore.getCode());} catch (Exception e) {e.printStackTrace();}List<AugeStore> storeList = storeService.getByOrgan(admin.getOrganId());session.setAttribute("storeList", storeList);clientResponseJSONBean = ClientResponseJSONBean.getSuccessClientResponseJSONBean();clientResponseJSONBean.setMessage("成功");return clientResponseJSONBean.toJSONString();
}

微信用户扫描店铺二维码

注:生成的店铺url使用草料二维码生成二维码图片,以供使用。

实现

if (MsgType.SCAN.getValue().equals(event)) {//已经订阅后扫码  开门logger.info("MsgType.SCAN====" + inputMsg.getEventKey());//查询用户信息AugeWechatUser wechatUser = augeWechatUserMapper.selectByPrimaryKey(custermname);if (param.length == 2) {OkHttpUtil.getInstance().doGet(BookApiUtils.GET_REDIS_SET + custermname + "/" + param[1]);}if (param.length == 3) {OkHttpUtil.getInstance().doGet(BookApiUtils.GET_REDIS_SET + custermname + "/" + param[2]);}String backMsg = MSG_SUCCESS;//数据库未保存该用户if (wechatUser == null) {//保存该用户,返回注册图文消息augeWechatUserMapper.insertOrUpdate(new AugeWechatUser(custermname));ArticlesMessage outputMsg = getLoginMessage(custermname, servername, returnTime);backMsg = xs.toXML(outputMsg);logger.info("返回图文消息===" + backMsg);} else if (TextUtils.isEmpty(wechatUser.getPhone())) {//没有注册,返回注册图文消息ArticlesMessage outputMsg = getLoginMessage(custermname, servername, returnTime);backMsg = xs.toXML(outputMsg);logger.info("返回图文消息===" + backMsg);}String[] storeInfo = inputMsg.getEventKey().split("_");
if (storeInfo != null && storeInfo.length == 2) {AugeStore store = augeStoreMapper.selectStoreByCode(storeInfo[1]);if (store != null) {switch (storeInfo[0]) {//进门case WechatConstant.INDOOR:logger.info("用户==" + wechatUser.getPhone() + "扫码请求进门");inDoor(wechatUser, store);break;//出门case WechatConstant.OUTDOOR:logger.info("用户==" + wechatUser.getPhone() + "扫码请求出门");outDoor(wechatUser, store);break;default:break;}}
}

注:用户扫描二维码开门,首先判断用户是否注册,未注册返回注册的图文消息,已注册调用开门方法。

进门

 public void inDoor(final AugeWechatUser wechatUser, final AugeStore store) {//内网穿透直接开门taskExecutor.execute(new Runnable() {@Overridepublic void run() {OkHttpUtil.getInstance().doGet(WechatConstant.getUrl(store.getIp(), WechatConstant.INDOOR_URL + "?phonenum=" + wechatUser.getPhone()));}});}

OKHttpUtil

public class OkHttpUtil {private static OkHttpUtil okHttpUtil;private static OkHttpClient okHttpClient;private OkHttpUtil() {/*** OkHttp是一个第三方类库,* 用于android中请求网络* 创建OkHttpClient对象*/okHttpClient = new OkHttpClient();}public static OkHttpUtil getInstance() {if (okHttpUtil == null) {okHttpUtil = new OkHttpUtil();}return okHttpUtil;}public String doGet(String url) {/*** 请求接口* 创建Request对象*/Request request = new Request.Builder().url(url).build();//得到request对象Call call = okHttpClient.newCall(request);try {Response response = call.execute();return response.body().string();} catch (IOException e) {e.printStackTrace();}return null;}public String doPost(String url, Map<String, String> param) {FormBody.Builder builder = new FormBody.Builder();for (Map.Entry<String, String> entry : param.entrySet()) {builder.add(entry.getKey(), entry.getValue());}RequestBody body = builder.build();Request request = new Request.Builder().url(url).post(body).build();Call call = okHttpClient.newCall(request);try {Response response = call.execute();return response.body().string();} catch (IOException e) {e.printStackTrace();}return null;}public String doPostParam(String url, Map<String, Object> param) {FormBody.Builder builder = new FormBody.Builder();for (Map.Entry<String, Object> entry : param.entrySet()) {builder.add(entry.getKey(), (String) entry.getValue());}RequestBody body = builder.build();Request request = new Request.Builder().url(url).post(body).build();Call call = okHttpClient.newCall(request);try {Response response = call.execute();return response.body().string();} catch (IOException e) {e.printStackTrace();}return null;}public String doPost(String url, String param) {MediaType JSON = MediaType.parse("application/json; charset=utf-8");RequestBody body = RequestBody.create(JSON, param);Request request = new Request.Builder().url(url).post(body).build();Call call = okHttpClient.newCall(request);try {Response response = call.execute();return response.body().string();} catch (IOException e) {e.printStackTrace();}return null;}
}

使用微信公众号实现扫码开门相关推荐

  1. 微信公众号开发扫码登录(java版)

    文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源. 商家信息管理系统登录时可以用微信扫码登录. 参考文档是微信开放平台,**着重需要关注文档(开 ...

  2. 微信公众号免扫码登录的方法

    一.常规操作 每次登录公众号时,掏出手机扫一扫方能登录公众号,而且这个扫码动作只能是使用摄像头扫,不能是扫二维码图片. 如果在同一电脑上登陆过一次,后续登录时,只需要点下登录就可以,如下: 这样貌似也 ...

  3. thinkphp5+php微信公众号二维码扫码关注推广二维码事件实现

    thinkphp5微信公众号二维码扫码关注推广二维码事件实现, 给出实现的全部方法: 获取二维码,让微信公众号跳转到以下代码的code方法即可,用户点击二维码后,通过二维码获取关注用户信息及二维码推广 ...

  4. PHP 实现微信关注公众号或扫码实现获取用户信息

    php微信关注公众号或扫码实现获取用户信息(内含简易框架搭建,可复用) 概述 用户可通过扫描二维码进行关注或单纯进行扫码操作,实现获取用户微信信息,提高公众号关注率 详细 流程 准备工作 准备公众号及 ...

  5. 微信公众号二维码怎么生成?好用的生成方法介绍

    微信公众号二维码怎么生成?从事新媒体行业的小伙伴们应该都对微信公众号不陌生吧,公众号是一个企业对外宣传的重要方式之一.通常情况下我们都会将公众号的二维码放置在文章的文末.以便于读者扫码关注公众号.那么 ...

  6. 微信企业号或微信公众号调用扫一扫功能

    微信企业号或微信公众号调用扫一扫功能 JS-SDK安全域名配置 配置设置好之后下面就上代码 java代码 签名校验 JS-SDK安全域名配置 企业微信号 -- 安全域名配置需要通过验证(如下图) 微信 ...

  7. 关注微信公众号二维码可以带参数吗?

    2019独角兽企业重金招聘Python工程师标准>>> 需求是这样的,用户可以分享自己的微信二维码,别人扫码进入,能监测到.功能怎么实现呢? 通过微号帮平台可以实现,微信公众平台接口 ...

  8. 如何给CSDN博客添加微信公众号二维码或自定义栏目

    1. 前言 在浏览CSDN博客的过程中,我们可以发现有些博主的主页有微信公众号二维码等一些个人栏目信息.这可以让其他浏览博客的游客和作者进行有效的沟通,同时也可以在博客里对自己的微信公众号作宣传.我这 ...

  9. 查看获取别人的微信公众号二维码

    亲测可用,若有疑问请私信 方法一:通过微信号获取公众号/订阅号二维码 这个方法需要知道公众号/订阅号的微信号,具体操作步骤如下: 2.打开浏览器(电脑或手机浏览器均可),访问以下链接地址: https ...

  10. 分享编程技术的微信公众号二维码

    微信公众号二维码 大家好,以下是我的微信公众号二维码,平时会在公众号里分享和总结一些技术心得,欢迎骚扰交流.

最新文章

  1. Serializable接口
  2. 开发WebService两种开源工具CXF和Axis2的比较
  3. python-管理MySQL之ConfigParser模块
  4. DASH直播平台的搭建
  5. php对smarty的使用,[ php ] php smarty使用!
  6. 什么是准静态平坦瑞利衰落信道?
  7. 微信小程序 转发功能实例讲解
  8. python什么叫索引_python字典的索引是什么
  9. oracle时分秒修改值_oracle优化(一) oracle数据库使用 TIMESTAMP(6)类型保存年月日时分秒...
  10. 30位中外大师的摄影箴言
  11. 学python可以从事什么工作,python是做什么的软件
  12. accumulate详细用法
  13. 将折旧表分配至公司代码时提示公司代码分录不完全解决方案
  14. Mysql配置ssl证书
  15. 节拍脉冲发生器的设计
  16. loadrunner的安装
  17. 如何将电脑上的资料和文件转移到另一台电脑上?
  18. 并发编程面试汇总(2020)
  19. P4117 [Ynoi2018] 五彩斑斓的世界
  20. 流行的javascript库介绍

热门文章

  1. 组装台式计算机的相关要求,台式电脑的组装配置清单
  2. 一键批量修改文件夹名称
  3. springboot 联合查询
  4. 计算机硬盘容量1t,硬盘1tb等于多少gb 硬盘容量计算公式
  5. Spring Boot 整合 Thymeleaf 完整 Web 案例
  6. C语言学习编程软件推荐
  7. 重装显卡驱动,解决NVIDIA-SMI has failed问题
  8. KDJ指标详解教程跟KDJ指标详解的绝招
  9. html仿ppt动画,jquery仿PPT幻灯片特效插件ppt.js
  10. PMP知识点总结—计算题汇总