实习三个月小记

一眨眼的功夫实习三个月已经过去了,回想一下这三个月过得特别的快,那么这三个月时间我都都做了些什么呢,和了解些什么呢,下面是我总结出来的这将近三个月来所学习到的和所遇到的问题:
1.python+appium+pytest自动化安卓app测试
2.python+selenium+pytest网页自动化测试
3.微信小程序开发,后台,前台开发以及发布上线流程
4.短信邀请小功能
5.手动测试如何进行
6.aws如何运行自己输入的命令
了解了哪些工具的使用呢?
1.pytest+appium的安装使用
2.sourcetree使用建立分支,拉取,合并
3.jenkins的使用
4.aws远程连接
5.elasticsearch客户端kibana使用监控查看日志
6.数据移植工具
7.Linux部署线上运行的前端代码war
对于python+appium+pytest可以直接去查看微信公众号进行查看系列文章
那么我们来说下微信小程序的开发发布流程吧我以前的文章中有记录,请点击这里

微信小程序中的问题:

可以内置手机号验证码
1.问题:session_key失效
    通过前台传入的iv,code,encryptedData,nick后台通过接受这些参数
    code: "033gH7422h46pV0nDA222hCa422gH74d"
    encryptedData: "WzOuQVxdCRM6VzQ8Oxdtp5e+x1D7yo4e8TwAxFkA4wDSrK89SY0+fugD8QF3I3Q7Fw61moaqCO6h1hvQofs/+5f+mZcojg7TcTni7au4M8dCWDAEgg/Xk6jHejs2Pu4CGC3dct/lxXN8FqDC04zE4AXBNImw6q9RTsH7p5H4+JJn3nVZBTm+jrgcb4ZNQ6EtzUS/c3Bqp97lerGxp0CbW8m40TZu18BIBnKn77GCNo8WsL8fgFmxUmUVDxWbW7wRXCLDkjOmaGrYcExnZSmVAmh5rpl3S84L9IcxJyaBl/SYadqa+ttSXMWaWtmSGLl1JUrh4qn9uU4fb4s6OBMuZLN/M7x+7u2i6l5GHaOF+jvCYbduibtjbhop4OOk+mlTEy2XgMuVdJVorTK5fcDvkyA9wJqWQTWL3Xm3uvgK1JwDkjGT/SIOydwjWwKmRQgrduxQ/bruzVhDNaunSdsZv2HYd4OIc0wZUxTXzPuUQLrHdegMPCP5Dsm4wR5DH1bixEgkcBgBV21PGVD/n5VWBA=="
    iv: "MIU0nuFdCk/dqeTjQrQUbQ=="
    nick: "Kay三石"
    拼接出xcxLoginUrl = "https://api.weixin.qq.com/sns/jscode2session?appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";
    通过微信返回的json数据置换出session_key,
    通过session_key和iv,code,encryptedData,通过加密/解密算法解密出
    unionid,和openid,通过唯一的unionId获取到userid的用户信息
    总的来说,就是不能点击按钮后,才调用wx.login,必须先wx.login后,才能点击按钮,这时候的session_key才是正确的
    使用的时候,确保微信小程序在同一个开发者账号平台下,不然获取不到unionid,unionID是微微信唯一的身份标识

