微信jssdk 签名获取方法

这篇具有很好参考价值的文章主要介绍了微信jssdk 签名获取方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

using Google.Protobuf.WellKnownTypes;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.Networking.Types;

public class JsSdkTicket : MonoBehaviour
{
    [DllImport("__Internal")]
    private static extern void OpenWechatShare(string encodeURIPtr);

    [DllImport("__Internal")]
    private static extern void OpenWechatShareMenu(string appId, string time_stamp, string noncestring, string signatureStr);

    [DllImport("__Internal")]
    private static extern string GetCurWebUrl();

    public class AccessToken
    {
        public string access_token { get; set; }

        public double expires_in { get; set; }
    }

    public class JSTicket
    {
        public int errcode { get; set; }

        public string errmsg { get; set; }

        public string ticket { get; set; }

        public string expires_in { get; set; }
    }

    private string createNonceStr()
    {
        int length = 16;
        string chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        string str = "";
        System.Random rad = new System.Random();
        for (int i = 0; i < length; i++)
        {
            str += chars.Substring(rad.Next(0, chars.Length - 1), 1);
        }
        return str;
    }
    //SHA1哈希加密算法  
    public static string SHA1_Hash(string str_sha1_in)
    {
        SHA1 sha1 = new SHA1CryptoServiceProvider();
        byte[] bytes_sha1_in = System.Text.UTF8Encoding.Default.GetBytes(str_sha1_in);
        byte[] bytes_sha1_out = sha1.ComputeHash(bytes_sha1_in);
        string str_sha1_out = BitConverter.ToString(bytes_sha1_out);
        str_sha1_out = str_sha1_out.Replace("-", "").ToLower();
        return str_sha1_out;
    }

    public string GetSha1(string str)
    {
        //建立SHA1对象

        SHA1 sha = new SHA1CryptoServiceProvider();
        //将mystr转换成byte[]
        ASCIIEncoding enc = new ASCIIEncoding();
        byte[] dataToHash = enc.GetBytes(str);
        //Hash运算
        byte[] dataHashed = sha.ComputeHash(dataToHash);
        //将运算结果转换成string
        string hash = BitConverter.ToString(dataHashed).Replace("-", "").ToLower();
        return hash;
    }

