微信小程序码生成

一、先上官方文档地址

登录 | 微信开放文档微信开发者平台文档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();
                }
            }
        }
    }




}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要用Java获取微信小程序码,首先需要使用微信提供的API接口来实现。以下是一种实现方法: 1. 首先,需要引入相关的依赖包和类库,例如使用HttpClient库来发送HTTP请求,使用JSON库来处理返回的JSON数据。 2. 在代码中构建请求URL,将appid和appsecret等参数拼接到URL中,例如: String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=YOUR_APPID&secret=YOUR_SECRET"; 3. 使用HttpClient库发送GET请求,并获取返回的JSON数据,例如: HttpClient httpClient = new HttpClient(); GetMethod getMethod = new GetMethod(url); int statusCode = httpClient.executeMethod(getMethod); if (statusCode == HttpStatus.SC_OK) { String response = getMethod.getResponseBodyAsString(); JSONObject json = new JSONObject(response); String accessToken = json.optString("access_token"); // 这里获取到的accessToken是后续获取小程序码时需要用到的凭证 } 4. 构建获取小程序码的请求URL,将需要的参数拼接到URL中,例如: String codeUrl = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN"; JSONObject requestData = new JSONObject(); requestData.put("scene", "YOUR_SCENE"); requestData.put("page", "YOUR_PAGE"); // 这里的YOUR_SCENE和YOUR_PAGE是你自定义的场景值和小程序页面路径值 5. 使用HttpClient库发送POST请求,并将requestData转换为JSON字符串作为请求的内容,获取小程序码的二进制数据,例如: HttpClient httpClient = new HttpClient(); PostMethod postMethod = new PostMethod(codeUrl); postMethod.setRequestEntity(new StringRequestEntity(requestData.toString(), "application/json", "UTF-8")); int statusCode = httpClient.executeMethod(postMethod); if (statusCode == HttpStatus.SC_OK) { // 获取小程序码的二进制数据 byte[] responseBody = postMethod.getResponseBody(); // 这里可以将responseBody保存为图片或其他适合的格式 } 以上是使用Java获取微信小程序码的一个简单示例,具体操作还可能受微信官方接口的限制,因此在实际应用中还需要根据接口文档进行适当的调整和处理。 ### 回答2: 要通过Java获取微信小程序码,需要使用微信官方提供的开发工具包和API接口。 首先,你需要在微信开放平台上注册一个小程序并获得小程序的唯一标识AppID。 然后,在Java项目中引入相关的开发工具包,例如微信官方提供的Java SDK或第三方封装的SDK。 接下来,通过SDK提供的接口调用微信的API来获取小程序码。你可以使用微信官方提供的CreateWXAQRCode接口,该接口可以生成小程序码的图片或base64编码,并保存在指定的路径。 具体的步骤如下: 1. 创建一个HttpClient对象,并通过HttpPost请求访问微信的API接口。 2. 设置请求的URL为微信的API地址,例如https://api.weixin.qq.com/wxa/getwxacodeunlimit。 3. 设置请求的参数,包括小程序的AppID、Access Token(获取方法见微信开放平台文档)、参数scene(小程序的参数,根据不同的需求进行设置)等。 4. 设置请求的Header信息,包括Content-Type等。 5. 发送请求并获取响应结果。 6. 解析响应结果,判断请求是否成功,如果成功,则从响应结果中提取出小程序码的图片或base64编码,并保存或处理。 需要注意的是,微信小程序码的生成是有一定限制的,例如小程序码的有效期等,你需要根据需要在代码中进行相应的处理。 总结起来,通过上述步骤,你就可以使用Java来获取微信小程序码了。当然,具体的实现细节还需要参考微信开放平台的开发文档和SDK的使用说明。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值