具体的代码如下:

   WeChatSecret weChatSecret = weChatConfig.getSecrets().get(client.toUpperCase());
            String loginUrl = String.format(xcxLoginUrl, weChatSecret.getAppId(), weChatSecret.getAppSecret(), request.getCode());
            String result = restTemplate.getForObject(loginUrl, String.class);
            WeXCXLoginCheckResponse checkResponse = new WeXCXLoginCheckResponse();
            String encryptedData = request.getEncryptData();
            JSONObject jsonSessionKey = new JSONObject(result);
            String iv = request.getIv();
            String sessionKey = jsonSessionKey.getString("session_key");
            checkResponse.setSession_key(sessionKey);
            String decryptData = null;
            try {
            	//解密出unionID和OpenId
                decryptData = AESUtil.decrypt(encryptedData, sessionKey, iv, "UTF-8");
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (StringUtil.isEmptyOrBlank(decryptData))
                throw new BusinessException(ErrorCode.AUTHORIZE_FAILED);
            JSONObject jsonData = new JSONObject(decryptData);
            String unionId = jsonData.getString("unionId");
            String openId = jsonData.getString("openId");
            String userId = this.findUserIdByTypeAndSocialId(unionId, SocialLoginType.WE_CHAT.toString().toUpperCase());

2.辨别不同的小程序的使用:
通过header进行辨别是否是同一个小程序
3.app分享这个小程序连接到微信
1.必须把这个app和小程序绑定到一个开放平台账号下才可以进行使用

短信邀请:

只需要手机号码就可以:
// 查询该班级已绑定未激活的手机号
        List<InvitationModel> childInvitationModel = invitationDao.getInvitationPhoneNumbersByGroupId(groupId);
        List<String> keys = new ArrayList<>();
        childInvitationModel.forEach(ci -> {
            String childId = ci.getChildId();
            String phoneNumber = ci.getUserEmail();
            keys.add(childId + phoneNumber + groupId);
        });
        // 校验发送次数,如果超出则提示
        if (shieldProvider.isOperationExcessive(ip, ShieldLimitType.PLG_INVITE_PARENT_SMS, 500)) {
            throw new BusinessException(ErrorCode.IP_SEND_SMS_EXCESSIVE, MSG.t("IP_SEND_SMS_EXCESSIVE"));
        }
        List<String> newKeys = new ArrayList<>();
        for (int i = 0; i < keys.size(); i++) {
            if (!shieldProvider.isOperationExcessive(keys.get(i), ShieldLimitType.PLG_INVITE_PARENT_SMS, 1)) {
                newKeys.add(keys.get(i));
            }
        }
        if (newKeys.isEmpty()) {
            throw new BusinessException(ErrorCode.INVITE_PARENT_SMS_EXCESSIVE, MSG.t("INVITE_PARENT_SMS_EXCESSIVE"));
        }
        // 发送短信
        AgencyEntity agency = agencyDao.getByGroupId(groupId);
        String agencyName = "";
        String defaultAgencyId = "";
        if (agency != null) {
            agencyName = agency.getName();
            defaultAgencyId = agency.getId();
        }
        for (InvitationModel invitationModel : childInvitationModel) {
            String childId = invitationModel.getChildId();
            String phoneNumber = invitationModel.getUserEmail();
            String childName = invitationModel.getChildName();
            String contact = childId + phoneNumber + groupId;
            if (!newKeys.contains(contact)) continue;
            // 手机号发送验证码次数+1(用于限制手机号单日最大发送短信数量)
            shieldProvider.userOperationINCR(contact, ShieldLimitType.PLG_INVITE_PARENT_SMS);
            // IP发送验证码次数+1(用于限制IP单日最大发送短信数量)
            shieldProvider.userOperationINCR(ip, ShieldLimitType.PLG_INVITE_PARENT_SMS);
            ShortMessage message = new ShortMessage();
            message.setContent();
            message.setReceiver(phoneNumber);
            AgencyMetaDataEntity agencytype = agencyDao.getMeta(defaultAgencyId, AgencyMetaKey.WXMP_USERNAME.toString());
            // 短信类型:sendMsg方法会根据短信类型选择 不同的短信模板
            if (agencytype != null && !StringUtil.isEmptyOrBlank(agencytype.getMetaValue())) {
                message.setSignName(SmsUtil.findSingNameBySmsType(ShortMessageType.PLG_INVITE_PARENT_HCY));
                message.setType(ShortMessageType.PLG_INVITE_PARENT_HCY);
            } else {
                message.setSignName(SmsUtil.findSingNameBySmsType(ShortMessageType.PLG_INVITE_PARENT));
                message.setType(ShortMessageType.PLG_INVITE_PARENT);
            }

            try {
                shortMessageProvider.sendMsg(message);
            } catch (Exception e) {
                e.printStackTrace();
                throw new BusinessException(ErrorCode.SMS_SEND_FAILURE, MSG.t("SMS_SEND_FAILURE"));
            }
        }

sendMsg方法:

@Override
    public Boolean sendMsg(ShortMessage message) throws ClientException {
        SendSmsRequest request = new SendSmsRequest();
        request.setPhoneNumbers(message.getReceiver());
        // SignName在阿里云短信管理页面可查
        request.setSignName(message.getSignName());
        request.setTemplateCode(SmsUtil.findTemplateCodeBySmsType(message.getType()));
        request.setTemplateParam(message.getContent().replaceAll("Mr.", ""));
        // 选填-上行短信扩展码(无特殊需求用户请忽略此字段)
        // request.setSmsUpExtendCode("90997");
        // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        // request.setOutId("yourOutId");
        // hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = null;
      	//阿里云提供的接口
        sendSmsResponse = acsClient.getAcsResponse(request);
        // 非法手机号
        if (Objects.equals("isv.MOBILE_NUMBER_ILLEGAL", sendSmsResponse.getCode())) {
            throw new BusinessException(ErrorCode.PHONE_NUMBER_ILLEGAL, MSG.t("PHONE_NUMBER_ILLEGAL"));
        }
        return Objects.equals("OK", sendSmsResponse.getCode());
    }

这些的这些都是乱七八糟的东西,哎,说来惭愧,已经实习三个月中了,公司后台的代码,接触的太少了,这里我主要做了一些自动化测试方面的工作,自我感觉提升不太大,因为一个人坐一些自己不是太喜欢的东西是不是还是有点的不适应的,虽说这些都是工作经历吧,但是这里只是学习的皮毛,想要真切的学习到仍需后面的不断的实践。前路漫漫,一直前行就可以了。ok,就这样吧今天,好累的感觉有时。

猜你喜欢

转载自blog.csdn.net/qq_37256896/article/details/101309846