    public IEnumerator GetWechatToken()
    {
        string appID = "wx22db6c710f661f68";
        string appSecret = "ba47bf18ad036518310145743cdc7a04";
        string url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appID}&secret={appSecret}";
        using UnityWebRequest webRequest = UnityWebRequest.Get(url);
        yield return webRequest.SendWebRequest();
        if (webRequest.result == UnityWebRequest.Result.Success)
        {
            var json = webRequest.downloadHandler.text;
            if (!string.IsNullOrEmpty(json))
            {
                AccessToken atoken = JsonUtility.FromJson<AccessToken>(json);
                tip = atoken.access_token;
                //json={"access_token":"71_VWNQS5lobipBuw0cpMXycMlhN5l-cP0lCWyVCAd8xfbxbMLID6ku2Tttw6ivwyjSkp1HIuTw-29bVFCmuHl78GvoPnaJYhsRVO5_Tslr1HJa3Ayp4G8tzf5y74MKPEhAIAVAP","expires_in":7200};
                string jsapi_url = $"https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token={atoken.access_token}&type=jsapi";
                using UnityWebRequest jsapiRequest = UnityWebRequest.Get(url);
                yield return jsapiRequest.SendWebRequest();
                if (jsapiRequest.result == UnityWebRequest.Result.Success)
                {
                    //{"errcode":0,"errmsg":"ok","ticket":"LIKLckvwlJT9cWIhEQTwfCAOltWVYohgnqfFqTJCnBfBw3-pEXDs3v7UrlsEJte7DaGDvYoxD4znvTviQQM5IA","expires_in":7200}
                    var tickitJson = webRequest.downloadHandler.text;
                    JSTicket jSTicket = JsonUtility.FromJson<JSTicket>(tickitJson);
                    Debug.Log("gcj: " + jSTicket);
                    string JSTicketTicket = jSTicket.ticket;
                    tip = "JSTicketTicket: "+ JSTicketTicket;
                    TimeSpan span = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
                    string timestamp = Convert.ToInt64(span.TotalSeconds).ToString();
                    string nonceStr = createNonceStr();

                    //签名用的url必须是调用JS接口页面的完整URL。

                    string UrlMsg = "";
                    try
                    {
                        UrlMsg = GetCurWebUrl();

                        // 这里参数的顺序要按照 key 值 ASCII 码升序排序  
                        string rawstring = "jsapi_ticket=" + JSTicketTicket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + UrlMsg + "";

                        //string signature = FormsAuthentication.HashPasswordForStoringInConfigFile(rawstring, "SHA1").ToLower();
                        string signature = GetSha1(rawstring);
                        tip = "signature: " + signature;
                        //Hashtable signPackage = new Hashtable();
                        //signPackage.Add("appId", "wx22db6c710f661f68");
                        //signPackage.Add("nonceStr", nonceStr);
                        //signPackage.Add("timestamp", timestamp);
                        //signPackage.Add("url", url);
                        //signPackage.Add("signature", signature);
                        //signPackage.Add("rawString", rawstring);
                        //signPackage.Add("JSTicketTicket", JSTicketTicket);
                        OpenWechatShareMenu(appID, timestamp, nonceStr, signature);
                    }
                    catch (System.Exception e)
                    {
                        UnityEngine.Debug.Log(e.Message);
                    }


                }
            }
        }
    }

    string tip = "";
    private void OnGUI()
    {
        GUI.Label(new Rect(200, 200, 500, 500), tip);
    }

    void Start()
    {
        //StartCoroutine( GetWechatToken());

        //TimeSpan span = DateTime.Now.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
        //string timestamp = "1692415454"; //Convert.ToInt64(span.TotalSeconds).ToString();
        //string nonceStr = "yCPqfcy4DRVu3QCH"; //createNonceStr();

        //Debug.Log("timestamp: "+timestamp);
        //Debug.Log("nonceStr: "+nonceStr);

        //string JSTicketTicket = "LIKLckvwlJT9cWIhEQTwfCAOltWVYohgnqfFqTJCnBdvECHdP06M2ysW3sQqCTMv8tgUxU9av9Dn8ghivMZ0PQ";
        //Debug.Log("JSTicketTicket: " + JSTicketTicket);

        签名用的url必须是调用JS接口页面的完整URL。

        //string UrlMsg = "";
        //try
        //{
        //    UrlMsg = "http://localhost/WebGL/"; //GetCurWebUrl();

        //    Debug.Log("UrlMsg: " + UrlMsg);

        //    //jsapi_ticket=LIKLckvwlJT9cWIhEQTwfCAOltWVYohgnqfFqTJCnBdvECHdP06M2ysW3sQqCTMv8tgUxU9av9Dn8ghivMZ0PQ&noncestr=yCPqfcy4DRVu3QCH&timestamp=1692415454&url=http://localhost/WebGL/
        //    // 这里参数的顺序要按照 key 值 ASCII 码升序排序  
        //    string rawstring = "jsapi_ticket=" + JSTicketTicket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + UrlMsg + "";

        //    //string signature = FormsAuthentication.HashPasswordForStoringInConfigFile(rawstring, "SHA1").ToLower();
        //    string signature = GetSha1(rawstring);
        //    tip = "signature: " + signature;

        //    //cf839bdf7af95e5764c3eea8459c8c6acf112081
        //    Debug.Log(tip);

        //    //Hashtable signPackage = new Hashtable();
        //    //signPackage.Add("appId", "wx22db6c710f661f68");
        //    //signPackage.Add("nonceStr", nonceStr);
        //    //signPackage.Add("timestamp", timestamp);
        //    //signPackage.Add("url", url);
        //    //signPackage.Add("signature", signature);
        //    //signPackage.Add("rawString", rawstring);
        //    //signPackage.Add("JSTicketTicket", JSTicketTicket);
        //    //OpenWechatShareMenu(appID, timestamp, nonceStr, signature);
        //}
        //catch(Exception ex)
        //{

        //}

    }
}
 

