通过c#生成小程序二维码,适用于分享提成、关系绑定、上下级分销等业务场景
前言:需求更迭,需要实现生成小程序二维码功能。用户A生成将其分享给用户B,用户B扫描进入小程序成功支付后即给A带来相应的提成。
一、效果图
二、生成小程序二维码的方式
登录微信公众平台,页面顶部选择工具一栏,点击生成小程序二维码。在这里生成的二维码无法自定义样式、参数、页面。
使用官方定义的API进行生成,可以指定跳转的页面及参数,可以对图片大小等数据进行操作。
注意事项:
参数的长度不能够超过32位,如果使用GUID作为参数的话是需要把中间的横杠符号去掉的。
小程序跳转的页面是需要已经发布了的页面。
三、应用场景。
上下级分销小程序,通过生成的二维码对用户关系进行直接绑定。
带有拼团模块的小程序可直接通过二维码参加拼团等。
电商小程序可在商品详情生成带有商品信息的二维码,将商品标识、用户标识进行存入,其他用户通过该二维码支付成功即带来收益。
四、完整代码
一、获取accesstoken
///定义一个方法,请求官方api文档,获取token,参数是小程序的appid跟secret,可以在微信公众平台上直接复制下来
/// <summary>
/// 获取accesstoken
/// </summary>
/// <param name="appid"></param>
/// <param name="secret"></param>
/// <returns></returns>
public static string GetAccesstoken(string appid,string secret)
{
string token = HttpHelper.HttpGet("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret);
Newtonsoft.Json.Linq.JObject _jObject = Newtonsoft.Json.Linq.JObject.Parse(token);
var _value = _jObject["access_token"].ToString(); //取值
return _value;
}
///这个是上面定义的HttpGet 的方法,已经封装好了的,如果自己有定义好了的,就不用复制过去
/// <summary>
/// HTTP GET方式请求数据.
/// </summary>
/// <param name="url">URL.</param>
/// <returns></returns>
public static string HttpGet(string url)
{
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Method = "GET";
//request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.Timeout = 15000;
request.AllowAutoRedirect = false;
WebResponse response = null;
string responseStr = null;
try
{
response = request.GetResponse();
if (response != null)
{
StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
responseStr = reader.ReadToEnd();
reader.Close();
}
}
catch (Exception)
{
throw;
}
finally
{
request = null;
response = null;
}
return responseStr;
}
///上面的是获取token的方法,下面的是生成小程序二维码的方法
/// <summary>
/// 生成小程序二维码
/// </summary>
/// <param name="path">生成的小程序二维码存放的路径</param>
/// <param name="scene">参数 最多32位</param>
/// <param name="page">小程序页面路径 必须是已经发布了的</param>
/// <param name="width">二维码大小</param>
/// <param name="appid">小程序appid</param>
/// <param name="secret">小程序密钥</param>
/// <returns></returns>
public static bool CreateXcxQrCode(string path,string scene,string page,string width,string appid,string secret)
{
try
{
string token = GetAccesstoken(appid, secret);
string _url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token=" + token;
string strURL = _url;
System.Net.HttpWebRequest request;
request = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(strURL);
request.Method = "POST";
request.ContentType = "application/json;charset=UTF-8";
string options = "{\"scene\":\"" + scene + "\",\"page\":\"" + page + "\",\"width\":\"" + width + "\"}";
byte[] payload;
payload = System.Text.Encoding.UTF8.GetBytes(options);
request.ContentLength = payload.Length;
System.IO.Stream writer = request.GetRequestStream();
writer.Write(payload, 0, payload.Length);
writer.Close();
System.Net.HttpWebResponse response;
response = (System.Net.HttpWebResponse)request.GetResponse();
System.IO.Stream s;
s = response.GetResponseStream();
byte[] val = StreamToBytes(s);
System.IO.File.WriteallBytes(path, val);
s.dispose();
writer.dispose();
}
catch(Exception e)
{
log4net.LogManager.GetLogger("生成小程序二维码异常").Info(e);
return false;
}
return true;
}
public static byte[] StreamToBytes(System.IO.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();
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。