日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

微信签名的获取

發布時間:2023/12/13 综合教程 28 生活家
生活随笔 收集整理的這篇文章主要介紹了 微信签名的获取 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

當你要在微信中分享你的文章給好友,朋友圈的時候是要給微信發送一些數據的.比如 : 簽名 等

微信簽名獲取的地址 :https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421141115

微信公眾平臺接口調試工具地址 :https://mp.weixin.qq.com/debug/cgi-bin/apiinfo?t=index&type=%E5%9F%BA%E7%A1%80%E6%94%AF%E6%8C%81&form=%E8%8E%B7%E5%8F%96access_token%E6%8E%A5%E5%8F%A3%20/token

微信 JS 接口簽名校驗工具地址 :https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=jsapisign

前期準備 : 準備已經備案的域名 , 在公眾號配置白名單(放入服務器公網ip)和域名校驗

微信給了我們python獲取簽名的代碼,但是沒有給 token 和 jsapi_ticket

后端 :

  注意 : 要給access_token 和jsapi_ticket 做全局緩存 , 因為沒交錢的每天只能2000次,如果不緩存就廢了

# 獲取 access_token
def get_token(request):
    r = redis.Redis(connection_pool=pool, decode_responses=True)
    access_token = r.get("'wx:access_token")
    if access_token:
        return access_token
    try:
        appid = appid
        secret = secret
        # 請求token接口
        """
        https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
        """
        url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appid}&secret={secret}".format(
            appid=appid, secret=secret)
        response = requests.get(url)
        access_token = response.json()['access_token']

        """
        r = {"access_token":"ACCESS_TOKEN","expires_in":7200}   正確
        r = {"errcode":40013,"errmsg":"invalid appid"}   錯誤
        """
        # 緩存
        r.setex('wx:access_token', 7200, access_token)

        return access_token
    except Exception as e:
        return e


# 獲取 jsapi_ticket
def get_ticket(request, appid, secret):
    # 先在緩存中獲取
    r = redis.Redis(connection_pool=pool, decode_responses=True)
    ticket = r.get("wx:ticket")

    if ticket:
        # ticket = str(ticket, encoding="utf-8")
        return ticket
    else:
        try:
            token = get_token(request)
            print("-----token======", token)
            """
            https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
            """
            ticket_url = " https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={}&type=jsapi".format(token)
            get_ticket = requests.get(ticket_url).content.decode("utf-8")

            js_ticket = json.loads(get_ticket)
            ticket = js_ticket.get("ticket")
            r.setex("wx:ticket", 7200, ticket)
            return ticket
        except Exception as e:
            return e


# 獲得簽名
class Sign:

    def __init__(self, jsapi_ticket, url):
        self.ret = {
            'nonceStr': self.__create_nonce_str(),
            'jsapi_ticket': jsapi_ticket,
            'timestamp': self.__create_timestamp(),
            'url': url
        }
    
    # 隨機字符串
    def __create_nonce_str(self):
        import string
        return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(16))
    
    # 時間戳時間
    def __create_timestamp(self):
        return int(time.time())
    
    # 對所有待簽名參數按照字段名的ASCII 碼從小到大排序(字典序)后,使用URL鍵值對的格式(即key1=value1&key2=value2…)拼接成字符串string1
    def sign(self):
        string = '&'.join(['%s=%s' % (key.lower(), self.ret[key]) for key in sorted(self.ret)])
        self.ret['signature'] = hashlib.sha1(string.encode("utf-8")).hexdigest()
        return self.ret


# 發送簽名到前端,就行請求
def sign(request):
    if request.method == "POST":
        # 獲取前端傳過來的當前頁面的url,并且進行解碼
        url = request.POST.get("url")
        url = parse.unquote(url)
        # 傳給get_ticket
        ticket = get_ticket(request)
        sign = Sign(ticket, url)
        ret = sign.sign()
        reful = {
            "appId": appid,
            "signature": ret["signature"],
            "nonceStr": ret["nonceStr"],
            "timestamp": ret["timestamp"],
        }

        return JsonResponse(reful)


"""
返回信息
{"debug":false,"appId":"wx1c5f000057d68bb9","timestamp":1561105606,"nonceStr":"9JzMRz","signature":"9a458696bb443de9fb235c68f31fb60d4fe6c96a"}
"""

前端 :

  注意 :jsApiList 中 放入 translateVoice (別問為什么,我也不知道,就是不放就報錯 錯誤 : hideMenuItems:fail, the permission value is offline verifying )

$.ajax({
    url: 'http://qxds.weiyingqipai.cn/sign/',
    data: {
        // 獲取當前url,并編碼,后端解碼
        url: encodeURIComponent(location.href.split('#')[0])
    },
    // 同步請求
    async: false,
    type: 'post',
    dataType: 'text',
    success: function (msg) {
        console.log("msg", msg);
        // 從后臺獲取并json解碼
        var json = JSON.parse(msg);
        var appid = json["appId"];
        var nonceStr = json["nonceStr"];
        var timestamp = json["timestamp"];
        var signature = json["signature"];

        console.log("-------", json["appId"], json["signature"]);
        var a = {
            debug: false,
            appId: appid,
            timestamp: timestamp,
            nonceStr: nonceStr,
            signature: signature,
            jsApiList: ['checkJsApi', 'onMenuShareTimeline', 'onMenuShareAppMessage', 'hideOptionMenu', 'showOptionMenu', 'translateVoice']
        };
        wx.config(a);

        wx.ready(function () {
            console.log(a);
            // 發送給朋友
            wx.onMenuShareAppMessage({
                title: dataForWeixin.title,
                desc: dataForWeixin.desc,
                // 分享文章的url
                link: url,
                imgUrl: dataForWeixin.img,
                success: function () {
                    // 分享成功之后執行這個函數
                    _this.shaer_tips();

                },

            });

            // 分享到朋友圈
            wx.onMenuShareTimeline({
                title: dataForWeixin.title,
                desc: dataForWeixin.desc,
                link: 'http://' + url[2] + '/rukou',
                imgUrl: dataForWeixin.img,
                success: function () {
                    _this.shaer_p_tips();
                }
            });
        });

        _this.shaer_tips = function () {
            console.log("分享成功之后執行的這個函數==============")
        };
        _this.shaer_p_tips = function () {
        };
        _this.Reloadconfig = function (type) {
            m = type;
            // wx.config(window._Data.config);
            wx.ready(function () {
                if (m == 1) {

                    wx.hideMenuItems({
                        menuList: ['menuItem:share:timeline']
                    });
                    wx.onMenuShareAppMessage({
                        title: dataForWeixin.title,
                        desc: dataForWeixin.desc,
                        link: 'http://' + url[1] + '/rukou',
                        imgUrl: dataForWeixin.img,
                        success: function () {
                            _this.shaer_tips();
                        }
                    });
                } else {
                    // 隱藏按鈕
                    wx.hideMenuItems({
                        // 分享好友
                        menuList: ['menuItem:share:appMessage']
                    });
                    wx.showMenuItems({
                        // 分享朋友圈
                        menuList: ['menuItem:share:timeline']
                    });
                    wx.onMenuShareTimeline({
                        title: dataForWeixin.title,
                        desc: dataForWeixin.desc,
                        link: 'http://' + url[2] + '/rukou',
                        imgUrl: dataForWeixin.img,
                        success: function () {
                            _this.shaer_p_tips();
                        }
                    });
                }
            });
        }


    },
});

總結

以上是生活随笔為你收集整理的微信签名的获取的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。