H5通过Url Scheme方式传参跳转微信小程序

这篇具有很好参考价值的文章主要介绍了H5通过Url Scheme方式传参跳转微信小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.获取微信access_token并生成Url Scheme

@Slf4j
@Api(tags = "微信模块")
@RestController
@RequestMapping("/weChat")
public class WeChatController {


    @Autowired
    private WeChatService weChatService;
    @Autowired
    private RedisUtil redisUtil;
    @Value("${wxConfig.app-id}")
    private String AppID;
    @Value("${wxConfig.app-secret}")
    private String AppSecret;

    

    /**
     * @return {@link String}
     * @author macro
     * @description 获取微信小程序token
     */
    @AutoLog(value = "获取微信小程序token")
    @ApiOperation(value = "获取微信小程序token", notes = "获取微信小程序token")
    @GetMapping(value = "/getAccessToken")
    public String getAccessToken() throws IOException {
        //1.先判断redis有没有
        if (redisUtil.hasKey("access_token")) {
            //redis有直接返回
            return redisUtil.get("access_token").toString();
        } else {
            //2.redis没有
            /*2.1请求微信 获取token*/
            String httpUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
            httpUrl = httpUrl + "&appid=" + AppID + "&secret=" + AppSecret;
            CloseableHttpClient client = HttpClients.createDefault();
            HttpGet httpGet = new HttpGet(httpUrl);
            CloseableHttpResponse res = client.execute(httpGet);
            HttpEntity entity = res.getEntity();
            String result = EntityUtils.toString(entity, "UTF-8");
            JSONObject jsonObject = JSON.parseObject(result);
            if (jsonObject.containsKey("access_token")) {
                String accessToken = jsonObject.getString("access_token");
                //放入redis,并设置过期时间为两小时
                redisUtil.set("access_token", accessToken);
                redisUtil.expire("access_token", 2 * 60 * 60);
                return accessToken;
            } else {
                return null;
            }
        }
    }


