一眨眼的功夫實習三個月已經過去了,回想一下這三個月過得特別的快,那麼這三個月時間我都都做了些什麼呢,和了解些什麼呢,下面是我總結出來的這將近三個月來所學習到的和所遇到的問題:
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,就這樣吧今天,好累的感覺有時。