h5分享微信好友朋友圈

微信分享朋友分享朋友圈

1.准备工作

1.1.获取微信公众号的appid 和 密钥

在这里插入图片描述

1.2公众号设置中添加js安全域名,需要将文件放在默认的80端口下。可做映射,可更改tomcat配置

1.2.1端口映射
一 .添加映射将80端口映射到8080
iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
二. 删除映射(不需要时删除)
查看映射编号  iptables -t nat -L -nv --line-numbers 
删除项 “num” 对应的字母  iptables -t nat -D PREROUTING “num(实际上是对应的数字)”

在这里插入图片描述

2.后台操作

2.1后台获取需要获取签名的url

package com.weifeng.controller;

import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

import static com.weifeng.utils.Duck.weixinSign;

@RestController
@CrossOrigin
public class WechatController {

    //获取签名参数
    @GetMapping("weiSign")
    public Map<String, Object> weiSign( String url){
        System.out.println("url = " + url);
        //请求方法
        return weixinSign(url);
    }

}

获取签名需要先获取token 和 ticket

package com.weifeng.utils;

import com.alibaba.fastjson.JSONObject;
import redis.clients.jedis.Jedis;

import java.util.HashMap;
import java.util.Map;


public class Duck {

    public static Map<String, Object> weixinSign(String url1) {
        String json = "";
        String token = "";
        String ticket = "";
        Jedis jedis = new Jedis("127.0.0.1",6379);
        jedis.ping();
        Map<String,String> params = new HashMap<>();
        params.put("grant_type","client_credential");
        params.put("appid","你自己的appid");
        params.put("secret","你自己的密钥");
        if (jedis.exists("token")){
            token=jedis.get("token");
        }else {
            json = HttpClientUtil.doGet("https://api.weixin.qq.com/cgi-bin/token?",params);
            JSONObject jsonObject = JSONObject.parseObject(json);
            token=jsonObject.get("access_token").toString();
            System.out.println("token = " + token);
            jedis.setex("token",7200,token);
        }
        if (jedis.exists("weixinticket")){
            ticket = jedis.get("weixinticket");
        }else {
            String TUrl ="https://api.weixin.qq.com/cgi-bin/ticket/getticket?";
            HashMap<String, String> paramHashMap = new HashMap<>();
            paramHashMap.put("type","jsapi");
            paramHashMap.put("access_token",token);
            json = HttpClientUtil.doGet(TUrl,paramHashMap);
            System.out.println("json = " + json);
            JSONObject tickObject = JSONObject.parseObject(json);
            ticket=tickObject.get("ticket").toString();
            System.out.println(ticket);
            jedis.setex("weixinticket", 7200,ticket);
        }
        //调用获取签名方法
        Map<String, Object> sign = WeiXinSign.sign(ticket, url1);
        System.out.println("签名为"+sign);
        return sign;
    }
}

获取签名的方法返回签名相关所有的信息

package com.weifeng.utils;

import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.*;

public class WeiXinSign {
    public WeiXinSign() {
    }

    public static Map<String, Object> sign(String jsapi_ticket, String url) {
        System.out.println(url);
        Map<String, Object> ret = new HashMap();
        String nonce_str = create_nonce_str();//不带斜杠的uuid
        String timestamp = create_timestamp();//当前时间
        String signature = "";
        String jieguo = "";
        ArrayList<String> arr = new ArrayList();
        arr.add("jsapi_ticket=" + jsapi_ticket);
        arr.add("noncestr=" + nonce_str);
        arr.add("timestamp=" + timestamp);
        arr.add("url=" + url);
        Collections.sort(arr, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                try {
                    String str1 = new String(o1.toString().getBytes("GB2312"), "ISO-8859-1");
                    String str2 = new String(o2.toString().getBytes("GB2312"), "ISO-8859-1");
                    return str1.compareTo(str2);
                } catch (UnsupportedEncodingException var4) {
                    var4.printStackTrace();
                    return 0;
                }
            }
        });

        for(int i = 0; i < arr.size(); ++i) {
            if (i < arr.size() - 1) {
                jieguo = jieguo + (String)arr.get(i) + "&";
            }

            if (i == arr.size() - 1) {
                jieguo = jieguo + (String)arr.get(i);
            }
        }

        try {
            MessageDigest crypt = MessageDigest.getInstance("SHA-1");
            crypt.reset();
            System.out.println("jieguo = " + jieguo);
            crypt.update(jieguo.getBytes("UTF-8"));
            signature = byteToHex(crypt.digest());
        } catch (NoSuchAlgorithmException var9) {
            var9.printStackTrace();
        } catch (UnsupportedEncodingException var10) {
            var10.printStackTrace();
        }

        ret.put("url", url);
        ret.put("jsapi_ticket", jsapi_ticket);
        ret.put("nonceStr", nonce_str);
        ret.put("timestamp", Long.parseLong(timestamp));
        ret.put("signature", signature);
        return ret;
    }

    private static String byteToHex(final byte[] hash) {
        Formatter formatter = new Formatter();
        byte[] var2 = hash;
        int var3 = hash.length;

        for(int var4 = 0; var4 < var3; ++var4) {
            byte b = var2[var4];
            formatter.format("%02x", b);
        }

        String result = formatter.toString();
        formatter.close();
        return result;
    }

    private static String create_nonce_str() {
        String uuid = UUID.randomUUID().toString().replaceAll("-", "");
        return uuid;
    }

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

