微信扫码开门

本文是基于微信扫码打开店铺简单实现。

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平台->调用接口,开门

猜你喜欢

转载自my.oschina.net/inchlifc/blog/1627342