Search in sources :

Example 1 with WxLoginErrorException

use of com.stardata.starshop2.authcontext.domain.WxLoginErrorException in project starshop by beautautumn.

the class WxSessionCheckingClientAdapter method code2session.

@Override
public void code2session(String code, WxAuthInfo wxAuthInfo) throws WxLoginErrorException {
    final WxMaService wxService = WxConfiguration.getMaService();
    try {
        WxMaJscode2SessionResult session = wxService.getUserService().getSessionInfo(code);
        wxAuthInfo.setOpenid(session.getOpenid());
        wxAuthInfo.setSessionKey(session.getSessionKey());
    } catch (WxErrorException e) {
        WxError wxError = e.getError();
        throw new WxLoginErrorException(wxError.getErrorCode(), wxError.getErrorMsg());
    }
}
Also used : WxError(me.chanjar.weixin.common.error.WxError) WxLoginErrorException(com.stardata.starshop2.authcontext.domain.WxLoginErrorException) WxMaService(cn.binarywang.wx.miniapp.api.WxMaService) WxMaJscode2SessionResult(cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult) WxErrorException(me.chanjar.weixin.common.error.WxErrorException)

Example 2 with WxLoginErrorException

use of com.stardata.starshop2.authcontext.domain.WxLoginErrorException in project starshop by beautautumn.

the class StarshopAuthLoginTests method app_service_should_login_exception_given_invalid_and_used_code.

// 6.5 错误的微信code,要求返回无效请求告警
@Test
@Transactional
@Rollback(true)
void app_service_should_login_exception_given_invalid_and_used_code() {
    // given: 准备好输入数据
    String code = "testCode";
    String rawData = "testRawData";
    String signature = "testSignature";
    WxLoginRequest request = new WxLoginRequest();
    request.setCode(code);
    request.setRequestIp("testLoginIp");
    request.setRawData(rawData);
    request.setSignature(signature);
    request.setNickName("testUser1");
    request.setGender(1);
    request.setAvatarUrl("https://www.somehost.com/someAvatar.png");
    request.setCountry("中国");
    request.setProvince("江苏");
    request.setCity("南京");
    request.setLanguage("zh_CN");
    try {
        // when: 执行authAppService.loginByWx方法调用
        UserResponse response = authAppService.loginByWx(request);
        // 如下这些应该不被执行到
        assertNotNull(response);
        assertNotNull(response.getId());
        assertNotNull(response.getToken());
        User loadedUser = userRepository.instanceOf(LongIdentity.from(response.getId()));
        User frontUser = User.of("testUser1", 1).avatarUrl("https://www.somehost.com/someAvatar.png").country("中国").province("江苏").city("南京").language("zh_CN");
        assertTrue(isSameMiniAppUserInfo(loadedUser, frontUser));
        UserToken userToken = loadedUser.currentToken();
        LocalDateTime now = LocalDateTime.now();
        userToken.getExpireTime().isAfter(now.minusMinutes(1).plusHours(72));
    } catch (WxLoginErrorException e) {
        // then: 抛出"Checking userinfo integrity failed"异常
        assertNotNull(e);
        assertTrue(e.getErrCode() == 40029 || e.getErrCode() == 45011 || e.getErrCode() == 40226);
    }
}
Also used : UserResponse(com.stardata.starshop2.authcontext.pl.UserResponse) LocalDateTime(java.time.LocalDateTime) User(com.stardata.starshop2.authcontext.domain.user.User) WxLoginRequest(com.stardata.starshop2.authcontext.pl.WxLoginRequest) UserToken(com.stardata.starshop2.authcontext.domain.user.UserToken) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest) Rollback(org.springframework.test.annotation.Rollback) Transactional(org.springframework.transaction.annotation.Transactional)

Example 3 with WxLoginErrorException

use of com.stardata.starshop2.authcontext.domain.WxLoginErrorException in project starshop by beautautumn.

the class StarshopAuthLoginTests method app_service_should_login_exception_given_valid_and_used_code.