3.前端操作

3.1获取官方的js模板

!
function(e, n) {
    "function" == typeof define && (define.amd || define.cmd) ? define(function() {
        return n(e)
    }) : n(e, !0)
} (this,
function(e, n) {
    function i(n, i, t) {
        e.WeixinJSBridge ? WeixinJSBridge.invoke(n, o(i),
        function(e) {
            c(n, e, t)
        }) : u(n, t)
    }
    function t(n, i, t) {
        e.WeixinJSBridge ? WeixinJSBridge.on(n,
        function(e) {
            t && t.trigger && t.trigger(e),
            c(n, e, i)
        }) : t ? u(n, t) : u(n, i)
    }
    function o(e) {
        return e = e || {},
        e.appId = C.appId,
        e.verifyAppId = C.appId,
        e.verifySignType = "sha1",
        e.verifyTimestamp = C.timestamp + "",
        e.verifyNonceStr = C.nonceStr,
        e.verifySignature = C.signature,
        e
    }
    function r(e) {
        return {
            timeStamp: e.timestamp + "",
            nonceStr: e.nonceStr,
            package: e.package,
            paySign: e.paySign,
            signType: e.signType || "SHA1"
        }
    }
    function a(e) {
        return e.postalCode = e.addressPostalCode,
        delete e.addressPostalCode,
        e.provinceName = e.proviceFirstStageName,
        delete e.proviceFirstStageName,
        e.cityName = e.addressCitySecondStageName,
        delete e.addressCitySecondStageName,
        e.countryName = e.addressCountiesThirdStageName,
        delete e.addressCountiesThirdStageName,
        e.detailInfo = e.addressDetailInfo,
        delete e.addressDetailInfo,
        e
    }
    function c(e, n, i) {
        "openEnterpriseChat" == e && (n.errCode = n.err_code),
        delete n.err_code,
        delete n.err_desc,
        delete n.err_detail;
        var t = n.errMsg;
        t || (t = n.err_msg, delete n.err_msg, t = s(e, t), n.errMsg = t),
        (i = i || {})._complete && (i._complete(n), delete i._complete),
        t = n.errMsg || "",
        C.debug && !i.isInnerInvoke && alert(JSON.stringify(n));
        var o = t.indexOf(":");
        switch (t.substring(o + 1)) {
        case "ok":
            i.success && i.success(n);
            break;
        case "cancel":
            i.cancel && i.cancel(n);
            break;
        default:
            i.fail && i.fail(n)
        }
        i.complete && i.complete(n)
    }
    function s(e, n) {
        var i = e,
        t = v[i];
        t && (i = t);
        var o = "ok";
        if (n) {
            var r = n.indexOf(":");
            "confirm" == (o = n.substring(r + 1)) && (o = "ok"),
            "failed" == o && (o = "fail"),
            -1 != o.indexOf("failed_") && (o = o.substring(7)),
            -1 != o.indexOf("fail_") && (o = o.substring(5)),
            "access denied" != (o = (o = o.replace(/_/g, " ")).toLowerCase()) && "no permission to execute" != o || (o = "permission denied"),
            "config" == i && "function not exist" == o && (o = "ok"),
            "" == o && (o = "fail")
        }
        return n = i + ":" + o
    }
    function d(e) {
        if (e) {
            for (var n = 0,
            i = e.length; n < i; ++n) {
                var t = e[n],
                o = h[t];
                o && (e[n] = o)
            }
            return e
        }
    }
    function u(e, n) {
        if (! (!C.debug || n && n.isInnerInvoke)) {
            var i = v[e];
            i && (e = i),
            n && n._complete && delete n._complete,
            console.log('"' + e + '",', n || "")
        }
    }
    function l(e) {
        if (! (k || w || C.debug || x < "6.0.2" || V.systemType < 0)) {
            var n = new Image;
            V.appId = C.appId,
            V.initTime = A.initEndTime - A.initStartTime,
            V.preVerifyTime = A.preVerifyEndTime - A.preVerifyStartTime,
            N.getNetworkType({
                isInnerInvoke: !0,
                success: function(e) {
                    V.networkType = e.networkType;
                    var i = "https://open.weixin.qq.com/sdk/report?v=" + V.version + "&o=" + V.isPreVerifyOk + "&s=" + V.systemType + "&c=" + V.clientVersion + "&a=" + V.appId + "&n=" + V.networkType + "&i=" + V.initTime + "&p=" + V.preVerifyTime + "&u=" + V.url;
                    n.src = i
                }
            })
        }
    }
    function p() {
        return (new Date).getTime()
    }
    function f(n) {
        T && (e.WeixinJSBridge ? n() : S.addEventListener && S.addEventListener("WeixinJSBridgeReady", n, !1))
    }
    function m() {
        N.invoke || (N.invoke = function(n, i, t) {
            e.WeixinJSBridge && WeixinJSBridge.invoke(n, o(i), t)
        },
        N.on = function(n, i) {
            e.WeixinJSBridge && WeixinJSBridge.on(n, i)
        })
    }
    function g(e) {
        if ("string" == typeof e && e.length > 0) {
            var n = e.split("?")[0],
            i = e.split("?")[1];
            return n += ".html",
            void 0 !== i ? n + "?" + i: n
        }
    }
    if (!e.jWeixin) {
        var h = {
            config: "preVerifyJSAPI",
            onMenuShareTimeline: "menu:share:timeline",
            onMenuShareAppMessage: "menu:share:appmessage",
            onMenuShareQQ: "menu:share:qq",
            onMenuShareWeibo: "menu:share:weiboApp",
            onMenuShareQZone: "menu:share:QZone",
            previewImage: "imagePreview",
            getLocation: "geoLocation",
            openProductSpecificView: "openProductViewWithPid",
            addCard: "batchAddCard",
            openCard: "batchViewCard",
            chooseWXPay: "getBrandWCPayRequest",
            openEnterpriseRedPacket: "getRecevieBizHongBaoRequest",
            startSearchBeacons: "startMonitoringBeacons",
            stopSearchBeacons: "stopMonitoringBeacons",
            onSearchBeacons: "onBeaconsInRange",
            consumeAndShareCard: "consumedShareCard",
            openAddress: "editAddress"
        },
        v = function() {
            var e = {};
            for (var n in h) e[h[n]] = n;
            return e
        } (),
        S = e.document,
        I = S.title,
        y = navigator.userAgent.toLowerCase(),
        _ = navigator.platform.toLowerCase(),
        k = !(!_.match("mac") && !_.match("win")),
        w = -1 != y.indexOf("wxdebugger"),
        T = -1 != y.indexOf("micromessenger"),
        M = -1 != y.indexOf("android"),
        P = -1 != y.indexOf("iphone") || -1 != y.indexOf("ipad"),
        x = function() {
            var e = y.match(/micromessenger\/(\d+\.\d+\.\d+)/) || y.match(/micromessenger\/(\d+\.\d+)/);
            return e ? e[1] : ""
        } (),
        A = {
            initStartTime: p(),
            initEndTime: 0,
            preVerifyStartTime: 0,
            preVerifyEndTime: 0
        },
        V = {
            version: 1,
            appId: "",
            initTime: 0,
            preVerifyTime: 0,
            networkType: "",
            isPreVerifyOk: 1,
            systemType: P ? 1 : M ? 2 : -1,
            clientVersion: x,
            url: encodeURIComponent(location.href)
        },
        C = {},
        L = {
            _completes: []
        },
        B = {
            state: 0,
            data: {}
        };
        f(function() {
            A.initEndTime = p()
        });
        var O = !1,
        E = [],
        N = {
            config: function(e) {
                C = e,
                u("config", e);
                var n = !1 !== C.check;
                f(function() {
                    if (n) i(h.config, {
                        verifyJsApiList: d(C.jsApiList)
                    },
                    function() {
                        L._complete = function(e) {
                            A.preVerifyEndTime = p(),
                            B.state = 1,
                            B.data = e
                        },
                        L.success = function(e) {
                            V.isPreVerifyOk = 0
                        },
                        L.fail = function(e) {
                            L._fail ? L._fail(e) : B.state = -1
                        };
                        var e = L._completes;
                        return e.push(function() {
                            l()
                        }),
                        L.complete = function(n) {
                            for (var i = 0,
                            t = e.length; i < t; ++i) e[i]();
                            L._completes = []
                        },
                        L
                    } ()),
                    A.preVerifyStartTime = p();
                    else {
                        B.state = 1;
                        for (var e = L._completes,
                        t = 0,
                        o = e.length; t < o; ++t) e[t]();
                        L._completes = []
                    }
                }),
                m()
            },
            ready: function(e) {
                0 != B.state ? e() : (L._completes.push(e), !T && C.debug && e())
            },
            error: function(e) {
                x < "6.0.2" || ( - 1 == B.state ? e(B.data) : L._fail = e)
            },
            checkJsApi: function(e) {
                var n = function(e) {
                    var n = e.checkResult;
                    for (var i in n) {
                        var t = v[i];
                        t && (n[t] = n[i], delete n[i])
                    }
                    return e
                };
                i("checkJsApi", {
                    jsApiList: d(e.jsApiList)
                },
                (e._complete = function(e) {
                    if (M) {
                        var i = e.checkResult;
                        i && (e.checkResult = JSON.parse(i))
                    }
                    e = n(e)
                },
                e))
            },
            onMenuShareTimeline: function(e) {
                t(h.onMenuShareTimeline, {
                    complete: function() {
                        i("shareTimeline", {
                            title: e.title || I,
                            desc: e.title || I,
                            img_url: e.imgUrl || "",
                            link: e.link || location.href,
                            type: e.type || "link",
                            data_url: e.dataUrl || ""
                        },
                        e)
                    }
                },
                e)
            },
            onMenuShareAppMessage: function(e) {
                t(h.onMenuShareAppMessage, {
                    complete: function(n) {
                        "favorite" === n.scene ? i("sendAppMessage", {
                            title: e.title || I,
                            desc: e.desc || "",
                            link: e.link || location.href,
                            img_url: e.imgUrl || "",
                            type: e.type || "link",
                            data_url: e.dataUrl || ""
                        }) : i("sendAppMessage", {
                            title: e.title || I,
                            desc: e.desc || "",
                            link: e.link || location.href,
                            img_url: e.imgUrl || "",
                            type: e.type || "link",
                            data_url: e.dataUrl || ""
                        },
                        e)
                    }
                },
                e)
            },
            onMenuShareQQ: function(e) {
                t(h.onMenuShareQQ, {
                    complete: function() {
                        i("shareQQ", {
                            title: e.title || I,
                            desc: e.desc || "",
                            img_url: e.imgUrl || "",
                            link: e.link || location.href
                        },
                        e)
                    }
                },
                e)
            },
            onMenuShareWeibo: function(e) {
                t(h.onMenuShareWeibo, {
                    complete: function() {
                        i("shareWeiboApp", {
                            title: e.title || I,
                            desc: e.desc || "",
                            img_url: e.imgUrl || "",
                            link: e.link || location.href
                        },
                        e)
                    }
                },
                e)
            },
            onMenuShareQZone: function(e) {
                t(h.onMenuShareQZone, {
                    complete: function() {
                        i("shareQZone", {
                            title: e.title || I,
                            desc: e.desc || "",
                            img_url: e.imgUrl || "",
                            link: e.link || location.href
                        },
                        e)
                    }
                },
                e)
            },
            updateTimelineShareData: function(e) {
                i("updateTimelineShareData", {
                    title: e.title,
                    link: e.link,
                    imgUrl: e.imgUrl
                },
                e)
            },
            updateAppMessageShareData: function(e) {
                i("updateAppMessageShareData", {
                    title: e.title,
                    desc: e.desc,
                    link: e.link,
                    imgUrl: e.imgUrl
                },
                e)
            },
            startRecord: function(e) {
                i("startRecord", {},
                e)
            },
            stopRecord: function(e) {
                i("stopRecord", {},
                e)
            },
            onVoiceRecordEnd: function(e) {
                t("onVoiceRecordEnd", e)
            },
            playVoice: function(e) {
                i("playVoice", {
                    localId: e.localId
                },
                e)
            },
            pauseVoice: function(e) {
                i("pauseVoice", {
                    localId: e.localId
                },
                e)
            },
            stopVoice: function(e) {
                i("stopVoice", {
                    localId: e.localId
                },
                e)
            },
            onVoicePlayEnd: function(e) {
                t("onVoicePlayEnd", e)
            },
            uploadVoice: function(e) {
                i("uploadVoice", {
                    localId: e.localId,
                    isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                },
                e)
            },
            downloadVoice: function(e) {
                i("downloadVoice", {
                    serverId: e.serverId,
                    isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                },
                e)
            },
            translateVoice: function(e) {
                i("translateVoice", {
                    localId: e.localId,
                    isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                },
                e)
            },
            chooseImage: function(e) {
                i("chooseImage", {
                    scene: "1|2",
                    count: e.count || 9,
                    sizeType: e.sizeType || ["original", "compressed"],
                    sourceType: e.sourceType || ["album", "camera"]
                },
                (e._complete = function(e) {
                    if (M) {
                        var n = e.localIds;
                        try {
                            n && (e.localIds = JSON.parse(n))
                        } catch(e) {}
                    }
                },
                e))
            },
            getLocation: function(e) {},
            previewImage: function(e) {
                i(h.previewImage, {
                    current: e.current,
                    urls: e.urls
                },
                e)
            },
            uploadImage: function(e) {
                i("uploadImage", {
                    localId: e.localId,
                    isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                },
                e)
            },
            downloadImage: function(e) {
                i("downloadImage", {
                    serverId: e.serverId,
                    isShowProgressTips: 0 == e.isShowProgressTips ? 0 : 1
                },
                e)
            },
            getLocalImgData: function(e) { ! 1 === O ? (O = !0, i("getLocalImgData", {
                    localId: e.localId
                },
                (e._complete = function(e) {
                    if (O = !1, E.length > 0) {
                        var n = E.shift();
                        wx.getLocalImgData(n)
                    }
                },
                e))) : E.push(e)
            },
            getNetworkType: function(e) {
                var n = function(e) {
                    var n = e.errMsg;
                    e.errMsg = "getNetworkType:ok";
                    var i = e.subtype;
                    if (delete e.subtype, i) e.networkType = i;
                    else {
                        var t = n.indexOf(":"),
                        o = n.substring(t + 1);
                        switch (o) {
                        case "wifi":
                        case "edge":
                        case "wwan":
                            e.networkType = o;
                            break;
                        default:
                            e.errMsg = "getNetworkType:fail"
                        }
                    }
                    return e
                };
                i("getNetworkType", {},
                (e._complete = function(e) {
                    e = n(e)
                },
                e))
            },
            openLocation: function(e) {
                i("openLocation", {
                    latitude: e.latitude,
                    longitude: e.longitude,
                    name: e.name || "",
                    address: e.address || "",
                    scale: e.scale || 28,
                    infoUrl: e.infoUrl || ""
                },
                e)
            },
            getLocation: function(e) {
                e = e || {},
                i(h.getLocation, {
                    type: e.type || "wgs84"
                },
                (e._complete = function(e) {
                    delete e.type
                },
                e))
            },
            hideOptionMenu: function(e) {
                i("hideOptionMenu", {},
                e)
            },
            showOptionMenu: function(e) {
                i("showOptionMenu", {},
                e)
            },
            closeWindow: function(e) {
                i("closeWindow", {},
                e = e || {})
            },
            hideMenuItems: function(e) {
                i("hideMenuItems", {
                    menuList: e.menuList
                },
                e)
            },
            showMenuItems: function(e) {
                i("showMenuItems", {
                    menuList: e.menuList
                },
                e)
            },
            hideAllNonBaseMenuItem: function(e) {
                i("hideAllNonBaseMenuItem", {},
                e)
            },
            showAllNonBaseMenuItem: function(e) {
                i("showAllNonBaseMenuItem", {},
                e)
            },
            scanQRCode: function(e) {
                i("scanQRCode", {
                    needResult: (e = e || {}).needResult || 0,
                    scanType: e.scanType || ["qrCode", "barCode"]
                },
                (e._complete = function(e) {
                    if (P) {
                        var n = e.resultStr;
                        if (n) {
                            var i = JSON.parse(n);
                            e.resultStr = i && i.scan_code && i.scan_code.scan_result
                        }
                    }
                },
                e))
            },
            openAddress: function(e) {
                i(h.openAddress, {},
                (e._complete = function(e) {
                    e = a(e)
                },
                e))
            },
            openProductSpecificView: function(e) {
                i(h.openProductSpecificView, {
                    pid: e.productId,
                    view_type: e.viewType || 0,
                    ext_info: e.extInfo
                },
                e)
            },
            addCard: function(e) {
                for (var n = e.cardList,
                t = [], o = 0, r = n.length; o < r; ++o) {
                    var a = n[o],
                    c = {
                        card_id: a.cardId,
                        card_ext: a.cardExt
                    };
                    t.push(c)
                }
                i(h.addCard, {
                    card_list: t
                },
                (e._complete = function(e) {
                    var n = e.card_list;
                    if (n) {
                        for (var i = 0,
                        t = (n = JSON.parse(n)).length; i < t; ++i) {
                            var o = n[i];
                            o.cardId = o.card_id,
                            o.cardExt = o.card_ext,
                            o.isSuccess = !!o.is_succ,
                            delete o.card_id,
                            delete o.card_ext,
                            delete o.is_succ
                        }
                        e.cardList = n,
                        delete e.card_list
                    }
                },
                e))
            },
            chooseCard: function(e) {
                i("chooseCard", {
                    app_id: C.appId,
                    location_id: e.shopId || "",
                    sign_type: e.signType || "SHA1",
                    card_id: e.cardId || "",
                    card_type: e.cardType || "",
                    card_sign: e.cardSign,
                    time_stamp: e.timestamp + "",
                    nonce_str: e.nonceStr
                },
                (e._complete = function(e) {
                    e.cardList = e.choose_card_info,
                    delete e.choose_card_info
                },
                e))
            },
            openCard: function(e) {
                for (var n = e.cardList,
                t = [], o = 0, r = n.length; o < r; ++o) {
                    var a = n[o],
                    c = {
                        card_id: a.cardId,
                        code: a.code
                    };
                    t.push(c)
                }
                i(h.openCard, {
                    card_list: t
                },
                e)
            },
            consumeAndShareCard: function(e) {
                i(h.consumeAndShareCard, {
                    consumedCardId: e.cardId,
                    consumedCode: e.code
                },
                e)
            },
            chooseWXPay: function(e) {
                i(h.chooseWXPay, r(e), e)
            },
            openEnterpriseRedPacket: function(e) {
                i(h.openEnterpriseRedPacket, r(e), e)
            },
            startSearchBeacons: function(e) {
                i(h.startSearchBeacons, {
                    ticket: e.ticket
                },
                e)
            },
            stopSearchBeacons: function(e) {
                i(h.stopSearchBeacons, {},
                e)
            },
            onSearchBeacons: function(e) {
                t(h.onSearchBeacons, e)
            },
            openEnterpriseChat: function(e) {
                i("openEnterpriseChat", {
                    useridlist: e.userIds,
                    chatname: e.groupName
                },
                e)
            },
            launchMiniProgram: function(e) {
                i("launchMiniProgram", {
                    targetAppId: e.targetAppId,
                    path: g(e.path),
                    envVersion: e.envVersion
                },
                e)
            },
            miniProgram: {
                navigateBack: function(e) {
                    e = e || {},
                    f(function() {
                        i("invokeMiniProgramAPI", {
                            name: "navigateBack",
                            arg: {
                                delta: e.delta || 1
                            }
                        },
                        e)
                    })
                },
                navigateTo: function(e) {
                    f(function() {
                        i("invokeMiniProgramAPI", {
                            name: "navigateTo",
                            arg: {
                                url: e.url
                            }
                        },
                        e)
                    })
                },
                redirectTo: function(e) {
                    f(function() {
                        i("invokeMiniProgramAPI", {
                            name: "redirectTo",
                            arg: {
                                url: e.url
                            }
                        },
                        e)
                    })
                },
                switchTab: function(e) {
                    f(function() {
                        i("invokeMiniProgramAPI", {
                            name: "switchTab",
                            arg: {
                                url: e.url
                            }
                        },
                        e)
                    })
                },
                reLaunch: function(e) {
                    f(function() {
                        i("invokeMiniProgramAPI", {
                            name: "reLaunch",
                            arg: {
                                url: e.url
                            }
                        },
                        e)
                    })
                },
                postMessage: function(e) {
                    f(function() {
                        i("invokeMiniProgramAPI", {
                            name: "postMessage",
                            arg: e.data || {}
                        },
                        e)
                    })
                },
                getEnv: function(n) {
                    f(function() {
                        n({
                            miniprogram: "miniprogram" === e.__wxjs_environment
                        })
                    })
                }
            }
        },
        b = 1,
        R = {};
        return S.addEventListener("error",
        function(e) {
            if (!M) {
                var n = e.target,
                i = n.tagName,
                t = n.src;
                if (("IMG" == i || "VIDEO" == i || "AUDIO" == i || "SOURCE" == i) && -1 != t.indexOf("wxlocalresource://")) {
                    e.preventDefault(),
                    e.stopPropagation();
                    var o = n["wx-id"];
                    if (o || (o = b++, n["wx-id"] = o), R[o]) return;
                    R[o] = !0,
                    wx.ready(function() {
                        wx.getLocalImgData({
                            localId: t,
                            success: function(e) {
                                n.src = e.localData
                            }
                        })
                    })
                }
            }
        },
        !0),
        S.addEventListener("load",
        function(e) {
            if (!M) {
                var n = e.target,
                i = n.tagName;
                n.src;
                if ("IMG" == i || "VIDEO" == i || "AUDIO" == i || "SOURCE" == i) {
                    var t = n["wx-id"];
                    t && (R[t] = !1)
                }
            }
        },
        !0),
        n && (e.wx = e.jWeixin = N),
        N
    }
});

