|
|
@@ -4,6 +4,7 @@ import com.alipay.api.AlipayApiException;
|
|
|
import com.alipay.api.AlipayClient;
|
|
|
import com.alipay.api.domain.AlipayFundAuthorizeUniApplyModel;
|
|
|
import com.alipay.api.domain.AlipayFundAuthorizeUniQueryModel;
|
|
|
+import com.alipay.api.domain.BankAuthUserInfo;
|
|
|
import com.alipay.api.request.AlipayFundAuthorizeUniApplyRequest;
|
|
|
import com.alipay.api.request.AlipayFundAuthorizeUniQueryRequest;
|
|
|
import com.alipay.api.response.AlipayFundAuthorizeUniApplyResponse;
|
|
|
@@ -288,10 +289,13 @@ class BatchSubjectServiceTest {
|
|
|
resp.setStatus("AUTHED");
|
|
|
when(alipayClient.certificateExecute(any(AlipayFundAuthorizeUniQueryRequest.class))).thenReturn(resp);
|
|
|
|
|
|
- Map<String, String> result = service.query("A1");
|
|
|
+ Map<String, Object> result = service.query("A1");
|
|
|
|
|
|
assertEquals("AGMT001", result.get("agreement_no"));
|
|
|
assertEquals("AUTHED", result.get("status"));
|
|
|
+ // 响应无 authUserInfo 时返回键不存在(前端判空兜底),open_id 恒为空串
|
|
|
+ assertEquals("", result.get("open_id"));
|
|
|
+ assertFalse(result.containsKey("auth_user_info"));
|
|
|
// 生效授权回写本地: 协议号 + AUTHED
|
|
|
ArgumentCaptor<BatchAuthorizeEntity> cap = ArgumentCaptor.forClass(BatchAuthorizeEntity.class);
|
|
|
verify(batchAuthorizeMapper).updateById(cap.capture());
|
|
|
@@ -299,6 +303,36 @@ class BatchSubjectServiceTest {
|
|
|
assertEquals("AUTHED", cap.getValue().getStatus());
|
|
|
}
|
|
|
|
|
|
+ @Test
|
|
|
+ void query_returnsAuthUserInfoAndOpenId() throws AlipayApiException {
|
|
|
+ // 用户完成授权后支付宝回传授权人信息(BankAuthUserInfo)+ 应用下 openId,需透传给前端渲染
|
|
|
+ mockLocalRecord();
|
|
|
+ AlipayFundAuthorizeUniQueryResponse resp = new AlipayFundAuthorizeUniQueryResponse();
|
|
|
+ resp.setAgreementNo("AGMT001");
|
|
|
+ resp.setStatus("AUTHED");
|
|
|
+ resp.setOpenId("208800000000000000000001");
|
|
|
+ BankAuthUserInfo info = new BankAuthUserInfo();
|
|
|
+ info.setAlipayAccountNo("2088111122223333");
|
|
|
+ info.setAlipayNickName("张三");
|
|
|
+ info.setAlipayOutCardNo("6222000011112222");
|
|
|
+ info.setUserCertNo("310101199001011234");
|
|
|
+ info.setUserName("张三");
|
|
|
+ resp.setAuthUserInfo(info);
|
|
|
+ when(alipayClient.certificateExecute(any(AlipayFundAuthorizeUniQueryRequest.class))).thenReturn(resp);
|
|
|
+
|
|
|
+ Map<String, Object> result = service.query("A1");
|
|
|
+
|
|
|
+ assertEquals("208800000000000000000001", result.get("open_id"));
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ Map<String, String> authInfo = (Map<String, String>) result.get("auth_user_info");
|
|
|
+ assertNotNull(authInfo);
|
|
|
+ assertEquals("2088111122223333", authInfo.get("alipay_account_no"));
|
|
|
+ assertEquals("张三", authInfo.get("alipay_nick_name"));
|
|
|
+ assertEquals("6222000011112222", authInfo.get("alipay_out_card_no"));
|
|
|
+ assertEquals("310101199001011234", authInfo.get("user_cert_no"));
|
|
|
+ assertEquals("张三", authInfo.get("user_name"));
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
void query_unbind_doesNotOverwriteLocalStatus() throws AlipayApiException {
|
|
|
mockLocalRecord();
|
|
|
@@ -307,7 +341,7 @@ class BatchSubjectServiceTest {
|
|
|
resp.setStatus("UNBIND");
|
|
|
when(alipayClient.certificateExecute(any(AlipayFundAuthorizeUniQueryRequest.class))).thenReturn(resp);
|
|
|
|
|
|
- Map<String, String> result = service.query("A1");
|
|
|
+ Map<String, Object> result = service.query("A1");
|
|
|
|
|
|
assertEquals("AGMT001", result.get("agreement_no"));
|
|
|
assertEquals("UNBIND", result.get("status"));
|
|
|
@@ -325,10 +359,13 @@ class BatchSubjectServiceTest {
|
|
|
resp.setMsg("Business Failed");
|
|
|
when(alipayClient.certificateExecute(any(AlipayFundAuthorizeUniQueryRequest.class))).thenReturn(resp);
|
|
|
|
|
|
- Map<String, String> result = service.query("A1");
|
|
|
+ Map<String, Object> result = service.query("A1");
|
|
|
|
|
|
assertEquals("", result.get("agreement_no"));
|
|
|
assertEquals("AUTHING", result.get("status"));
|
|
|
+ // 未授权分支结构一致: open_id 空串 + auth_user_info 空对象,前端无需分支防御
|
|
|
+ assertEquals("", result.get("open_id"));
|
|
|
+ assertEquals(Map.of(), result.get("auth_user_info"));
|
|
|
verify(batchAuthorizeMapper, never()).updateById(any());
|
|
|
}
|
|
|
|