微信小程序生成携带参数的小程序码

具体文档可以看这里:获取携带参数的小程序码

第一步:获取ACCESS_TOKEN

    //获取token的接口地址
    public final static String access_token_url = "https://api.weixin.qq.com/cgi-bin/token?" + "grant_type=client_credential&appid=APPID&secret=APPSECRET";

    /**
     * 获取access_token
     * 
     * @param appid
     * @param appsecret
     * @return
     */
    public String getAccess_token(String appid, String appsecret) {
        try {
            String requestUrl = access_token_url.replace("APPID", appid).replace("APPSECRET", appsecret);
            JSONObject jsonObject = httpRequst(requestUrl, "GET", null);
            return jsonObject.getString("access_token");
        } catch (Exception e) {
            return "errer";
        }
    }

/**
     * 
     * @Title: httpsRequest
     * @Description: 发送请求,返回JSONObject对象
     * @param requestUrl
     * @param requestMethod
     * @param outputStr
     * @return
     * @throws Exception
     */
    public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) throws Exception {
        JSONObject jsonObject = null;
        try {
            // 使用自定义的信任管理器
            TrustManager[] tm = { new X509TrustManager() {
                /**
                 * 检查客户端证书
                 */
                @Override
                public void checkClientTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
                }

                /**
                 * 检查服务器端证书
                 */
                @Override
                public void checkServerTrusted(X509Certificate[] arg0, String arg1) throws CertificateException {
                }

                /**
                 * 返回受信任的X509证书数组
                 */
                @Override
                public X509Certificate[] getAcceptedIssuers() {
                    return null;
                }

            } };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            SSLSocketFactory ssf = sslContext.getSocketFactory();
            // 建立连接
            URL url = new URL(requestUrl);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(ssf);
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 设置请求方式
            conn.setRequestMethod(requestMethod);
            // 当outputStr不为null时,向输出流写数据
            if (null != outputStr) {
                OutputStream outputStream = conn.getOutputStream();
                outputStream.write(outputStr.getBytes("UTF-8"));
                outputStream.close();
            }
            // 获取输入流
            InputStream inputStream = conn.getInputStream();
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
            // 读取响应内容
            StringBuffer buffer = new StringBuffer();
            String str = null;
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            // 关闭资源
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
            conn.disconnect();
            jsonObject = JSONObject.fromObject(buffer.toString());
        } catch (Exception e) {
            throw new Exception("请求/解析失败");
        }
        return jsonObject;
    }

第二步:生成小程序二维码工具类

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.protocol.HTTP;

/**
 * 
 * @ClassName: CreateImgUtil
 * @Description: 生成小程序二维码工具类
 * @author cheng
 * @date 2017年9月13日 上午10:34:59
 */
@SuppressWarnings("deprecation")
public class CreateImgUtil {

    /**
     * 私有化构造函数,防止创建本工具类的实例
     */
    private CreateImgUtil() {
    }

    @SuppressWarnings({ "resource" })
    public static String httpPostWithJSON(String url, String json, String id,String dir) throws Exception {
        String result = null;
        DefaultHttpClient httpClient = new DefaultHttpClient();
        HttpPost httpPost = new HttpPost(url);
        httpPost.addHeader(HTTP.CONTENT_TYPE, "application/json");
        StringEntity se = new StringEntity(json);
        se.setContentType("application/json");
        se.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE, "UTF-8"));
        httpPost.setEntity(se);
        HttpResponse response = httpClient.execute(httpPost);
        if (response != null) {
            HttpEntity resEntity = response.getEntity();
            if (resEntity != null) {
                InputStream instreams = resEntity.getContent();
                File saveFile = new File(dir + id + ".png");
                // 判断这个文件(saveFile)是否存在
                if (!saveFile.getParentFile().exists()) {
                    // 如果不存在就创建这个文件夹
                    saveFile.getParentFile().mkdirs();
                }
                saveToImgByInputStream(instreams, dir, id + ".png");
            }
        }
        httpPost.abort();
        return result;
    }

    /*
     * @param instreams 二进制流
     * 
     * @param imgPath 图片的保存路径
     * 
     * @param imgName 图片的名称
     * 
     * @return 1:保存正常 0:保存失败
     */
    private static int saveToImgByInputStream(InputStream instreams, String imgPath, String imgName) {

        int stateInt = 1;
        if (instreams != null) {
            try {
                File file = new File(imgPath + imgName);// 可以是任何图片格式.jpg,.png等
                FileOutputStream fos = new FileOutputStream(file);

                byte[] b = new byte[1024];
                int nRead = 0;
                while ((nRead = instreams.read(b)) != -1) {
                    fos.write(b, 0, nRead);
                }
                fos.flush();
                fos.close();
            } catch (Exception e) {
                stateInt = 0;
                e.printStackTrace();
            } finally {
                try {
                    instreams.close();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        }
        return stateInt;
    }
}

第三步:生成携带参数的小程序码

// 依据公司信息生成个性化小程序码,返回小程序码名称
    private String createImgByCompanyId(String companyId,String dir) {
        // 获取token
        String appid = "wx8b3f3454sdfsdfsdgdfgdf4tr3402c2d7728";
        String appsecret = "c35b5a0b94ea1ece9c0rwerwerwer34wetwetre390468b3efed7";
        String token = getAccess_token(appid, appsecret);
        // 生成小程序码接口url
        String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN".replace("ACCESS_TOKEN",
                token);
        // 二维码中信息
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("path", "pages/index/index");// 你二维码中跳向的页面
        map.put("scene", companyId);// 携带参数
        String json = JSONUtils.toJSONString(map);
        // 生成二维码
        try {
            CreateImgUtil.httpPostWithJSON(url, json, companyId,dir);
            return companyId;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return null;
    }
  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
生成动态参数微信小程序二维,可以使用微信提供的接口 `wxacode.getUnlimited`,该接口可以生成不限次数、永久有效的小程序,并且可以携带动态参数。以下是一些基本步骤: 1.在微信公众平台或开放平台创建一个小程序,并获取小程序的 appid 和 secret。 2.使用 appid 和 secret 获取 access_token,可以通过调用微信接口实现。 3.使用 access_token 和其他参数调用生成小程序接口,例如以下 URL: https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=ACCESS_TOKEN 其中 ACCESS_TOKEN 是第二步获取的 access_token。 4.在调用生成小程序接口时,需要传递一些参数,例如 `scene`、`page`、`width`、`auto_color` 等,具体参数的含义可以参考微信开发文档。 `scene` 参数是动态参数,可以根据业务需求生成。例如,可以将用户的 ID、订单号、活动 ID 等作为 `scene` 参数生成小程序时,微信会将 `scene` 参数的值写入到小程序的 `onLoad` 函数中,开发者可以在 `onLoad` 函数中获取该参数并进行相应的处理。 5.将接口返回的二进制数据保存成图片,可以使用 Python 的 requests 库实现。 下面是一个示例代: ```python import requests def generate_wxa_code_with_scene(appid, secret, scene, page, width=430): access_token = get_access_token(appid, secret) url = f'https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={access_token}' data = { 'scene': scene, 'page': page, 'width': width, 'auto_color': False } response = requests.post(url, json=data) if response.status_code == 200: with open('wxa_code.jpg', 'wb') as f: f.write(response.content) ``` 其中,`get_access_token` 函数用于获取 access_token,可以参考微信开发文档实现。`generate_wxa_code_with_scene` 函数用于调用生成小程序接口,并将结果保存成图片。调用该函数时,需要传递 `appid`、`secret`、`scene`、`page`、`width` 等参数,其中 `scene` 参数是动态参数,可以根据业务需求生成

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值