Jelajahi Sumber

二维码unoin

小么熊🐻 1 tahun lalu
induk
melakukan
687a8ea433

+ 22 - 3
nbjk-admin/src/main/java/com/miaxis/app/controller/user/UserInfoController.java

@@ -10,7 +10,8 @@ import com.miaxis.common.utils.StringUtils;
 import com.miaxis.user.service.IUserInfoService;
 import com.miaxis.user.vo.UserVipInfoVO;
 import com.miaxis.wx.dto.WxGetPhoneDTO;
-import com.miaxis.wx.service.IWxLocalService;
+import com.miaxis.wx.dto.WxacodeUnlimitDTO;
+import com.miaxis.wx.service.IWxXcxService;
 import com.miaxis.wx.service.IWxService;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -40,7 +41,7 @@ public class UserInfoController extends BaseController {
     private IUserInfoService userInfoService;
 
     @Autowired
-    private IWxLocalService wxLocalService;
+    private IWxXcxService xcxService;
 
     @Autowired
     private IWxService wxService;
@@ -104,7 +105,7 @@ public class UserInfoController extends BaseController {
     @GetMapping(value = "/getPhoneByCode")
     @ApiOperation("根据code获取手机号")
     public Response getPhoneByCode(String code) {
-        String accsesToken = wxLocalService.getLocalXcxToken();
+        String accsesToken = xcxService.getLocalXcxToken();
         WxGetPhoneDTO wxGetPhoneDTO = new WxGetPhoneDTO();
         wxGetPhoneDTO.setCode(code);
         String resultStr = wxService.getUserPhoneNumber(accsesToken, wxGetPhoneDTO);
@@ -121,6 +122,24 @@ public class UserInfoController extends BaseController {
 
     }
 
+    /**
+     * 获取个人小程序二维码
+     */
+    @GetMapping(value = "/getWxacodeunLimit")
+    @ApiOperation("获取个人小程序二维码")
+    public Response getWxacodeunLimit() {
+        UserInfo userInfo = SecurityUtils.getLoginUser().getStudent();
+        String token = xcxService.getLocalXcxToken();
+        WxacodeUnlimitDTO unlimitDTO = new WxacodeUnlimitDTO();
+        unlimitDTO.setScene(userInfo.getUnionId());
+        unlimitDTO.setEnv_version("trial");
+        byte[] data = wxService.getWxacodeunLimit(token,unlimitDTO);
+        String base64Str =  Base64.getEncoder().encodeToString(data);
+        System.out.println(base64Str);
+        return Response.success(base64Str);
+    }
+
+
 
     private String getSign(Integer isVip, String unionId) throws Exception {
         String str = unionId + isVip;

+ 1 - 0
nbjk-admin/src/main/resources/application-dev.yml

@@ -109,6 +109,7 @@ xcx:
     appId: wx97bbc22daac9362a
     appSecret: e67435002c220ef2f69a1b43508c61ec
 
+
 # 微信支付
 wxpay:
     v3url: https://api.mch.weixin.qq.com/v3/pay/transactions/app

+ 51 - 0
nbjk-admin/src/test/java/com/miaxis/test/WxXcxTest.java

@@ -0,0 +1,51 @@
+package com.miaxis.test;
+
+import com.miaxis.NbjkApplication;
+import com.miaxis.wx.dto.WxacodeUnlimitDTO;
+import com.miaxis.wx.service.IWxXcxService;
+import com.miaxis.wx.service.IWxService;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.test.context.junit4.SpringRunner;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.Base64;
+
+@SpringBootTest(classes = NbjkApplication.class)
+@RunWith(SpringRunner.class)
+public class WxXcxTest {
+
+    @Autowired
+    private IWxService wxService;
+
+    @Autowired
+    private IWxXcxService xcxService;
+
+
+
+    @Test
+    public void getLocation() throws IOException {
+        FileOutputStream out = new FileOutputStream("D:\\output.png");
+        String token = xcxService.getLocalXcxToken();
+        String scene = "o_cXm6G-ZXGwd-W3VT9B4RhE-HhE";
+        WxacodeUnlimitDTO unlimitDTO = new WxacodeUnlimitDTO();
+        unlimitDTO.setScene(scene);
+        unlimitDTO.setEnv_version("trial");
+
+        //String reuslt =wxService.getWxacodeunLimit(token,unlimitDTO);
+        //System.out.println(reuslt);
+
+        byte[] data = wxService.getWxacodeunLimit(token,unlimitDTO);
+        out.write(data);
+        String base64Str =  Base64.getEncoder().encodeToString(data);
+        System.out.println(base64Str);
+
+    }
+
+
+}
+

+ 13 - 0
nbjk-service/src/main/java/com/miaxis/wx/dto/WxStableTokenDTO.java

@@ -0,0 +1,13 @@
+package com.miaxis.wx.dto;
+
+import lombok.Data;
+
+@Data
+public class WxStableTokenDTO {
+
+
+    private String grant_type;
+    private String appid;
+    private String secret;
+
+}

+ 14 - 0
nbjk-service/src/main/java/com/miaxis/wx/dto/WxacodeUnlimitDTO.java

@@ -0,0 +1,14 @@
+package com.miaxis.wx.dto;
+
+import lombok.Data;
+
+@Data
+public class WxacodeUnlimitDTO {
+
+
+    private String scene;    // 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
+
+
+    private String env_version;  //要打开的小程序版本。正式版为 "release",体验版为 "trial",开发版为 "develop"。默认是正式版。
+
+}

+ 16 - 5
nbjk-service/src/main/java/com/miaxis/wx/service/IWxService.java

@@ -2,17 +2,13 @@ package com.miaxis.wx.service;
 
 
 import com.miaxis.common.config.FeignConfig;
-import com.miaxis.wx.dto.WxGetPhoneDTO;
-import com.miaxis.wx.dto.WxMaterial;
-import com.miaxis.wx.dto.WxMaterialList;
+import com.miaxis.wx.dto.*;
 import org.springframework.cloud.openfeign.FeignClient;
 import org.springframework.stereotype.Component;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestParam;
 
-import java.util.Map;
-
 /**
  *
  * 微信接口
@@ -58,6 +54,13 @@ public interface IWxService {
             @RequestParam("secret") String secret
     );
 
+    /**
+     * 获取稳定版接口调用凭据(小程序)
+     */
+    @PostMapping(value = "/cgi-bin/stable_token")
+    String getXcxStableToken(WxStableTokenDTO wxStableTokenDTO);
+
+
     /**
      * 获取手机号 (小程序)
      * @param access_token
@@ -70,6 +73,14 @@ public interface IWxService {
             WxGetPhoneDTO wxGetPhoneDTO
     );
 
+    /**
+     * 获取不限制的小程序码
+     * @param access_token
+     * @return
+     */
+    @PostMapping(value = "/wxa/getwxacodeunlimit")
+    byte[] getWxacodeunLimit(@RequestParam("access_token") String access_token, WxacodeUnlimitDTO wxacodeUnlimitDTO);
+
 
     /**
      *  小程序获取openid

+ 1 - 1
nbjk-service/src/main/java/com/miaxis/wx/service/IWxLocalService.java → nbjk-service/src/main/java/com/miaxis/wx/service/IWxXcxService.java

@@ -4,7 +4,7 @@ package com.miaxis.wx.service;
  *
  * 微信本地接口
  */
-public interface IWxLocalService {
+public interface IWxXcxService {
 
     String getLocalXcxToken();
 

+ 10 - 4
nbjk-service/src/main/java/com/miaxis/wx/service/impl/WxLocalServiceImpl.java → nbjk-service/src/main/java/com/miaxis/wx/service/impl/WxXcxServiceImpl.java

@@ -3,7 +3,8 @@ package com.miaxis.wx.service.impl;
 import com.alibaba.fastjson.JSONObject;
 import com.miaxis.common.constant.Constants;
 import com.miaxis.common.core.redis.RedisCache;
-import com.miaxis.wx.service.IWxLocalService;
+import com.miaxis.wx.dto.WxStableTokenDTO;
+import com.miaxis.wx.service.IWxXcxService;
 import com.miaxis.wx.service.IWxService;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -16,7 +17,7 @@ import java.util.concurrent.TimeUnit;
 @Service
 @Slf4j
 @RequiredArgsConstructor
-public class WxLocalServiceImpl implements IWxLocalService {
+public class WxXcxServiceImpl implements IWxXcxService {
 
     @Autowired
     private RedisCache redisCache;
@@ -35,10 +36,15 @@ public class WxLocalServiceImpl implements IWxLocalService {
         Object cacheXcxToken= redisCache.getCacheObject(Constants.XCX_MESSAGE_TOKEN);
         //如果过期,重新获取并保存到redis
         if (cacheXcxToken == null){
-            String result = wxService.getXcxToken("client_credential",xcxAppId,appSecret);
+            WxStableTokenDTO stableTokenDTO = new WxStableTokenDTO();
+            stableTokenDTO.setGrant_type("client_credential");
+            stableTokenDTO.setAppid(xcxAppId);
+            stableTokenDTO.setSecret(appSecret);
+
+            String result = wxService.getXcxStableToken(stableTokenDTO);
             JSONObject json = JSONObject.parseObject(result);
             String token = json.getString("access_token");
-            int expiresIn = json.getIntValue("expires_in")-1800;
+            int expiresIn = json.getIntValue("expires_in");
             redisCache.setCacheObject(Constants.XCX_MESSAGE_TOKEN,token,expiresIn, TimeUnit.SECONDS);
             return token;
         }else {