开发者可通过以下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
注:小程序跳转默认跳转首页,如需要配置其他页面可参考链接