微信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;

    },

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值