Browse Source

修改认证代码

zhumin 8 months ago
parent
commit
6c7ea7594c

+ 8 - 0
raycos_common/src/main/java/com/raycos/raycoscommon/Internal/datacenterapi/TbStoreInfo.java

@@ -48,6 +48,14 @@ public class TbStoreInfo {
      */
     private String   state;
 
+    /**
+     *  授权时应用程序生成的  (UUID) 值。
+     */
+    private String uuid;
 
+    /**
+     * 区域
+     */
+    private String region;
 
 }

+ 7 - 0
raycos_datacenter_api/src/main/java/com/raycos/raycosdatacenterapi/amzorder/util/Constant.java

@@ -1,6 +1,13 @@
 package com.raycos.raycosdatacenterapi.amzorder.util;
 
 public class Constant {
+
+    public final static String APPLICATION_ID = "amzn1.sp.solution.b50697a2-e3d3-47e0-8de3-9ae03fbdcd9b";
+
+    public final static String CLIENTID = "amzn1.application-oa2-client.2d001c4aeaaf438f98ee0b07070c1cf8";
+    public final static String CLIENTSECRET="amzn1.oa2-cs.v1.52b13f4ce04e83046b3426b620b6bfb94fd3ce61c815c6f68858af69d0ccbe54";
+
+    public final static String TOKENURLAMZ = "https://api.amazon.com/auth/o2/token";
     public static final String IAMUSERKEY = "AKIAQEIP3EPRYQUHPOEC";
     public static final String IAMUSERSECRET = "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";
     public static String TERMINATIONSTRING = "aws4_request";

+ 7 - 0
raycos_datacenter_api/src/main/java/com/raycos/raycosdatacenterapi/authorize/AmzTokenService.java

@@ -2,9 +2,11 @@ package com.raycos.raycosdatacenterapi.authorize;
 
 import com.raycos.raycoscommon.Internal.Result;
 import com.raycos.raycoscommon.Internal.datacenterapi.TbAmzToken;
+import com.raycos.raycoscommon.Internal.datacenterapi.TbStoreInfo;
 import com.raycos.raycoscommon.Internal.datacenterapi.vo.GetAmzTokenByLwaCodeVo;
 
 import java.util.List;
+import java.util.Map;
 
 public interface AmzTokenService {
 
@@ -28,5 +30,10 @@ public interface AmzTokenService {
      */
     Result<String> getAmzTokenByLwaCode (GetAmzTokenByLwaCodeVo  gatblcVo )throws Exception;
 
+    /**
+     * mzhu
+     * 新方法用于保存token,保存长短链接
+     */
+    public void saveAmzToken(Map tbStoreInfo)throws Exception;
 
 }

+ 6 - 0
raycos_datacenter_api/src/main/java/com/raycos/raycosdatacenterapi/authorize/StoreInfoController.java

@@ -15,12 +15,15 @@ import java.util.List;
 @RestController
 @Slf4j
 @RequestMapping("/erp/amzstore")
+@CrossOrigin
 public class StoreInfoController {
 
 
     @Autowired
     private StoreInfoService storeInfoService;
 
+    @Autowired
+    private AmzTokenService amzTokenService;
 
     /**
      * 新增店铺信息
@@ -29,11 +32,14 @@ public class StoreInfoController {
      * @return
      */
     @PostMapping("/add")
+    @ResponseBody
     public Result<Long> addStoreInfo(@RequestBody TbStoreInfo tbStoreInfo) {
         Result<Long> rt = new Result<>();
         try {
             TbStoreInfo tsi = storeInfoService.addStoreInfo(tbStoreInfo);
             log.info(" 新增店铺信息 成功 返回 ID =>  " + tsi.getId());
+            //保持token
+           // amzTokenService.saveAmzToken(tbStoreInfo);
             rt.success(tsi.getId());
             rt.setMsg("保存成功!");
         } catch (Exception e) {

+ 32 - 0
raycos_datacenter_api/src/main/java/com/raycos/raycosdatacenterapi/authorize/impl/AmzTokenServiceImpl.java

@@ -3,9 +3,12 @@ package com.raycos.raycosdatacenterapi.authorize.impl;
 import com.alibaba.fastjson2.JSONObject;
 import com.raycos.raycoscommon.Internal.Result;
 import com.raycos.raycoscommon.Internal.datacenterapi.TbAmzToken;
+import com.raycos.raycoscommon.Internal.datacenterapi.TbStoreInfo;
 import com.raycos.raycoscommon.Internal.datacenterapi.vo.GetAmzTokenByLwaCodeVo;
 import com.raycos.raycoscommon.json.TokenAmz;
 import com.raycos.raycoscommon.json.TokenRetAmzJson;
+import com.raycos.raycoscommon.utils.HttpClientUtilRacy;
+import com.raycos.raycosdatacenterapi.amzorder.util.Constant;
 import com.raycos.raycosdatacenterapi.authorize.AmzTokenService;
 import com.raycos.raycosdatacenterapi.mapper.TbAmzTokenMapper;
 import lombok.extern.slf4j.Slf4j;
@@ -19,7 +22,9 @@ import org.springframework.web.client.RestTemplate;
 
 import javax.annotation.Resource;
 import java.time.Instant;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 
 
 @Service
@@ -227,6 +232,33 @@ public class AmzTokenServiceImpl implements AmzTokenService {
     }
 
 
+    /**
+     * 用于保存长短链接
+     * @param tbStoreInfo
+     * @throws Exception
+     */
+    public void saveAmzToken(Map maps)throws Exception{
+        log.info("======start=====saveAmzToken");
+        try{
+            log.info("=====refshtoken====start");
+            Map reqMaps = new HashMap();
+            reqMaps.put("grant_type","authorization_code");
+            String code = (String) maps.get("spapi_oauth_code");
+            reqMaps.put("code",code);
+            reqMaps.put("client_id",Constant.CLIENTID);
+            reqMaps.put("client_secret",Constant.CLIENTSECRET);
+            //用于获取refshtoken
+            String respStr = HttpClientUtilRacy.doPost(Constant.TOKENURLAMZ,reqMaps);
+
+            log.info("=====refshtoken====end====respStr="+respStr);
+
+
+        }catch(Exception e){
+            log.info("saveAmzToken====系统异常",e);
+        }
+
+
+    }
 
 
 }

+ 42 - 0
raycos_datacenter_api/src/main/java/com/raycos/raycosdatacenterapi/config/RaycosUtils.java

@@ -0,0 +1,42 @@
+package com.raycos.raycosdatacenterapi.config;
+
+import org.apache.http.HttpRequest;
+
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+public class RaycosUtils {
+
+    public static Map getParameterMap(HttpServletRequest request) {
+        // 参数Map
+        Map properties = request.getParameterMap();
+        // 返回值Map
+        Map returnMap = new HashMap();
+        Iterator entries = properties.entrySet().iterator();
+        Map.Entry entry;
+        String name = "";
+        String value = "";
+        while (entries.hasNext()) {
+            entry = (Map.Entry) entries.next();
+            name = (String) entry.getKey();
+            Object valueObj = entry.getValue();
+            if(null == valueObj){
+                value = "";
+            }else if(valueObj instanceof String[]){
+                String[] values = (String[])valueObj;
+                for(int i=0;i<values.length;i++){
+                    value = values[i] + ",";
+                }
+                value = value.substring(0, value.length()-1);
+            }else{
+                value = valueObj.toString();
+            }
+            returnMap.put(name, value);
+        }
+        return returnMap;
+    }
+
+}

+ 149 - 132
raycos_datacenter_api/src/main/resources/static/index.html

@@ -1,5 +1,6 @@
 <!DOCTYPE html>
 <html lang="zh-CN">
+
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
@@ -21,160 +22,175 @@
             padding: 0;
             background-color: #f0f2f5;
         }
+
         .container {
             max-width: 870px;
             margin: 0 auto;
             padding: 20px;
         }
+
         .form-container {
             background-color: white;
             border-radius: 8px;
             padding: 40px;
             box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
         }
+
         h1 {
             text-align: center;
             color: #409EFF;
             margin-bottom: 30px;
         }
+
         .el-form-item {
             margin-bottom: 20px;
         }
     </style>
 </head>
+
 <body>
-    <div id="app">
-        <div class="container">
-            <div class="form-container" v-if="submitShow">
-                <h1>{{ '亚马逊沙盒环境授权' }}</h1>
-                <el-form :model="AuthorizationForm" :rules="loginRules" ref="AuthorizationFormRef" label-width="120px">
-                    <el-form-item label="店铺名称:" prop="storeName">
-                        <el-input v-model="AuthorizationForm.storeName" placeholder="卖家自定义,以做区分" clearable></el-input>
-                    </el-form-item>
-                    <el-form-item label="平台账号:" prop="platformAccount">
-                        <el-input v-model="AuthorizationForm.platformAccount" placeholder="卖家平台上的账号" clearable></el-input>
-                    </el-form-item>
-                    <el-form-item label="区域:" prop="region">
-                        <el-select v-model="AuthorizationForm.region" placeholder="请选择区域" @change="handleRegionChange">
-                            <el-option v-for="(item, index) in regionList" :key="index" :label="item.label" :value="item.value"></el-option>
-                        </el-select>
-                    </el-form-item>
-                    <el-form-item label="站点:" prop="site">
-                        <el-checkbox v-model="AuthorizationForm.checkAll" @change="handleCheckAllChange">全选</el-checkbox>
-                        <div style="margin: 15px 0"></div>
-                        <el-checkbox-group v-model="AuthorizationForm.site" @change="handleCheckedCitiesChange">
-                            <el-checkbox v-for="city in cityOptions" :label="city" :key="city">{{ city }}</el-checkbox>
-                        </el-checkbox-group>
-                    </el-form-item>
-                    <el-form-item label="店铺类型:" prop="storeType">
-                        <el-radio-group v-model="AuthorizationForm.storeType">
-                            <el-radio label="1">跨境</el-radio>
-                            <el-radio label="2">本土</el-radio>
-                        </el-radio-group>
-                    </el-form-item>
-                    <el-form-item label="店铺模式:" prop="storeModel">
-                        <el-checkbox-group v-model="AuthorizationForm.storeModel">
-                            <el-checkbox label="1">FBM</el-checkbox>
-                            <el-checkbox label="2">FBA</el-checkbox>
-                        </el-checkbox-group>
-                    </el-form-item>
-                    <el-form-item>
-                        <el-button type="primary" :loading="loading"  @click="submit()">确定</el-button>
-                    </el-form-item>
-                </el-form>
-            </div>
-            <div class="form-container" v-else>
-                <h1>{{ '操作成功!' }}</h1>
-            </div>
+<div id="app">
+    <div class="container">
+        <div class="form-container" v-if="submitShow">
+            <h1>{{ '亚马逊沙盒环境授权' }}</h1>
+            <el-form :model="AuthorizationForm" :rules="loginRules" ref="AuthorizationFormRef" label-width="120px">
+                <el-form-item label="店铺名称:" prop="storeName">
+                    <el-input v-model="AuthorizationForm.storeName" placeholder="卖家自定义,以做区分" clearable></el-input>
+                </el-form-item>
+                <el-form-item label="平台账号:" prop="platformAccount">
+                    <el-input v-model="AuthorizationForm.platformAccount" placeholder="卖家平台上的账号"
+                              clearable></el-input>
+                </el-form-item>
+                <el-form-item label="区域:" prop="region">
+                    <el-select v-model="AuthorizationForm.region" placeholder="请选择区域" @change="handleRegionChange">
+                        <el-option v-for="(item, index) in regionList" :key="index" :label="item.label"
+                                   :value="item.value"></el-option>
+                    </el-select>
+                </el-form-item>
+                <el-form-item label="站点:" prop="site">
+                    <el-checkbox v-model="AuthorizationForm.checkAll"
+                                 @change="handleCheckAllChange">全选</el-checkbox>
+                    <div style="margin: 15px 0"></div>
+                    <el-checkbox-group v-model="AuthorizationForm.site" @change="handleCheckedCitiesChange">
+                        <el-checkbox v-for="city in cityOptions" :label="city" :key="city">{{ city }}</el-checkbox>
+                    </el-checkbox-group>
+                </el-form-item>
+                <el-form-item label="店铺类型:" prop="storeType">
+                    <el-radio-group v-model="AuthorizationForm.storeType">
+                        <el-radio label="1">跨境</el-radio>
+                        <el-radio label="2">本土</el-radio>
+                    </el-radio-group>
+                </el-form-item>
+                <el-form-item label="店铺模式:" prop="storeModel">
+                    <el-checkbox-group v-model="AuthorizationForm.storeModel">
+                        <el-checkbox label="1">FBM</el-checkbox>
+                        <el-checkbox label="2">FBA</el-checkbox>
+                    </el-checkbox-group>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" :loading="loading" @click="submit()">确定</el-button>
+                </el-form-item>
+            </el-form>
+        </div>
+        <div class="form-container" v-else>
+            <h1>{{ '操作成功!' }}</h1>
         </div>
     </div>
+</div>
 
-    <script>
-        const { createApp, ref, onMounted } = Vue;
-        const { ElMessage } = ElementPlus;
-
-        const app = createApp({
-            setup() {
-                const AuthorizationForm = ref({
-                    storeName: '',
-                    platformAccount: '',
-                    region: 'https://sellercentral.amazon.com',
-                    site: ['美国', '加拿大', '墨西哥', '巴西'],
-                    storeType: '1',
-                    storeModel: ['1'],
-                    checkAll: false,
-                });
-                const submitShow = ref(true)
-                const regionList = ref([
-                    { label: '美国', value: 'https://sellercentral.amazon.com', cities: ['美国', '加拿大', '墨西哥', '巴西'] },
-                    { label: '欧洲', value: 'https://sellercentral-europe.amazon.com ', cities: ['英国', '德国', '法国', '意大利', '西班牙'] },
-                    { label: '远东', value: 'https://sellercentral.amazon.co.jp', cities: ['日本', '澳大利亚', '新加坡'] },
-                ]);
-
-                const loading = ref(false);
-                const loginRules = ref({
-                    storeName: [{ required: true, message: '请输入店铺名称', trigger: 'blur' }],
-                    platformAccount: [{ required: true, message: '请输入平台账号', trigger: 'blur' }],
-                    region: [{ required: true, message: '请选择区域', trigger: 'change' }],
-                    site: [{ type: 'array', required: true, message: '请至少选择一个站点', trigger: 'change' }],
-                    storeType: [{ required: true, message: '请选择店铺类型', trigger: 'change' }],
-                    storeModel: [{ type: 'array', required: true, message: '请至少选择一个店铺模式', trigger: 'change' }],
-                });
-                const cityOptions = ref([]);
-                const AuthorizationFormRef = ref(null);
-
-                onMounted(() => {
-                    handleRegionChange(AuthorizationForm.value.region);
-                });
-
-                const handleRegionChange = (value) => {
-                    const selectedRegion = regionList.value.find((region) => region.value === value);
-                    if (selectedRegion) {
-                        cityOptions.value = selectedRegion.cities;
-                        AuthorizationForm.value.site = [...selectedRegion.cities];
-                        AuthorizationForm.value.checkAll = true;
-                    } else {
-                        cityOptions.value = [];
-                        AuthorizationForm.value.site = [];
-                        AuthorizationForm.value.checkAll = false;
-                    }
-                };
+<script>
+    const { createApp, ref, onMounted } = Vue;
+    const { ElMessage } = ElementPlus;
+
+    const app = createApp({
+        setup() {
+            const AuthorizationForm = ref({
+                storeName: '',
+                platformAccount: '',
+                region: 'https://sellercentral.amazon.com',
+                site: ['美国', '加拿大', '墨西哥', '巴西'],
+                storeType: '1',
+                storeModel: ['1'],
+                checkAll: false,
+                companyId: '',
+            });
+            const submitShow = ref(true)
+            const regionList = ref([
+                { label: '美国', value: 'https://sellercentral.amazon.com', cities: ['美国', '加拿大', '墨西哥', '巴西'] },
+                { label: '欧洲', value: 'https://sellercentral-europe.amazon.com ', cities: ['英国', '德国', '法国', '意大利', '西班牙'] },
+                { label: '远东', value: 'https://sellercentral.amazon.co.jp', cities: ['日本', '澳大利亚', '新加坡'] },
+            ]);
+
+            const loading = ref(false);
+            const loginRules = ref({
+                storeName: [{ required: true, message: '请输入店铺名称', trigger: 'blur' }],
+                platformAccount: [{ required: true, message: '请输入平台账号', trigger: 'blur' }],
+                region: [{ required: true, message: '请选择区域', trigger: 'change' }],
+                site: [{ type: 'array', required: true, message: '请至少选择一个站点', trigger: 'change' }],
+                storeType: [{ required: true, message: '请选择店铺类型', trigger: 'change' }],
+                storeModel: [{ type: 'array', required: true, message: '请至少选择一个店铺模式', trigger: 'change' }],
+            });
+            const cityOptions = ref([]);
+            const AuthorizationFormRef = ref(null);
+
+            onMounted(() => {
+                handleRegionChange(AuthorizationForm.value.region);
+                AuthorizationForm.value.companyId = getCompanyIdFromUrl();
+            });
+            const getCompanyIdFromUrl = () => {
+                const urlParams = new URLSearchParams(window.location.search);
+
+                return urlParams.get('companyId') || '';
+            };
+            const handleRegionChange = (value) => {
+                const selectedRegion = regionList.value.find((region) => region.value === value);
+                if (selectedRegion) {
+                    cityOptions.value = selectedRegion.cities;
+                    AuthorizationForm.value.site = [...selectedRegion.cities];
+                    AuthorizationForm.value.checkAll = true;
+                } else {
+                    cityOptions.value = [];
+                    AuthorizationForm.value.site = [];
+                    AuthorizationForm.value.checkAll = false;
+                }
+            };
 
-                const handleCheckAllChange = (val) => {
-                    AuthorizationForm.value.site = val ? cityOptions.value : [];
-                };
+            const handleCheckAllChange = (val) => {
+                AuthorizationForm.value.site = val ? cityOptions.value : [];
+            };
 
-                const handleCheckedCitiesChange = (value) => {
-                    const checkedCount = value.length;
-                    AuthorizationForm.value.checkAll = checkedCount === cityOptions.value.length;
-                };
+            const handleCheckedCitiesChange = (value) => {
+                const checkedCount = value.length;
+                AuthorizationForm.value.checkAll = checkedCount === cityOptions.value.length;
+            };
 
-                const submit = async () => {
+            const submit = async () => {
                 if (!AuthorizationFormRef.value) return;
 
                 try {
                     await AuthorizationFormRef.value.validate();
-                    
+
                     loading.value = true;
                     const uuid = self.crypto.randomUUID();
 
                     const formData = {
                         ...AuthorizationForm.value,
                         uuid: uuid,
-                        site: AuthorizationForm.value.site.join(','),
+                        stationsIdStr: AuthorizationForm.value.site.join(','),
                         storeModel: AuthorizationForm.value.storeModel.join(','),
                     };
-                    const response = await axios.post('https://apisaas.raycos.net/erp/store/add', formData, {
+                    debugger;
+                    const response = await axios.post('http://127.0.0.1:18082/erp/amzstore/add', formData, {
                         headers: {
                             'Content-Type': 'application/json',
                         },
                     });
-
-                    if (response.data.code==200) {
+                    debugger;
+                    if (response.data.code == 200) {
                         const authUrl = generateAuthUrl(formData.region, uuid);
                         window.open(authUrl, '_blank');
                         ElMessage.success('提交成功');
-                        submitShow.value=false
+                        submitShow.value = false
                     } else {
                         ElMessage.error(response.data.msg || '提交失败');
                     }
@@ -192,30 +208,31 @@
                 }
             };
 
-                const generateAuthUrl = (region, uuid) => {
-                    const baseUrl = region;
-                    const applicationId = 'amzn1.sp.solution.b50697a2-e3d3-47e0-8de3-9ae03fbdcd9b';
-                    return `${baseUrl}/apps/authorize/consent?application_id=${applicationId}&state=${uuid}&version=beta`;
-                };
-
-                return {
-                    submitShow,
-                    AuthorizationForm,
-                    regionList,
-                    loading,
-                    loginRules,
-                    cityOptions,
-                    AuthorizationFormRef,
-                    handleRegionChange,
-                    handleCheckAllChange,
-                    handleCheckedCitiesChange,
-                    submit,
-                };
-            }
-        });
-
-        app.use(ElementPlus);
-        app.mount('#app');
-    </script>
+            const generateAuthUrl = (region, uuid) => {
+                const baseUrl = region;
+                const applicationId = 'amzn1.sp.solution.b50697a2-e3d3-47e0-8de3-9ae03fbdcd9b';
+                return `${baseUrl}/apps/authorize/consent?application_id=${applicationId}&state=${uuid}&version=beta`;
+            };
+
+            return {
+                submitShow,
+                AuthorizationForm,
+                regionList,
+                loading,
+                loginRules,
+                cityOptions,
+                AuthorizationFormRef,
+                handleRegionChange,
+                handleCheckAllChange,
+                handleCheckedCitiesChange,
+                submit,
+            };
+        }
+    });
+
+    app.use(ElementPlus);
+    app.mount('#app');
+</script>
 </body>
+
 </html>