diff --git a/pom.xml b/pom.xml
index 390b095a9..92ba279d1 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
4.0.0
manage
- 1.3.51
+ 1.3.52
UTF-8
1.8.0
diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailRSvcService.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailRSvcService.java
index 61426d124..62935b725 100644
--- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailRSvcService.java
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/RetailRSvcService.java
@@ -14,5 +14,7 @@ public interface RetailRSvcService {
JSONObject enterIntoServiceBySourceCode(String sourceCode, JSONObject params);
+ JSONObject setUpShopBySourceCode(String sourceCode, JSONObject params);
+
JSONObject getGeekSsoTokenInfo(String sourceCode, String clientMoniker);
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java
index 2722522d1..14bea82e8 100644
--- a/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/core/impls/RetailRSvcServiceImpl.java
@@ -4,6 +4,7 @@ import au.com.royalpay.payment.core.exceptions.InvalidShortIdException;
import au.com.royalpay.payment.manage.appclient.beans.RSvcMchBean;
import au.com.royalpay.payment.manage.appclient.core.RetailRSvcService;
import au.com.royalpay.payment.manage.appclient.extend.JWTUtil;
+import au.com.royalpay.payment.manage.mappers.system.ClientConfigMapper;
import au.com.royalpay.payment.manage.mappers.system.ClientServicesApplyMapper;
import au.com.royalpay.payment.manage.merchants.core.ClientManager;
import au.com.royalpay.payment.tools.codec.AESCrypt;
@@ -38,6 +39,8 @@ public class RetailRSvcServiceImpl implements RetailRSvcService {
private CommonIncrementalChannelMapper commonIncrementalChannelMapper;
@Resource
private ClientServicesApplyMapper clientServicesApplyMapper;
+ @Resource
+ private ClientConfigMapper clientConfigMapper;
@Override
public JSONObject findMchInfoBySourceCode(JSONObject device, String sourceCode) {
@@ -128,6 +131,41 @@ public class RetailRSvcServiceImpl implements RetailRSvcService {
return result;
}
+ @Override
+ public JSONObject setUpShopBySourceCode(String sourceCode, JSONObject params) {
+ JSONObject result = new JSONObject();
+ JSONObject svcInfo = commonIncrementalChannelMapper.findIncreamentalChannelBySourceCode(sourceCode);
+ try {
+ if (svcInfo == null || StringUtils.isEmpty(svcInfo.getString("channel_pub_key"))
+ || StringUtils.isEmpty(svcInfo.getString("platform_pub_key")) || StringUtils.isEmpty("platform_pri_key")) {
+ throw new BadRequestException("this channel config is wrong");
+ }
+ Key key = AESCrypt.fromKeyString(Base64.decodeBase64(params.getString("nonce_str")));
+ String signa = params.getString("sign");
+ params.remove("sign");
+ params = JSONObject.parseObject(JSON.toJSONString(params), Feature.OrderedField);
+ boolean checkSign = SignUtils.validSign(params.toJSONString(), signa, svcInfo.getString("channel_pub_key"));
+ if (!checkSign) {
+ throw new BadRequestException("sign is wrong");
+ }
+ String clientMoniker = decData(params.getString("partnerCode"), key, svcInfo.getString("platform_pri_key"));
+ logger.debug("{} new shop set up :{}", clientMoniker,params.toJSONString());
+ JSONObject client = clientManager.getClientInfoByMoniker(clientMoniker);
+ if (client == null) {
+ throw new InvalidShortIdException();
+ }
+ JSONObject clientConfig = clientConfigMapper.find(client.getIntValue("client_id"));
+ clientConfig.put("geek_shop_status", 1);
+ clientConfigMapper.update(clientConfig);
+ result.put("result_status", "SUCCESS");
+ } catch (Exception e) {
+ logger.error("set up geek shop fail:{} - {}",sourceCode,e.getMessage());
+ result.put("result_status", "SYSTEMERROR");
+ result.put("result_msg", e.getMessage());
+ }
+ return result;
+ }
+
@Override
public JSONObject getGeekSsoTokenInfo(String sourceCode, String clientMoniker) {
JSONObject svcInfo = commonIncrementalChannelMapper.findIncreamentalChannelBySourceCode(sourceCode);
diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java
index b5777a7ee..0919e7b5a 100644
--- a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RetailAppController.java
@@ -33,7 +33,6 @@ import au.com.royalpay.payment.tools.exceptions.BadRequestException;
import au.com.royalpay.payment.tools.exceptions.ForbiddenException;
import au.com.royalpay.payment.tools.http.HttpUtils;
import au.com.royalpay.payment.tools.merchants.beans.QRCodeConfig;
-import au.com.royalpay.payment.tools.merchants.beans.UpdateSurchargeDTO;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.time.DateUtils;
@@ -423,8 +422,9 @@ public class RetailAppController {
}
@GetMapping("/partner_signin_app_qrcode/{codeId}")
- public void partnerAppSigninViaQRCode(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable String codeId) {
- signInStatusManager.clientQRCodeAppSignIn(device, codeId);
+ public void partnerAppSigninViaQRCode(@ModelAttribute(CommonConsts.RETAIL_DEVICE) JSONObject device, @PathVariable String codeId,
+ @RequestParam(required = false) String source) {
+ signInStatusManager.clientQRCodeAppSignIn(device, codeId, source);
}
/* 优惠券Begin */
diff --git a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RsvcServiceController.java b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RsvcServiceController.java
index 8608a502a..73d28f932 100644
--- a/src/main/java/au/com/royalpay/payment/manage/appclient/web/RsvcServiceController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/appclient/web/RsvcServiceController.java
@@ -17,4 +17,9 @@ public class RsvcServiceController {
public JSONObject enterIntoServiceBySourceCode(@PathVariable String source_code, @RequestBody JSONObject params) {
return retailRSvcService.enterIntoServiceBySourceCode(source_code, params);
}
+
+ @PostMapping(value = "/{source_code}/setUpShop")
+ public JSONObject setUpShopBySourceCode(@PathVariable String source_code, @RequestBody JSONObject params) {
+ return retailRSvcService.setUpShopBySourceCode(source_code, params);
+ }
}
diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/core/SignInStatusManager.java b/src/main/java/au/com/royalpay/payment/manage/signin/core/SignInStatusManager.java
index 2dc07fbd0..94ada22e5 100644
--- a/src/main/java/au/com/royalpay/payment/manage/signin/core/SignInStatusManager.java
+++ b/src/main/java/au/com/royalpay/payment/manage/signin/core/SignInStatusManager.java
@@ -56,11 +56,11 @@ public interface SignInStatusManager {
JSONObject newClientAppSignInQRCode();
- void clientQRCodeAppSignIn(JSONObject device, String codeId);
+ void clientQRCodeAppSignIn(JSONObject device, String codeId, String source);
void clientQRCodeWechatSignIn(JSONObject wxUser, String codeId);
- String appQRCodeSignInStatus(String codeId);
+ JSONObject appQRCodeSignInStatus(String codeId);
JSONObject customerQRCode();
diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/SignInStatusManagerImpl.java b/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/SignInStatusManagerImpl.java
index 736d9023c..38e553741 100644
--- a/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/SignInStatusManagerImpl.java
+++ b/src/main/java/au/com/royalpay/payment/manage/signin/core/impls/SignInStatusManagerImpl.java
@@ -4,7 +4,6 @@ import au.com.royalpay.payment.manage.mappers.system.ClientAccountMapper;
import au.com.royalpay.payment.manage.signin.beans.LoginInfo;
import au.com.royalpay.payment.manage.signin.core.SignInAccountService;
import au.com.royalpay.payment.manage.signin.core.SignInStatusManager;
-import au.com.royalpay.payment.tools.connections.mpsupport.MpClient;
import au.com.royalpay.payment.tools.connections.mpsupport.MpClientAppWechatApiProvider;
import au.com.royalpay.payment.tools.env.PlatformEnvironment;
import au.com.royalpay.payment.tools.exceptions.BadRequestException;
@@ -316,7 +315,7 @@ public class SignInStatusManagerImpl implements SignInStatusManager {
}
@Override
- public void clientQRCodeAppSignIn(JSONObject device, String codeId) {
+ public void clientQRCodeAppSignIn(JSONObject device, String codeId, String source) {
getlockRandomCodeId(codeId);
String statusKey = newStatusKey();
JSONObject account = new JSONObject();
@@ -328,6 +327,9 @@ public class SignInStatusManagerImpl implements SignInStatusManager {
}
stringRedisTemplate.boundValueOps(partnerLoginRedisKey(statusKey)).set("" + account.getString("account_id"), 30, TimeUnit.MINUTES);
stringRedisTemplate.boundValueOps(redisPrefix + ":app_qrcode_signin:code:" + codeId).set(statusKey, 1, TimeUnit.MINUTES);
+ if (StringUtils.isNotBlank(source)) {
+ stringRedisTemplate.boundValueOps(redisPrefix + ":app_qrcode_signin_" + source + ":code:" + codeId).set(statusKey, 1, TimeUnit.MINUTES);
+ }
}
@Override
@@ -346,13 +348,20 @@ public class SignInStatusManagerImpl implements SignInStatusManager {
}
@Override
- public String appQRCodeSignInStatus(String codeId) {
+ public JSONObject appQRCodeSignInStatus(String codeId) {
+ JSONObject statusInfo = new JSONObject();
String statusKey = stringRedisTemplate.boundValueOps(redisPrefix + ":app_qrcode_signin:code:" + codeId).get();
if (statusKey == null) {
throw new ForbiddenException("Not signed yet");
}
stringRedisTemplate.delete(redisPrefix + ":app_qrcode_signin:code:" + codeId);
- return statusKey;
+ String source = stringRedisTemplate.boundValueOps(redisPrefix + ":app_qrcode_signin_RYCBSM:code:" + codeId).get();
+ if (source != null) {
+ statusInfo.put("redirect_geek", true);
+ stringRedisTemplate.delete(redisPrefix + ":app_qrcode_signin_RYCBSM:code:" + codeId);
+ }
+ statusInfo.put("status_key", statusKey);
+ return statusInfo;
}
@Override
diff --git a/src/main/java/au/com/royalpay/payment/manage/signin/web/SignInController.java b/src/main/java/au/com/royalpay/payment/manage/signin/web/SignInController.java
index 4be5f282c..732059794 100644
--- a/src/main/java/au/com/royalpay/payment/manage/signin/web/SignInController.java
+++ b/src/main/java/au/com/royalpay/payment/manage/signin/web/SignInController.java
@@ -20,6 +20,7 @@ import au.com.royalpay.payment.tools.permission.enums.ManagerRole;
import au.com.royalpay.payment.tools.permission.wechat.WechatMapping;
import com.alibaba.fastjson.JSONObject;
import com.google.code.kaptcha.Producer;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.ui.Model;
import org.springframework.validation.Errors;
import org.springframework.web.bind.annotation.*;
@@ -315,9 +316,11 @@ public class SignInController {
@GetMapping("/partner_signin_app_qrcode/{codeId}/check")
- public void checkQRCodeAppLoginStatus(@PathVariable String codeId, HttpServletResponse response) {
- String statusKey = signInStatusManager.appQRCodeSignInStatus(codeId);
- HttpUtils.setCookie(response, CommonConsts.PARTNER_STATUS, statusKey);
+ public JSONObject checkQRCodeAppLoginStatus(@PathVariable String codeId, HttpServletResponse response) {
+ JSONObject statusInfo = signInStatusManager.appQRCodeSignInStatus(codeId);
+ HttpUtils.setCookie(response, CommonConsts.PARTNER_STATUS, statusInfo.getString("status_key"));
+ statusInfo.remove("status_key");
+ return statusInfo;
}
@WechatMapping(value = "/partner_signin_qrcode/{codeId}", method = RequestMethod.GET)
@@ -327,13 +330,18 @@ public class SignInController {
}
@GetMapping("/partner_signin_qrcode/verify/{codeId}")
- public void verifyQRCode(@PathVariable String codeId, @RequestHeader("User-Agent") String ua, HttpServletResponse response) throws IOException {
+ public void verifyQRCode(@PathVariable String codeId, @RequestHeader("User-Agent") String ua,
+ HttpServletResponse response, @RequestParam(required = false) String source) throws IOException {
if (ua.toLowerCase().contains("micromessenger")) {
response.sendRedirect("/global/userstatus/partner_signin_qrcode/" + codeId);
return;
}
if (ua.toLowerCase().contains("royalpayclient")) {
- response.sendRedirect("/api/v1.0/retail/app/partner_signin_app_qrcode/" + codeId);
+ if (StringUtils.isNotBlank(source)) {
+ response.sendRedirect("/api/v1.0/retail/app/partner_signin_app_qrcode/" + codeId + "?source=" + source);
+ }else {
+ response.sendRedirect("/api/v1.0/retail/app/partner_signin_app_qrcode/" + codeId);
+ }
return;
}
throw new ForbiddenException("error.not_support_browser");
diff --git a/src/main/ui/login.html b/src/main/ui/login.html
index 432a0a419..d6fa1e212 100644
--- a/src/main/ui/login.html
+++ b/src/main/ui/login.html
@@ -338,8 +338,12 @@
$.ajax({
url: '/global/userstatus/partner_signin_app_qrcode/' + codeId + '/check',
method: 'get',
- success: function () {
- getGeekSsoLoginUrl();
+ success: function (res) {
+ if (res.redirect_geek) {
+ getGeekSsoLoginUrl();
+ }else {
+ location.href = '/index.html';
+ }
},
error: function () {
if ($('#qrdiv').is(":visible")) {
diff --git a/src/main/ui/login_v1.html b/src/main/ui/login_v1.html
index d878eca6d..5e665bf65 100644
--- a/src/main/ui/login_v1.html
+++ b/src/main/ui/login_v1.html
@@ -319,8 +319,12 @@
$.ajax({
url: '/global/userstatus/partner_signin_app_qrcode/' + codeId + '/check',
method: 'get',
- success: function () {
- getGeekSsoLoginUrl();
+ success: function (res) {
+ if (res.redirect_geek) {
+ getGeekSsoLoginUrl();
+ }else {
+ location.href = '/index.html';
+ }
},
error: function () {
if ($('#qrdiv').is(":visible")) {