js部分代码

    GetCurWebUrl: function () {

        // var returnStr = window.top.location.href;

        // var buffer = _malloc(lengthBytesUTF8(returnStr) + 1);

        // writeStringToMemory(returnStr, buffer);

        // return buffer;

        var returnStr = window.top.location.href;

        var bufferSize = lengthBytesUTF8(returnStr)+1;

        var buffer = _malloc(bufferSize);

        stringToUTF8(returnStr, buffer, bufferSize);

        return buffer;

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

到了这里,关于微信jssdk 签名获取方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • uniapp移动端——企业微信H5调用jssdk实现扫一扫,通过weixin-java-cp获取ticket签名,配置config

    背景: 使用企业微信开发扫一扫功能 可信域名验证  (1)企业微信的可信域名需要和企业微信的备案主体一致。 域名备案主体可通过站长工具查看域名备案主体。https://icp.chinaz.com/ 企业微信备案主体可以咨询管理员 (2)通过nginx配置域名归属验证txt文件 具体操作详见: htt

    2024年01月25日
    浏览(41)
  • Python零基础教程6——编辑器的选择(IDLE?Visual Studio Code?PyCharm?Anaconda?)

    上一节课是1-5节课复盘 大家无论之前有没有看过 都对前面的知识有了一定的了解 我在其中提到我的2023年总结 没人评论的事 没想到真有热心肠的小伙伴帮忙 再次感谢! 有评必回呀,互动起来! 这节课就是复盘之后产生的 遂 更加贴合实际! 在我们熟悉了一定的编程之后 我

    2024年01月25日
    浏览(66)
  • Visual Studio Code设置中文的方法

    visual studio Code这是一款编程软件,可以进行c语言文件的编辑操作,很多编程专业的小伙伴经常会使用该软件进行编辑,Visual Studio Code的功能非常的强大,该软件提供很多个版本,有些版本之间可能有的功能有些差异,越是新版,功能越是更加的丰富,但是我们下载的Visual

    2024年02月04日
    浏览(66)
  • Visual Studio Code 连接远程服务器方法

    1、输入用户名和服务器ip连接远程服务器 2、选择配置文件 配置文件路径:C:UsersAdministrator.sshconfig config的内容大致如下: 3、根据配置的用户名新建窗口,连接后即可打开文件夹,编辑代码 这个步骤,如果出现Host key verification failed 类似错误,C:UsersAdministrator.sshknown_hos

    2024年01月23日
    浏览(60)
  • 修改『Visual Studio Code(VS Code)』插件默认安装路径的方法

    提示:文章中“『』”符号“加粗”都为着重说明,此二者同时使用一般为输入内容。 作者希望将『Visual Studio Code(以下简称为“ VS Code ”)』的插件安装在 数据盘 (D盘),用于统一管理,因此需要修改VS Code插件 安装路径 。 VS Code插件默认的安装位置为: C:Users{个人用户名

    2024年02月07日
    浏览(66)
  • Ubuntu 18.04安装Visual Studio Code的方法

    因为博主用的是Visual Studio Code的开发环境,就在这篇博客中记录下在Ubuntu 18.04系统中安装VsCode的方法,此方法同样适用于Ubuntu 16.04。 安装的方法有很多,最直接的就是通过官网 https://code.visualstudio.com/Download 下载安装包: 然后用 dpkg -i 命令安装,但是从官网下载速度极其慢,

    2024年02月08日
    浏览(45)
  • Visual Studio Code中npm脚本找不到解决方法

    1.在运用npm途中,发现Visual Studio Code第一次打开时,npm脚本还在  2.第二次打开,就发现npm脚本不见了  3.上网查了一下,很多博主说被隐藏了,但是我隐藏哪里也没有  4.在网上尝试了俩种方法( 注意:以下俩种方法,对我出现npm脚本都没用,但是你们电脑可以尝试一下 )   方

    2024年02月08日
    浏览(47)
  • 解决方法:Visual Studio Code中npm脚本找不到

    第一步:通过 设置/用户设置/扩展/MPM 更改NPM默认配置,如下图所示 第二步:重启VS Code,并且 双击打开package.json文件 ,然后点击 资源管理器处的3个小点 , 勾选npm脚本选项 ,如图所示 然后就能都显示NPM脚本小窗口了。

    2024年02月10日
    浏览(46)
  • Ubuntu 18.04快速安装Visual Studio Code的方法及插件

    Ubuntu 18.04安装Visual Studio Code的方法_李71~李先森的博客-CSDN博客 Step1:update apt,安装依赖项: sudo apt update sudo apt install gnupg2 software-properties-common apt-transport-https wget Step2:使用wget命令导入Microsoft GPG key: wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | sudo apt-key add - Step3:激活

    2024年02月13日
    浏览(53)
  • 企业微信小程序用户信息获取以及JSSDK使用

    海马汇与企业微信小程序 企业微信小程序访问的是在线子应用(即可直接通过浏览器访问),因此只需将海马汇打包部署到服务器上即可。 海马汇子应用目前使用过两种模式: 纯原生海马汇框架开发 该模式所有子应用/页面都需要自己开发,不存在标准子应用,因此开发工

    2024年02月11日
    浏览(46)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包