微信H5内部分享总结

需要在前台设置:

<%-- 微信分享配置开始 --%>
<script src="https://res2.wx.qq.com/open/js/jweixin-1.4.0.js"></script>
<script>
       var _href = location.href;
       if(_href.indexOf('?')>-1){
           _href=location.href = location.href.split('?')[0];
       }

       var title = '分享的title';
       var desc = '分享的内容';
       var link = _href;
       var imgUrl = '图片路径';
       var appId = '${ret.appId}';
       var timestamp = ${ret.timestamp};
       var nonceStr = '${ret.nonceStr}';
       var signature = '${ret.signature}';
</script>
<script src="${ctx}/static/mobile/js/weixinshare.js"></script>

后台接口需要返回,appId,timestamp,nonceStr,signature

/**
 * 获取微信分享jssdk权限验证信息
 * @param signUrl
 * @return
 * @throws Exception
 */
public static Map<String, String> getCheckConfigInfo(final String signUrl) throws Exception{
    WeiXinShareUtil wcs = new WeiXinShareUtil();

    String accessToken = (String) wcs.memCache.get(WX_ACCESS_TOKEN);
    String jsapiTicket = (String) wcs.memCache.get(WX_JSAPI_TICKET);

    if(accessToken == null || "".equals(accessToken)){
        //拼写微信获取access_token访问地址
        String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
        url += "&appid=" + WeixinConstants.appid_accredit;
        url += "&secret=" + WeixinConstants.secret_accredit;

        //获取返回数据
        JSONObject info = wcs.urlHalder(url);
        wcs.logger.info("++++++++++++++++++++++++++++++++++++++++"+info);
        if(info.get("access_token") != null){
            accessToken = info.get("access_token").toString();
            wcs.memCache.set(WX_ACCESS_TOKEN,accessToken,Integer.parseInt(info.get("expires_in").toString()));
        }

    }

    if(jsapiTicket == null || "".equals(jsapiTicket)){
        if(accessToken != null && !"".equals(accessToken)) {
            String url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket";
            url += "?access_token=" + accessToken;
            url += "&type=jsapi";

            //获取返回数据
            JSONObject info = wcs.urlHalder(url);
            wcs.logger.info("++++++++++++++++++++++++++++++++++++++++"+info);
            if(info.get("ticket") != null){
                wcs.memCache.set(WX_JSAPI_TICKET, info.get("ticket").toString(), Integer.parseInt(info.get("expires_in").toString()));
            }
        }
    }

    wcs.logger.info("++++++++++++++++++++++++++++++++++++++++++++++accessToken " + accessToken);
    wcs.logger.info("++++++++++++++++++++++++++++++++++++++++++++++jsapiTicket " + jsapiTicket);
    wcs.logger.info("===========分享地址============="+signUrl);
    Map<String, String> ret = wcs.sign(jsapiTicket, signUrl);
    for (Map.Entry entry : ret.entrySet()) {
        wcs.logger.info(entry.getKey() + ", " + entry.getValue());
    }
    ret.put("appId",WeixinConstants.appid_accredit);
    return ret;
}

/**
 * 计算权限验证配置信息
 * @param jsapi_ticket jssdk临时票据
 * @param url
 * @return
 */
private Map<String, String> sign(String jsapi_ticket, String url) throws Exception {
    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);

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

    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;
}

1、在这里面需要强调下,微信目前不支持当前页面分享,分享其他链接,否则即使你的sign验签是对的,也会分享失败,

2、appID是appsecret微信公众号的,这个需要看下

3、还需要在公众号里面设置调取accsess_token,需要设置白名单,即当前网站域名的ip,否则后面的参数获取都会失败,无法进行验签成功。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值