微信小程序码生成
微信小程序码Java生成
·
一、先上官方文档地址
登录 | 微信开放文档微信开发者平台文档https://developers.weixin.qq.com/miniprogram/dev/api-backend/二、小程序码生成
2.1、获取小程序的APPID和secret
/**
* wx:
* appid: xxxxxxx APPID
* secret: xxxxxx secret
* wxUrl: https://api.weixin.qq.com 微信域名
* getAccessTokenUrl: /cgi-bin/token 登录接口
*/
2.2、直接上代码
package com.maxrocky.service.activity.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.maxrocky.common.tools.exception.ExceptionManager;
import com.maxrocky.common.tools.exception.PhantomException;
import com.maxrocky.common.utils.httpclient.HttpClientUtils;
import com.maxrocky.common.utils.httpclient.HttpResult;
import com.maxrocky.common.utils.json.UrlParamsUtils;
import com.maxrocky.common.utils.sign.SignUtils;
import com.maxrocky.common.utils.uuid.UUIDUtils;
import com.maxrocky.service.activity.WechatAppletService;
import com.maxrocky.service.activity.publiccode.PublicCodeActionInfo;
import com.maxrocky.service.activity.publiccode.PublicCodeBase;
import com.maxrocky.service.activity.publiccode.PublicCodeParam;
import com.maxrocky.service.activity.publiccode.PublicCodeScene;
import lombok.extern.log4j.Log4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
/**
* @author xxxx
* @date 2021/10/25 10:59
* 微信小程序服务
*/
@Service
@Log4j
public class WechatAppletServiceImpl implements WechatAppletService {
@Value("${wx.wxUrl}")
private String url;
@Value("${wx.appid}")
private String appid;
@Value("${wx.secret}")
private String secret;
//@Value("${wx.applet.grant_type}")
private static final String grant_type="client_credential";
@Value("${wx.getAccessTokenUrl}")
private String getAccessToken;
private static final String getUnlimited="/wxa/getwxacodeunlimit?access_token=";
@Value("${file.rootPath}")
private String rootPath;
@Resource
ExceptionManager exceptionManager;
/**
* 获取小程序token
* @return
*/
@Override
public String getAccessToken() {
String requestUrl=url+getAccessToken+"?grant_type="+grant_type+"&appid="+appid+"&secret="+secret;
HttpResult httpResult = HttpClientUtils.doGet(requestUrl);
String content = httpResult.getContent();
JSONObject jsonObject = JSON.parseObject(content);
String token =(String) jsonObject.get("access_token");
return token;
}
/**
* 获取小程序码
* @return
*/
@Override
public Map<String,String> getUnlimited(String pageUrl, String scene) {
String accessToken = getAccessToken();
Map<String,String> map=new HashMap<>();
// 发送请求参数
String fileName= UUIDUtils.getUUID()+".png";;
String filePath=rootPath+"/" +fileName;
map.put("filePath",filePath);
generateQrCode(filePath,pageUrl,scene,accessToken);
return map;
}
/**
* 生成微信小程序二维码
*
* @param filePath
* 本地生成二维码路径
* @param page
* 当前小程序相对页面 必须是已经发布的小程序存在的页面(否则报错),例如 pages/index/index, 根路径前不要填加 /,不能携带参数(参数请放在scene字段里),如果不填写这个字段,默认跳主页面
* @param scene
* 最大32个可见字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~,其它字符请自行编码为合法字符(因不支持%,中文无法使用 urlencode 处理,请使用其他编码方式)
* @param accessToken
* 接口调用凭证
*/
public void generateQrCode(String filePath, String page, String scene, String accessToken) {
OutputStream os=null;
try {
//调用微信接口生成二维码
URL url = new URL("https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + accessToken);
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
httpURLConnection.setRequestMethod("POST");// 提交模式
// conn.setConnectTimeout(10000);//连接超时 单位毫秒
// conn.setReadTimeout(2000);//读取超时 单位毫秒
// 发送POST请求必须设置如下两行
httpURLConnection.setDoOutput(true);
httpURLConnection.setDoInput(true);
// 获取URLConnection对象对应的输出流
PrintWriter printWriter = new PrintWriter(httpURLConnection.getOutputStream());
// 发送请求参数
JSONObject paramJson = new JSONObject();
//这就是你二维码里携带的参数 String型 名称不可变
if (StringUtils.isEmpty(scene)){
scene="123456789";
}
paramJson.put("scene", scene);
//注意该接口传入的是page而不是path
if (StringUtils.isNotEmpty(page)){
paramJson.put("page", page);
}
//这是设置扫描二维码后跳转的页面
paramJson.put("width", 1280);
paramJson.put("is_hyaline", true);
paramJson.put("auto_color", true);
printWriter.write(paramJson.toString());
// flush输出流的缓冲
printWriter.flush();
//开始获取数据
BufferedInputStream bis = new BufferedInputStream(httpURLConnection.getInputStream());
File fileDir = new File(filePath);
if (!fileDir.getParentFile().exists()) {
fileDir.getParentFile().mkdirs();
}
os = new FileOutputStream(new File(filePath));
int len;
byte[] arr = new byte[1024];
while ((len = bis.read(arr)) != -1) {
os.write(arr, 0, len);
os.flush();
}
os.close();
File file=new File(filePath);
long length = file.length();
if (length<1024){
throw exceptionManager.createByCode("41030");
}
} catch (Exception e) {
if ( e instanceof PhantomException){
//抛出异常信息
throw exceptionManager.createByCode("41030");
}else {
e.printStackTrace();
}
}finally {
if (null!=os){
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)