编写html代码

<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8" />
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title></title>
	<button class="btn btn_primary" id="onMenuShareAppMessage">onMenuShareAppMessage</button>
</head>

<body>

</body>
<script src="http://apps.bdimg.com/libs/jquery/1.9.1/jquery.min.js"></script>
<script type="text/javascript" src="jweixin-1.0.0.js"></script>
<script type="text/javascript">
	$(function() {
	
    //对url进行编码

    var localUrl = encodeURIComponent(location.href.split('#')[0]);
    //url传到后台格式
    // var Url =localUrl;
	alert(localUrl);
    //这几个参数都是后台从微信公众平台获取到的
    var nonceStr, signature, timestamp, appId, shareUrl;
    $.ajax({
        //后台获取参数接口
       // url: "http://ym1.jiang178.com:8089/send/app/message/weiSign?url" + localUrl,
	     url: "http://ym1.jiang178.com/weiSign?url=" + localUrl,
        // beforeSend: function(xhr) {
        //     xhr.setRequestHeader("Token", getCookie("token"));
        // },
        type: 'get',
        success: function(data) {
            //得到参数
		    appId = "wx5e0c69abe17926d8";
		    timestamp = data.timestamp;
		    signature = data.signature;
		    nonceStr = data.nonceStr;
		    shareUrl = "http://ym1.jiang178.com/share.html";
			
			wx.config({
				debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
				appId: appId, // 必填,企业号的唯一标识,此处填写企业号corpid
				timestamp: timestamp, // 必填,生成签名的时间戳
				nonceStr: nonceStr, // 必填,生成签名的随机串
				signature: signature,// 必填,签名,见附录1
				jsApiList: [
					'updateTimelineShareData',
					'updateAppMessageShareData'
				]
			});
			wx.ready(function () {      //需在用户可能点击分享按钮前就先调用
				wx.updateTimelineShareData({
					title: "eeeeeee",// 分享标题
					desc: "eeeeeee", // 分享描述
					link: shareUrl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
					imgUrl: "http://jlpa.jiang178.com/home/ubuntu/JLProd/upload/image/20191029/1572311071647000597.png", // 分享图标
					success: function () {
						// alert("分享成功");
					}
				})
			});

			//自定义“分享给朋友”及“分享到QQ”按钮的分享内容(1.4.0)
			wx.ready(function () {   //需在用户可能点击分享按钮前就先调用
				wx.updateAppMessageShareData({
					title: "eeeeeee", // 分享标题
					desc: "eeeeeee", // 分享描述
					link: shareUrl, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
					imgUrl: "http://jlpa.jiang178.com/home/ubuntu/JLProd/upload/image/20191029/1572311071647000597.png", // 分享图标
					success: function () {
						// alert("分享成功");
					}
				})
			});	
		}
    });
	

        

})
</script>