    /**
     * @return {@link Map< String, Object>}
     * @author macro
     * @description 生成小程序跳转链接
     */
    @AutoLog(value = "生成小程序跳转链接")
    @ApiOperation(value = "生成小程序跳转链接", notes = "生成小程序跳转链接")
    @PostMapping(value = "/getAppletUrl")
    public Result<?> getAppletUrl(@RequestBody UrlSchemeQueryDTO queryEntity) throws IOException {
        //校验参数,参数都传递了才能生成url并跳转
        if (StringUtils.isBlank(queryEntity.getDyId()) || StringUtils.isBlank(queryEntity.getJumpPath()) ||
                null == queryEntity.getCoinAmt() || BigDecimal.ZERO.compareTo(queryEntity.getCoinRmb()) == 0) {
            return Result.error("请求参数非法!");
        }

        //微信生成 URL Scheme接口地址
        String httpUrl = "https://api.weixin.qq.com/wxa/generatescheme?access_token=";
        //需要跳转的小程序路径
        String path = "pages/pay/index";
        //获取AccessToken
        String AccessToken = this.getAccessToken();
        //token为空,报错返回
        if (AccessToken == null) {
            return Result.error("未获取到token!");
        } else {
            /*token非空 拿着token去请求*/
            try {
                JSONObject jsonParam = new JSONObject();
                JSONObject jump_wxa = new JSONObject();
                //跳转参数-跳转的页面路径
                jump_wxa.put("path", queryEntity.getJumpPath());
                jump_wxa.put("query", "dyId=" + queryEntity.getDyId() + "&coinAmt=" + queryEntity.getCoinAmt() + "&coinRmb=" + queryEntity.getCoinRmb().toString());
                //小程序环境  release:正式
                jump_wxa.put("env_version", "release");
                //跳转到的目标小程序信息。
                jsonParam.put("jump_wxa", jump_wxa);
                //默认值0,到期失效的 scheme 码失效类型,失效时间:0,失效间隔天数:1
                jsonParam.put("expire_type", 1);
                //到期失效的 scheme 码的失效间隔天数。生成的到期失效 scheme 码在该间隔时间到达前有效。最长间隔天数为30天。is_expire 为 true 且 expire_type 为 1 时必填
                jsonParam.put("expire_interval", 2);
                String params = jsonParam.toString();
                //请求微信接口,获取url
                JSONObject resultUrl = getUrlScheme(httpUrl, AccessToken, params);

                //请求微信接口,生成失败,返回错误码及错误信息
                if (!resultUrl.getString("errcode").equals("0")) {
                    return Result.error(resultUrl.getString("errcode"), resultUrl.getString("errmsg"));
                }
                /*请求成功 返回url*/
                String newUrl = resultUrl.getString("openlink");
                return Result.ok(newUrl);
            } catch (SocketTimeoutException e) {
                e.printStackTrace();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * @param httpUrl     微信接口的url
     * @param accessToken token
     * @param params      请求参数
     * @author: macro
     * @description: 请求URL Scheme接口,获取url
     * @return: com.alibaba.fastjson.JSONObject URL
     **/
    private JSONObject getUrlScheme(String httpUrl, String accessToken, String params) throws IOException {
        String content;
        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);
        return resultUrl;
    }


}

2.前端获取Url Scheme跳转到微信小程序

wxPay() {
        // ======================获取跳转的URL==============================
        //跳转的微信小程序的路径,传递给后端进行处理
        this.info.jumpPath="pages/pay/index"
        /*获取URL*/
        let jumpUrl=''
        uni.request({
          url: configService.apiUrl + this.url.getAppletUrl,
          method: 'POST',
          data: this.info,
          success: (result) => {
            if(result.data.success){
              jumpUrl=result.data.result
              //获取到URL进行跳转
              window.location.href=jumpUrl
            }
          },
          fail: function (err) {
            uni.showToast({
              title: '打开失败,请稍后再试!',
              icon: 'none',
              duration: 2000
            })
          }
        });
			},

文章来源地址https://www.toymoban.com/news/detail-772850.html

到了这里,关于H5通过Url Scheme方式传参跳转微信小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • h5页面跳转到微信小程序之利用URL Scheme接口

    首先想要跳转到微信小程序得先知道 AppID 和 secret 如果不知道的情况下是无法跳转的 urlscheme.generate 此时遇到一个问题是获取auth.getAccessToken appid 此值在小程序里就可以获取 到 secret 这个值只能在可在 微信公众平台 - 设置 - 开发设置 里面找到 接下来放代码 这样就可以在手机

    2024年02月15日
    浏览(65)
  • vue通过router地址传参跳转同一路由页面,页面不刷新的解决办法

    vue、 vue-router@4 记录一下最近遇到的vue路由页面间的跳转的问题,其中就涉及到了不同路由的跳转(/a/b1 = /a/b2)、相同路由不同参数间的跳转(/a/b?c=1 = /a/b?c=2)、相同页面锚点跳转(/a/b#id1 =/a/b#id2) 原因:渲染的是同一组件 解决:可以在不刷新的页面通过监听route,重新加载

    2024年02月04日
    浏览(61)
  • h5页面跳转小程序-----明文URL Scheme

         1.1  登录微信公众平台      1.2  设置 - 基本设置 - 隐私与安全 - 明文scheme拉起此小程序 - 配置          1.3  进入配置后,在里面配置允许通过scheme URL进入的小程序路径 ps:多个路径用分号隔开,且路径必须在小程序正式版存在 否则会报: 小程序path格式不对,请填

    2024年03月26日
    浏览(65)
  • H5页面跳转微信小程序

    微信浏览器中实现跳转 使用微信官方接口 wx-open-launch-weapp (该方法只开放给已认证的服务号或者小程序云开发的静态网站托管绑定的域名下的网页) 案例代码 相关文档 目录 | 微信开放文档 微信开发者平台文档 https://developers.weixin.qq.com/doc/offiaccount/OA_Web_Apps/Wechat_Open_Tag.htm

    2023年04月17日
    浏览(77)
  • uniapp webview H5跳转微信小程序

    第一步:manifest.json 第二步:index.html 第三步 H5跳转微信小程序代码

    2024年02月10日
    浏览(60)
  • uniapp微信公众号(h5)端跳转微信小程序

    !!!不是微信公众号菜单跳转小程序 微信公众号菜单跳转小程序:公众号和小程序相互关联,在公众号的自定义菜单中配置即可 1、 绑定域名  2、安装依赖 jweixin-module 3、 引入挂载 !!!main.js引入挂载 !!!单页面引入挂载 4、 通过 config 接口注入权限验证配置(需要后

    2024年02月13日
    浏览(128)
  • H5跳转微信小程序-成功案例(VUE)(踩坑无数)

    微信官方文档:H5跳转小程序. 已认证的服务号 绑定JS接口安全域名 IP白名单 将小程序和H5公众号进行关联 需要跳转的小程序页面path和原始ID(gh_xxxxxxxxx) 引入jweixin-1.6.0.js 1、已认证的服务号 H5必须是依附于公众号的,且公众号必须为 服务号 ,不是订阅号。 什么样的公众号

    2024年02月09日
    浏览(57)
  • h5跳转微信小程序方案及注意事项(vue方向)

    在正式开发工作之前,请优先熟读并查看微信开发文档。 需提前登录微信公众平台进入“公众号设置”的“功能设置”的“JS接口安全域名”、“业务域名”、“网页授权域名”内依次配置h5页面的相关域名地址(例如:www.baidu.com)这里不包含协议名称和端口,同时可在根目

    2024年02月09日
    浏览(106)
  • 关于微信公众号的h5页面跳转微信小程序的详细介绍

    关于微信公众号跳转小程序的功能,我也是研究了一整天才弄好的,主要是微信官方文档写的不清楚,百度上的各种文章也各说各的,不过最后还是要相信官网文档,接下来我会一步一步分析,希望对你有帮助,并且最后会贴上全部代码。 一、条件 已认证的 服务号 ,服务号

    2024年02月10日
    浏览(65)
  • h5跳转微信小程序 wx-open-launch-weapp

    微信开放标签是微信公众平台面向网页开发者提供的扩展标签集合。通过使用微信开放标签,网页开发者可安全便捷地使用微信或系统的能力,为微信用户提供更优质的网页体验。 此文档面向网页开发者,介绍微信开放标签如何使用及相关注意事项。需要注意的是,微信开放

    2024年02月04日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包