// 6.4 正确的微信code,但已过期,要求返回业务失败
@Test
@Transactional
@Rollback(true)
void app_service_should_login_exception_given_valid_and_used_code() {
    // given: 准备好输入数据
    String code = "091FHp0w3KT3yY2VjV1w3aMiIB3FHp0B";
    String rawData = "{\"nickName\":\"深清秋\",\"gender\":0,\"language\":\"zh_CN\",\"city\":\"\",\"province\":\"\",\"country\":\"\",\"avatarUrl\":\"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKq2CRmib1mpu4hOFYtcIHgAmS7DicCEfYkUHoPmPQn74BXH5GerjoMOxIqib7iafNNBw2ZAicBj6gZGUQ/132\"}";
    String signature = "af36606701965ce329c2613b91f801d2c07b332d";
    WxLoginRequest request = new WxLoginRequest();
    request.setCode(code);
    request.setRequestIp("testLoginIp");
    request.setRawData(rawData);
    request.setSignature(signature);
    request.setNickName("testUser1");
    request.setGender(1);
    request.setAvatarUrl("https://www.somehost.com/someAvatar.png");
    request.setCountry("中国");
    request.setProvince("江苏");
    request.setCity("南京");
    request.setLanguage("zh_CN");
    try {
        // when: 执行authAppService.loginByWx方法调用
        UserResponse response = authAppService.loginByWx(request);
        // 如下这些应该不被执行到
        assertNotNull(response);
        assertNotNull(response.getId());
        assertNotNull(response.getToken());
        User loadedUser = userRepository.instanceOf(LongIdentity.from(response.getId()));
        User frontUser = User.of("testUser1", 1).avatarUrl("https://www.somehost.com/someAvatar.png").country("中国").province("江苏").city("南京").language("zh_CN");
        assertTrue(isSameMiniAppUserInfo(loadedUser, frontUser));
        UserToken userToken = loadedUser.currentToken();
        LocalDateTime now = LocalDateTime.now();
        userToken.getExpireTime().isAfter(now.minusMinutes(1).plusHours(72));
    } catch (WxLoginErrorException e) {
        // then: 抛出"Checking userinfo integrity failed"异常
        assertNotNull(e);
        assertTrue(e.getErrCode() == 40029 || e.getErrCode() == 45011 || e.getErrCode() == 40226);
    }
}
Also used : UserResponse(com.stardata.starshop2.authcontext.pl.UserResponse) LocalDateTime(java.time.LocalDateTime) User(com.stardata.starshop2.authcontext.domain.user.User) WxLoginRequest(com.stardata.starshop2.authcontext.pl.WxLoginRequest) UserToken(com.stardata.starshop2.authcontext.domain.user.UserToken) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest) Rollback(org.springframework.test.annotation.Rollback) Transactional(org.springframework.transaction.annotation.Transactional)

Example 4 with WxLoginErrorException

use of com.stardata.starshop2.authcontext.domain.WxLoginErrorException in project starshop by beautautumn.

the class StarshopAuthLoginTests method should_wx_login_login_biz_exception_given_valid_and_used_code.

// 3.3. 微信后台登录并校验;(组合任务,领域服务,微信code有效但已被使用过)
@Test
void should_wx_login_login_biz_exception_given_valid_and_used_code() {
    // given: 有效的微信前端code、有效的微信认证用户rawData和signature
    String code = "091FHp0w3KT3yY2VjV1w3aMiIB3FHp0B";
    String rawData = "{\"nickName\":\"深清秋\",\"gender\":0,\"language\":\"zh_CN\",\"city\":\"\",\"province\":\"\",\"country\":\"\",\"avatarUrl\":\"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKq2CRmib1mpu4hOFYtcIHgAmS7DicCEfYkUHoPmPQn74BXH5GerjoMOxIqib7iafNNBw2ZAicBj6gZGUQ/132\"}";
    String signature = "af36606701965ce329c2613b91f801d2c07b332d";
    WxAuthInfo wxAuthInfo = new WxAuthInfo(rawData, signature);
    try {
        // when: 调用微信登录服务 WxLoginService.wxLogin
        WxOpenId wxOpenId = wxLoginService.wxLogin(code, wxAuthInfo);
        // 正常情况下不应该执行到这儿
        assertEquals(0, 1);
    } catch (WxLoginErrorException e) {
        // then: 抛出"微信登录错误"异常
        assertTrue(e.getErrCode() == 40029 || e.getErrCode() == 45011 || e.getErrCode() == 40226);
        assertNotNull(e);
    }
}
Also used : WxAuthInfo(com.stardata.starshop2.authcontext.domain.user.WxAuthInfo) WxOpenId(com.stardata.starshop2.authcontext.domain.user.WxOpenId) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest)

Example 5 with WxLoginErrorException

