短信打开微信小程序

开发者可通过以下3种方式实现短信打开小程序:

1、通过URL Scheme实现
通过服务端接口或在小程序管理后台生成URL Scheme后,自行开发中转H5页面。
将带有中转H5链接的短信内容通过开发者自有的短信发送能力或服务商的短信服务进行投放,实现短信打开小程序。
2、通过URL Link实现
通过服务端接口生成URL Link
直接将带有URL Link的短信内容通过开发者自有的短信发送能力或服务商的短信服务进行投放,实现短信打开小程序。
3、通过云开发静态网站实现
可以参考「云开发」-「静态网站」-「短信跳小程序」。
官方文档:短信打开小程序 | 微信开放文档

下面我们用第1种方式,通过URL Scheme方式实现短信打开微信小程序:

第一步:创建信任管理器MyX509TrustManager,用于调用微信接口

import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.X509TrustManager;

/**
 * 信任管理器
 */
public class MyX509TrustManager implements X509TrustManager {

	// 检查客户端证书
	public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
	}

	// 检查服务器端证书
	public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
	}

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

第二步:获取token,并获取URL Scheme

package com.hgsoft.util;
import com.hgsoft.weixin.utils.MyX509TrustManager;
import net.sf.json.JSONObject;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;

public class JumpAppletTest {

    private final static String APPID = "wxb82c69u361896889";//小程序唯一凭证,即 AppID
    private final static String APPSECRET = "0c462ui899681345673378d56cdbghd";//小程序唯一凭证密钥,即 AppSecret
    private final static String TOKEN_URL = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET";//获取接口调用凭据
    private final static String GENERATESCHEME_URL = "https://api.weixin.qq.com/wxa/generatescheme?access_token=ACCESS_TOKEN";//post 获取scheme码

    public static void main(String[] args) {

        //1、获取token
        String url = TOKEN_URL.replace("APPID", APPID).replace("APPSECRET", APPSECRET);
        JSONObject tokenResult = httpsRequest(url,"GET",null);
        System.out.println(tokenResult);
        //{"access_token":"70_GYiTiERxwZnRClUsBf5AZ99BrynCyRV1fEM0pffj9JFRyGTDj34clcwAZacghGV6CTgVUVi6Xq9Ny4GdD9F51cWlKyrj-EVSC7pT7nPw9zHiMolf6aFh_S_iwQYSGRdAIAOCN","expires_in":7200}

        //2、通过token获取 URL Scheme
        String getSchemeUrl = GENERATESCHEME_URL.replace("ACCESS_TOKEN", tokenResult.get("access_token").toString());
        JSONObject result = httpsRequest(getSchemeUrl,"POST",null);
        System.out.println(result);
        //{"errcode":0,"errmsg":"ok","openlink":"weixin://dl/business/?t=ycy69S7UOuo"}
        System.out.println(result.get("openlink"));

    }

    public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {
        JSONObject jsonObject = null;
        try {
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化
            TrustManager[] tm = { new MyX509TrustManager() };
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
            sslContext.init(null, tm, new java.security.SecureRandom());
            // 从上述SSLContext对象中得到SSLSocketFactory对象
            SSLSocketFactory ssf = sslContext.getSocketFactory();

            URL url = new URL(requestUrl);
            HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
            conn.setSSLSocketFactory(ssf);

            conn.setDoOutput(true);
            conn.setDoInput(true);
            conn.setUseCaches(false);
            // 设置请求方式(GET/POST)
            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);
            String str;
            StringBuffer buffer = new StringBuffer();
            while ((str = bufferedReader.readLine()) != null) {
                buffer.append(str);
            }
            // 释放资源
            bufferedReader.close();
            inputStreamReader.close();
            inputStream.close();
            conn.disconnect();
            jsonObject = JSONObject.fromObject(buffer.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
        return jsonObject;
    }
}

第三步:创建test.html,并在test.html内实现URL Scheme链接跳转

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<script>
    //location.href = "上述代码中获取到的openlink"
    location.href = 'weixin://dl/business/?t=ycy69S7UOuo'
</script>
</body>
</html>

最后:访问test.html链接即可跳转至小程序,下发的短信报文test.html链接地址即可跳转

如:https://xxx.com/test.html

本地测试,可用ip替换域名,手机与测试环境同一网络下可以通过ip访问

如:https://192168.111.256:8080/test.html

注:小程序跳转默认跳转首页,如需要配置其他页面可参考链接

https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-scheme/generateScheme.html#HTTPS-调用

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值