</html>

4.服务器及后台配置

在这里插入图片描述

TIP:**返回签名接口,html文件,js安全约束文件在同一个包下
需要对返回签名接口配置转发,转发路径为服务器路径

4.1代码配置转发

在这里插入图片描述

package com.weifeng.filter;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;


@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {

    @Override

    public void addCorsMappings(CorsRegistry registry) {

        registry.addMapping("/**")

                .allowedOriginPatterns("*")

                .allowCredentials(true)

                .allowedMethods("GET", "POST", "DELETE", "PUT")

                .maxAge(3600);
    }

    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**").addResourceLocations("file:/home/zhouziwei/share/");

    }
}

请求get ,post 方法的工具类

package com.weifeng.utils;

import com.alibaba.fastjson.JSONObject;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.ParseException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;
import org.apache.http.util.EntityUtils;

import java.io.IOException;
import java.net.URI;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

public class HttpClientUtil {
    /**
     *  描述:发送get请求
     * @param url 请求URL
     * @param param 请求参数 key:value url携带参数 或者无参可不填
     * @author zhouziwei
     * @date 2021/3/10 17:56
     */
    public static String doGet(String url, Map<String, String> param) {

        // 创建Httpclient对象
        CloseableHttpClient httpclient = HttpClients.createDefault();

        String resultString = "";
        CloseableHttpResponse response = null;
        try {
            // 创建uri
            URIBuilder builder = new URIBuilder(url);
            if (param != null) {
                for (String key : param.keySet()) {
                    builder.addParameter(key, param.get(key));
                }
            }
            URI uri = builder.build();

            // 创建http GET请求
            HttpGet httpGet = new HttpGet(uri);

            // 执行请求
            response = httpclient.execute(httpGet);
            // 判断返回状态是否为200
            if (response.getStatusLine().getStatusCode() == 200) {
                resultString = EntityUtils.toString(response.getEntity(), "UTF-8");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (response != null) {
                    response.close();
                }
                httpclient.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return resultString;
    }

    public static String doGet(String url) {
        return doGet(url, null);
    }

    /**
     *  描述:发送post请求
     *
     * @author zhouziwei
     * @date 2021/3/19 15:01
     */
    public static String send(String url, JSONObject jsonObject, String encoding) throws ParseException, IOException{
        String body = "";

        //创建httpclient对象
        CloseableHttpClient client = HttpClients.createDefault();
        //创建post方式请求对象
        HttpPost httpPost = new HttpPost(url);

        //装填参数
        StringEntity s = new StringEntity(jsonObject.toString(), "utf-8");
        s.setContentEncoding(new BasicHeader(HTTP.CONTENT_TYPE,
                "application/json"));
        //设置参数到请求对象中
        httpPost.setEntity(s);
        System.out.println("请求地址:"+url);
//        System.out.println("请求参数:"+nvps.toString());

        //设置header信息
        //指定报文头【Content-type】、【User-Agent】
//        httpPost.setHeader("Content-type", "application/x-www-form-urlencoded");
        httpPost.setHeader("Content-type", "application/json");
        httpPost.setHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");
        httpPost.setHeader("Authorization","Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE2NDc1NzE0NTgsInN1YiI6IntcInBob25lXCI6XCIxMzU5MTQ2MjA4OVwiLFwiY29tcGFueUlkXCI6MCxcIm1vZGVsSWRcIjpudWxsLFwiaXNBZG1pblwiOjF9IiwiaWF0IjoxNjE2MDM1NDU4OTU4fQ.Z22zyXgbMraI3EICf0b8j39WAZzMze9srN_CW5PKBhPJp-qEmhaZlrLB98vOAjDnfd8NWuw_bTeio_hHxVz4xg");

        //执行请求操作,并拿到结果(同步阻塞)
        CloseableHttpResponse response = client.execute(httpPost);
        //获取结果实体
        HttpEntity entity = response.getEntity();
        if (entity != null) {
            //按指定编码转换结果实体为String类型
            body = EntityUtils.toString(entity, encoding);
        }
        EntityUtils.consume(entity);
        //释放链接
        response.close();
        return body;
    }

    /**
     *  描述:发送post请求
     * @param url 请求URL
     * @param param 请求参数 key:value url携带参数 或者无参可不填
     * @author zhouziwei
     * @date 2021/3/10 17:56
     */
    public static String doPost(String url, Map<String, String> param) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建参数列表
            if (param != null) {
                List<NameValuePair> paramList = new ArrayList<>();
                for (String key : param.keySet()) {
                    paramList.add(new BasicNameValuePair(key, param.get(key)));
                }
                // 模拟表单
                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(paramList);
                httpPost.setEntity(entity);
            }
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return resultString;
    }


    /**
     * 发送post 请求
     * @param url 请求地址
     * @param json 请求参数
     * @return
     */
    public static String doPostJson(String url, String json) {
        // 创建Httpclient对象
        CloseableHttpClient httpClient = HttpClients.createDefault();
        CloseableHttpResponse response = null;
        String resultString = "";
        try {
            // 创建Http Post请求
            HttpPost httpPost = new HttpPost(url);
            // 创建请求内容
            StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
            httpPost.setEntity(entity);
            // 执行http请求
            response = httpClient.execute(httpPost);
            resultString = EntityUtils.toString(response.getEntity(), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                response.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return resultString;
    }
}

OK!

   } finally {
        try {
            response.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    return resultString;
}


/**
 * 发送post 请求
 * @param url 请求地址
 * @param json 请求参数
 * @return
 */
public static String doPostJson(String url, String json) {
    // 创建Httpclient对象
    CloseableHttpClient httpClient = HttpClients.createDefault();
    CloseableHttpResponse response = null;
    String resultString = "";
    try {
        // 创建Http Post请求
        HttpPost httpPost = new HttpPost(url);
        // 创建请求内容
        StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
        httpPost.setEntity(entity);
        // 执行http请求
        response = httpClient.execute(httpPost);
        resultString = EntityUtils.toString(response.getEntity(), "utf-8");
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            response.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return resultString;
}

}


# OK!



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值