本文是基于微信扫码打开店铺简单实现。
1、创建店铺的时候生成进门Url
/**
* 生成店铺二维码
* @param storeCode
*/
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(); }
2、判断微信用户是否关注公众号
2.1未关注 提示关注
2.2 关注 ->开门
switch (storeInfo[0]){ //进门 case WechatConstant.INDOOR: logger.info("用户=="+wechatUser.getPhone()+"扫码请求进门"); inDoor(wechatUser,store); break; }
本文使用两种进店方式:极光推送和内网穿透开门
/** * 进店 * @param wechatUser * @param store */ public void inDoor(AugeWechatUser wechatUser, final AugeStore store){ //极光推送到扫码的客户机 JPushUtil.sendPush(store.getCode()+"_"+WechatConstant.INDOOR,wechatUser.getPhone(),wechatUser.getId()); //内网穿透直接开门 taskExecutor.execute(new Runnable() { @Override public void run() { OkHttpUtil.getInstance().doGet(WechatConstant.getUrl(store.getIp(),WechatConstant.INDOOR_URL)); } }); }
public static void sendPush(String storeNum,String phonenum,String openid) { PushPayload payload = PushPayload.newBuilder() .setPlatform(Platform.android()) .setAudience(Audience.alias(storeNum)) .setMessage(Message.newBuilder() .setMsgContent("{openid:\'"+openid+"\',phonenum:\'"+phonenum+"\'}") .build()) .build(); try { PushResult result = jpushClient.sendPush(payload); System.out.println(result); } catch (APIConnectionException e) { } catch (APIRequestException e) { } }
OkHttp是一个第三方类库,用于android中请求网络
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; }
极光推送->android平台->调用接口,开门