生成微信小程序二维码图片

ASP.NET 语言实现

1、生成微信小程序二维码,需要获取微信小程序Access_Token。代码如下,先获取Access_Token

/// <summary>
/// 获取微信小程序Access_Token
/// </summary>
/// <param name="appId">小程序唯一凭证</param>
/// <param name="appSecret">小程序唯一凭证密钥</param>
/// <returns></returns>
public static string GetAccessToken(string appId, string appSecret)
{
    string access_token = string.Empty;
    try
    {
	    string token_url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}";
	    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(token_url);
	    //请求方式
	    myRequest.Method = "GET";
	    HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
	    Stream stream = myResponse.GetResponseStream();
	    XmlDictionaryReader xmlReader = JsonReaderWriterFactory.CreateJsonReader(stream, XmlDictionaryReaderQuotas.Max);
	    xmlReader.Read();
	    string xml = xmlReader.ReadOuterXml();
	    myResponse.Close();
	    stream.Close();
	    stream.Dispose();


	    XmlDocument doc = new XmlDocument();
	    doc.LoadXml(xml);
	    XmlElement rootElement = doc.DocumentElement;
	    access_token = rootElement.SelectSingleNode("access_token").InnerText.Trim();
	    return access_token;
    }
    catch (Exception ex)
    {
	    throw ex;
    }
}

2、生成微信小程序二维码,无限次数 

/// <summary>
/// 生成微信小程序二维码
/// </summary>
/// <param name="picPath"></param>
/// <param name="access_token"></param>
/// <param name="paramData"></param>
/// <param name="page"></param>
/// <param name="width"></param>
public static void GetWeChatCodeLimit(string picPath, string access_token, string paramData = null, string page = null, int width = 430)
{
    try
    {
	//这个路径生成的二维码是无限次数,scene参数最大32位
	string url = $"https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token={access_token}";
	Dictionary<string, object> dic = new Dictionary<string, object>();
	if (string.IsNullOrWhiteSpace(paramData))
	{
	    paramData = "id=123";
	}
	dic.Add("scene", paramData);     //必填,有不能为空,随便填好了
	if (!string.IsNullOrWhiteSpace(page))
	{
	    dic.Add("path", page);      //注意这里要用 path,而不是用page,官网有问题
	}
	dic.Add("width", width);
	string json = JsonHelper.GetJSON<Dictionary<string, object>>(dic);

	HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
	myRequest.Method = "POST";
	myRequest.ContentType = "application/json;charset=UTF-8";
	byte[] payload = Encoding.UTF8.GetBytes(json);
	myRequest.ContentLength = payload.Length;
	Stream writer = myRequest.GetRequestStream();
	writer.Write(payload, 0, payload.Length);
	writer.Close();

	HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
	Stream stream = myResponse.GetResponseStream();//返回图片数据流

	byte[] byteArray = StreamToBytes(stream);//将数据流转为byte[]
	if (byteArray.Length > 1000)
	{
	    File.WriteAllBytes(picPath, byteArray);
	}
	else
	{
	    //转字符串--报错
	    string str = Encoding.Default.GetString(byteArray);
	    throw new Exception(str);
	}
	myResponse.Close();
	stream.Close();
	stream.Dispose();
    }
    catch (Exception ex)
    {
	throw ex;
    }
}

 3、生成微信小程序二维码,有限次数

/// <summary>
/// 生成微信小程序二维码
/// </summary>
/// <param name="picPath"></param>
/// <param name="access_token"></param>
/// <param name="paramData"></param>
/// <param name="page"></param>
/// <param name="width"></param>
public static void CreateWeChatQrCode(string picPath, string access_token, string paramData = null, string page = null, int width = 430)
{
    try
    {
	//这个路径有限次数,1000,000个,要注意使用
	//string url = $"https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token={access_token}";
	//这个生成是小程序码,上面是二维码
	string url = $"https://api.weixin.qq.com/wxa/getwxacode?access_token={access_token}";
	if (!string.IsNullOrWhiteSpace(paramData))
	{
	    page += "?" + paramData;
	}
	Dictionary<string, object> dic = new Dictionary<string, object>();
	dic.Add("path", page);      //必填
	dic.Add("width", width);
	string json = JsonHelper.GetJSON<Dictionary<string, object>>(dic);

	HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
	myRequest.Method = "POST";
	myRequest.ContentType = "application/json;charset=UTF-8";
	byte[] payload = Encoding.UTF8.GetBytes(json);
	myRequest.ContentLength = payload.Length;
	Stream writer = myRequest.GetRequestStream();
	writer.Write(payload, 0, payload.Length);
	writer.Close();

	HttpWebResponse myResponse = (HttpWebResponse)myRequest.GetResponse();
	Stream stream = myResponse.GetResponseStream();//返回图片数据流

	byte[] byteArray = StreamToBytes(stream);//将数据流转为byte[]
	if (byteArray.Length > 1000)
	{
	    File.WriteAllBytes(picPath, byteArray);
	}
	else
	{
	    //转字符串
	    string str = Encoding.Default.GetString(byteArray);
	    throw new Exception(str);
	}
	myResponse.Close();
	stream.Close();
	stream.Dispose();
    }
    catch (Exception ex)
    {
	throw ex;
    }
}
/// <summary>
/// 将数据流转为byte[]
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
public static byte[] StreamToBytes(Stream stream)
{
    List<byte> bytes = new List<byte>();
    int temp = stream.ReadByte();
    while (temp != -1)
    {
	    bytes.Add((byte)temp);
	    temp = stream.ReadByte();
    }
    return bytes.ToArray();
}

小程序端实现

https://www.jianshu.com/p/0522d455d492

Java实现

PHP实现

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值