直接上代码:
工具类MpQrUtils.java,获取accessToken与二维码的输入流:
import javax.servlet.http.HttpServletRequest;
import com.alibaba.fastjson.JSONObject;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.LinkedHashMap;
import java.util.Map;
public class MpQrUtils{
/**
*
* @方法名称 getToken
* @功能描述 <pre>获得accessToken,获取二维码需要</pre>
* @作者 yw
* @创建时间 2020年9月17日 上午11:06:42
* @param appid
* @param secret
* @return
*/
public static String getToken(String appid, String secret) {
try {
Map<String, String> map = new LinkedHashMap<>();
map.put("grant_type", "client_credential");
map.put("appid", appid);//appid 小程序后台获取
map.put("secret", secret);//app秘钥 小程序后台获取
String rt = UrlUtil.sendPost("https://api.weixin.qq.com/cgi-bin/token", map);
JSONObject json = JSONObject.parseObject(rt);
if (json.getString("access_token") != null || json.getString("access_token") != "") {
return json.getString("access_token");
} else {
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
*
* @方法名称 getminiqrQr
* @功能描述 <pre>返回流 以便上传</pre>
* @作者 yw
* @创建时间 2020年9月17日 上午10:53:30
* @param accessToken
* @param userId
* @return
*/
public static InputStream getminiqrQr(String accessToken, Long userId) {
try
{
URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+accessToken);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");//post 必须 post
// 发送POST请求必须设置如下两行
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
// 获取URLConnection对象对应的输出流
PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
// 发送请求参数
JSONObject paramJson = new JSONObject();
paramJson.put("scene","userId=" + userId);//这就是你二维码里携带的参数 String
paramJson.put("page", "pages/index/index"); //这是设置扫描二维码后跳转的页面
printWriter.write(paramJson.toString());
// flush输出流的缓冲
printWriter.flush();
return httpURLConnection.getInputStream();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
}
控制层(为了简洁,直接在这个地方做了上传到oss):请求获取二维码链接
/**
*
* @方法名称 getShareQr
* @功能描述 <pre>获取分享二维码</pre>
* @作者 yw
* @创建时间 2020年9月17日 上午10:32:19
* @param request
* @return
* @throws IOException
*/
@RequestMapping(value="getShareQr",method= RequestMethod.GET)
public ResponseMsg getShareQr( HttpServletRequest request) throws IOException{
AdminUser user = TokenUtils.getCurUser(request);//通过token获得用户
AppUser appuser = appUserService.getUserByAppId(request.getHeader("appid"));//我这里是多个小程序,根据不同的小程序,获取不同的用户密码
String accessToken = CreateQrcore.getToken(appuser.getAppId(), appuser.getAppSecret());
InputStream ips = CreateQrcore.getminiqrQr(accessToken, user.getId());//获取的二维码流数据
String newFileName = "xxxxx".png";//名称自定义
uploadFilePathConfig.ossClient().putObject(uploadFilePathConfig.getBucketName(), newFileName, ips);//上传到oss
String returnUrl = uploadFilePathConfig.getAliyunImgDomain() + newFileName;
return new ResponseMsg(returnUrl);
}