Java实现从第三方页面唤醒小程序并跳转小程序界面

        最近开发中碰到需要从第三方H5唤醒并跳转小程序界面的需求,在微信官方社区找了一番后发现有相关的资料,于是便整理了两个接口并进行了实现,微信提供了三个接口生成小程序跳转链接,如下:

(1)、获取 URL Scheme

(2)、获取 URL Link

(3)、获取 Short Link

        以上三种生成跳转链接的方式和相关说明在这里就不做阐述了。具体可参考官方资料,直接上链接:获取 URL Scheme | 微信开放文档

        下面说说我所采用的方式,我采用的是获取 URL Scheme,通过调用相应接口获取生成的小程序跳转链接。

        首先根据官方资料整理出接口调用相关信息,

        (1)、接口地址:

POST https://api.weixin.qq.com/wxa/generatescheme?access_token=ACCESS_TOKEN

        (2)、参数:

请求参数

属性类型必填说明
access_tokenstring接口调用凭证,该参数为 URL 参数,非 Body 参数。使用getAccessToken 或者 authorizer_access_token
jump_wxaobject跳转到的目标小程序信息。
属性类型必填说明
pathstring通过 scheme 码进入的小程序页面路径,必须是已经发布的小程序存在的页面,不可携带 query。path 为空时会跳转小程序主页。
querystring通过 scheme 码进入小程序时的 query,最大1024个字符,只支持数字,大小写英文以及部分特殊字符:`!#$&'()*+,/:;=?@-._~%``
env_versionstring默认值"release"。要打开的小程序版本。正式版为"release",体验版为"trial",开发版为"develop",仅在微信外打开时生效。
is_expireboolean默认值false。生成的 scheme 码类型,到期失效:true,30天有效:false。
expire_timenumber到期失效的 scheme 码的失效时间,为 Unix 时间戳。生成的到期失效 scheme 码在该时间前有效。最长有效期为30天。is_expire 为 true 且 expire_type 为 0 时必填
expire_typenumber默认值0,到期失效的 scheme 码失效类型,失效时间:0,失效间隔天数:1
expire_intervalnumber到期失效的 scheme 码的失效间隔天数。生成的到期失效 scheme 码在该间隔时间到达前有效。最长间隔天数为30天。is_expire 为 true 且 expire_type 为 1 时必填

返回参数

属性类型说明
errcodenumber错误码
errmsgstring错误信息
openlinkstring生成的小程序 scheme 码

        附:其中有一个参数是access_token,即接口调用凭证,需要调用凭证获取接口才能获取到,且有时效性,因此在生成小程序跳转链接前还需进行access_token的获取,调用方式参考官方资料,上链接:获取接口调用凭据 | 微信开放文档

下面就贴出实现代码:

//凭证调用
public static String getAccessToken(){
        //小程序APPID
        String appid="";//自行获取
        //小程序secret
        String secret="";//自己去公众号后台获取
        String httpUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
        HttpAsk httpObj=new HttpAsk();
        String res="";
        httpUrl= httpUrl+"&appid="+appid+"&secret="+secret;
        //调用接口 接收返回结果
        String AccessTokenJson=httpObj.GetForHtml(httpUrl);
        return AccessTokenJson;
}


//生成小程序跳转链接
public static Map<String,Object> getAppletUrl(){
        Map<String,Object> map=new HashMap<String,Object>();
        //接口地址
        String httpUrl="https://api.weixin.qq.com/wxa/generatescheme?access_token=";
        //需要跳转的小程序路径
        String path= "pages/login/login";
        //获取AccessToken
        String AccessTokenJson=WeChatInterfaceUtil.getAccessToken();
        //格式化返回数据
        JSONObject resultObject = JSONObject.parseObject(AccessTokenJson);
        String AccessToken=resultObject.getString("access_token");
        if(AccessToken==null){
            AccessToken =resultObject.getString("errmsg");
            map.put("code",-1);//错误码
            map.put("msg",AccessToken);//错误信息
        }else{
            map.put("code",0);
            try {
                String content="";
                JSONObject jsonParam = new JSONObject();
                JSONObject jump_wxa = new JSONObject();
                jump_wxa.put("path",path);
                jump_wxa.put("query", "");
                jsonParam.put("jump_wxa",jump_wxa);
                jsonParam.put("expire_type", 1);
                jsonParam.put("expire_interval", 2);
                String params=jsonParam.toString();
                CloseableHttpClient httpClient = HttpClients.createDefault();
                RequestConfig requestConfig = RequestConfig.custom()
                        .setSocketTimeout(300 * 1000)
                        .setConnectTimeout(300 * 1000)
                        .build();
                HttpPost post = new HttpPost(httpUrl+AccessToken);
                post.setConfig(requestConfig);
                post.setHeader("Content-Type", "application/json;charset=utf-8");
                //URLEncoder.encode(name)
                StringEntity postingString = new StringEntity(params, "utf-8");
                post.setEntity(postingString);
                CloseableHttpResponse response = httpClient.execute(post);
                content=EntityUtils.toString(response.getEntity());
                JSONObject resultUrl = JSONObject.parseObject(content);
                String newUrl=resultUrl.getString("openlink");
                map.put("url",newUrl);
                System.out.println("WeChatInterfaceUtil.getWeixinUrl--"+newUrl);
            } catch (SocketTimeoutException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return map;
}

通过调用getAppletUrl 就可以获取小程序跳转接口

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值