h5跳转小程序

  • 代码
<div class="step" onclick="minapps()">
                <img src="${request.contextPath}/images/wechatImg/img2.png" alt="">
            </div>

            <!--gh_81fea41c2854   gh_81fea41c2854 /pages/mini/sacnLogin/qrlogin?random=daa&sysName=wxyh 13rem
                /pages/mini/sacnLoginsacnLogin/qrloginr/qrloginr.html?andom=110006v10006614050000000722155669647170CBE2E67B&sysName=昆仑银行股份有限公司测试系统
                --> <!--path="/pages/mini/sacnLogin/qrloginr">-->
            <wx-open-launch-weapp id="launch-btn" username="gh_0c5a2dd326c6" path="pages/user/bushu.html">
                <template>
                    <style>
                        .btn {
                            padding: 12px;
                            width: 200px;
                            height: 50px;
                        }
                    </style>
                    <button class="btn">打开</button>
                </template>
            </wx-open-launch-weapp>

function jingru() {
        var urlst = document.URL;
        alert("进化论思路2222");
        $.ajax({
            url: '/klbwx/applets/bushuya.htm',
            type: 'get',
            data:{
                urls:urlst,
            },
            success: function (res) {
                alert("响应");
                alert(res);
                dates = JSON.parse(res);
                alert(dates.signature);
                wx.config({
                    debug: false,
                    appId: 'wx1a44648aa770c8bb',
                    timestamp: dates.timestamp, // 必填,生成签名的时间戳
                    nonceStr: dates.nonceStr, // 必填,填任意非空字符串即可
                    signature: dates.signature, // 必填,填任意非空字符串即可
                    jsApiList: ['openLocation', 'chooseImage', 'previewImage', 'qrloginr', '/pages/user/bushu.html'], // 必填,随意一个接口即可
                    openTagList: ['wx-open-launch-weapp']
                });
                // 通过ready接口处理成功验证
                wx.ready(function () {
                    //config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中
                    var btn = document.getElementById('launch-btn');
                    btn.addEventListener('launch', function (e) {
                        // alert('success');

                    });
                    btn.addEventListener('error', function (e) {
                        //  alert('fail', e.detail);
                    });

                });
            }
        });
    }

-- 后端代码
/* 碳积分跳转小程序的后端逻辑
* */
@Controller
@RequestMapping(value = "/applets")
public class XiaoChengXu {

    private static Logger log = Logger.getLogger(XiaoChengXu.class);

    @RequestMapping(value = "/bushuya")
    @ResponseBody
    public Map<String, String> messageSignUpQuery(HttpServletRequest request) {

        //小程序
        log.info("请求进入获取参数开始“");
        log.info("输出信息"+"获取参数");
        String urls = request.getParameter("urls");
        log.info("输出信息"+"获取参数"+urls);
        String getjsapi = Sign.getjsapi();
        log.info("输出信息getjsapi"+getjsapi);
        Map<String, String> sign = Sign.sign(getjsapi, urls);
        log.info("输出信息");
        //for(Map.Entry entry:sign.entrySet()){
        //    log.info(entry.getKey()+"=="+entry.getValue());
        //}
        return sign;
    }
}




package com.vsiteapp.klb.dianzi.server;


import com.alibaba.fastjson.JSON;
import com.aliyun.common.utils.HttpUtil;
import com.huilan.vsiteapp.util.HttpClientUtils;
import com.vsiteapp.klb.qygl.utils.PropertiesUtil;
import net.sf.json.JSONObject;
import org.apache.log4j.Logger;
import org.aspectj.weaver.ast.Var;
import org.bouncycastle.jce.provider.JDKMessageDigest;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Formatter;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import static com.csrft.util.MD5.byteToHex;
import static com.vsiteapp.klb.scancode.util.WeiXinScanUtils.sign;

public class Sign {

    private static Logger log = Logger.getLogger(Sign.class);
    public static void main(String[] args) {

        // 注意 URL 一定要动态获取,不能 hardcode
        String url = "http://weixin-dev3.klb.com.cn";
        /*Map<String, String> ret = sign(jsapi_ticket, url);
        for (Map.Entry entry : ret.entrySet()) {
            System.out.println(entry.getKey() + ", " + entry.getValue());
        }*/
    };

    public static String getjsapi(){
        //String appSecret = "ca806906f27d3bb2d791088120160105";
        //String appid = "wx1a44648aa770c8bb";wx1a44648aa770c8bb
        String appid = PropertiesUtil.getStringByKey("appid");
        String appSecret = PropertiesUtil.getStringByKey("appSecret");
        //获取access_token
        String tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid"+"="+appid+"&secret"+"="+appSecret;
        // String result = HttpUtil.sendGet(tokenUrl);
        String s = "";
        log.info("开始获取access_token"+tokenUrl);
        {
            try {
                s = HttpClientUtils.get(tokenUrl);
                log.info("获取access_token成功");
            } catch (Exception e) {
                e.printStackTrace();
                log.info("获取access_token"+"失败了");
            }
        }
        JSONObject tokenUrlJson = JSONObject.fromObject(s);
        log.info("获取access_token成功");
        log.info(tokenUrlJson.toString());
        String accessToken = tokenUrlJson.getString("access_token");
        log.info("获取access_token成功"+accessToken);
        //获取jsapi
        String jsapiStr = "";

        {
            try {
                jsapiStr = HttpClientUtils.get("https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="+accessToken+"&type=jsapi");
                log.info("获取jsapi成功"+jsapiStr);
            } catch (Exception e) {
                e.printStackTrace();
                log.info("获取jsapi"+"失败了");
            }
        }

        JSONObject jsapistr = JSONObject.fromObject(jsapiStr);
        String jsapi_ticket = jsapistr.getString("ticket");

        return jsapi_ticket;
    }






    public static Map<String, String> sign( String jsapi_ticket, String url) {

        Map<String, String> ret = new HashMap<String, String>();
        String nonce_str = create_nonce_str();
        String timestamp = create_timestamp();
        String string1;
        String signature = "";

        //注意这里参数名必须全部小写,且必须有序
        string1 = "jsapi_ticket=" + jsapi_ticket +
                "&noncestr=" + nonce_str +
                "&timestamp=" + timestamp +
                "&url=" + url;
        System.out.println(string1);

        try
        {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            crypt.update(string1.getBytes("UTF-8"));
            signature = byteToHex(crypt.digest());

        }
        catch (NoSuchAlgorithmException e)
        {
            e.printStackTrace();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

        ret.put("url", url);
        ret.put("jsapi_ticket", jsapi_ticket);
        ret.put("nonceStr", nonce_str);
        ret.put("timestamp", timestamp);
        ret.put("signature", signature);

        return ret;
    }

    private static String byteToHex(final byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash)
        {
            formatter.format("%02x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }

    private static String create_nonce_str() {
        return UUID.randomUUID().toString();
    }

    private static String create_timestamp() {
        return Long.toString(System.currentTimeMillis() / 1000);
    }
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值