use of com.stardata.starshop2.authcontext.domain.WxLoginErrorException in project starshop by beautautumn.

the class StarshopAuthLoginTests method app_service_should_login_exception_given_new_user_valid_code_but_signature_error.

// 6.3 正确的微信code,且未过期,但用户信息完整性被破坏,要求返回业务失败
@Test
@Transactional
@Rollback(true)
void app_service_should_login_exception_given_new_user_valid_code_but_signature_error() {
    // given: 准备好输入数据
    String code = "081sloll28T8d94nl8nl2hxKhh3slolv";
    String rawData = "{\"nickName\":\"深清秋\",\"gender\":0,\"language\":\"zh_CN\",\"city\":\"\",\"province\":\"\",\"country\":\"\",\"avatarUrl\":\"https://thirdwx.qlogo.cn/mmopen/vi_32/Q0j4TwGTfTKq2CRmib1mpu4hOFYtcIHgAmS7DicCEfYkUHoPmPQn74BXH5GerjoMOxIqib7iafNNBw2ZAicBj6gZGUQ/132\"}";
    String signature = "06846a4ba8b003af5d98fadfaf376a652e5d75d7";
    WxLoginRequest request = new WxLoginRequest();
    request.setCode(code);
    request.setRequestIp("testLoginIp");
    request.setRawData(rawData);
    request.setSignature(signature);
    request.setNickName("testUser1");
    request.setGender(1);
    request.setAvatarUrl("https://www.somehost.com/someAvatar.png");
    request.setCountry("中国");
    request.setProvince("江苏");
    request.setCity("南京");
    request.setLanguage("zh_CN");
    try {
        // when: 执行authAppService.loginByWx方法调用
        UserResponse response = authAppService.loginByWx(request);
        // 如下这些应该不被执行到
        assertNotNull(response);
        assertNotNull(response.getId());
        assertNotNull(response.getToken());
        User loadedUser = userRepository.instanceOf(LongIdentity.from(response.getId()));
        User frontUser = User.of("testUser1", 1).avatarUrl("https://www.somehost.com/someAvatar.png").country("中国").province("江苏").city("南京").language("zh_CN");
        assertTrue(isSameMiniAppUserInfo(loadedUser, frontUser));
        UserToken userToken = loadedUser.currentToken();
        LocalDateTime now = LocalDateTime.now();
        userToken.getExpireTime().isAfter(now.minusMinutes(1).plusHours(72));
    } catch (WxLoginErrorException e) {
        // then: 抛出"Checking userinfo integrity failed"异常
        assertNotNull(e);
        assertEquals(e.getErrCode(), -99);
    }
}
Also used : UserResponse(com.stardata.starshop2.authcontext.pl.UserResponse) LocalDateTime(java.time.LocalDateTime) User(com.stardata.starshop2.authcontext.domain.user.User) WxLoginRequest(com.stardata.starshop2.authcontext.pl.WxLoginRequest) UserToken(com.stardata.starshop2.authcontext.domain.user.UserToken) Test(org.junit.jupiter.api.Test) SpringBootTest(org.springframework.boot.test.context.SpringBootTest) Rollback(org.springframework.test.annotation.Rollback) Transactional(org.springframework.transaction.annotation.Transactional)

Aggregations

Test (org.junit.jupiter.api.Test)7 SpringBootTest (org.springframework.boot.test.context.SpringBootTest)7 User (com.stardata.starshop2.authcontext.domain.user.User)4 UserToken (com.stardata.starshop2.authcontext.domain.user.UserToken)4 WxAuthInfo (com.stardata.starshop2.authcontext.domain.user.WxAuthInfo)4 WxOpenId (com.stardata.starshop2.authcontext.domain.user.WxOpenId)4 Rollback (org.springframework.test.annotation.Rollback)4 Transactional (org.springframework.transaction.annotation.Transactional)4 UserResponse (com.stardata.starshop2.authcontext.pl.UserResponse)3 WxLoginRequest (com.stardata.starshop2.authcontext.pl.WxLoginRequest)3 LocalDateTime (java.time.LocalDateTime)3 WxMaService (cn.binarywang.wx.miniapp.api.WxMaService)1 WxMaJscode2SessionResult (cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult)1 WxLoginErrorException (com.stardata.starshop2.authcontext.domain.WxLoginErrorException)1 WxError (me.chanjar.weixin.common.error.WxError)1 WxErrorException (me.chanjar.weixin.common.error.WxErrorException)1