我是靠谱客的博主 欢喜海燕,这篇文章主要介绍微信公众号 二维码场景统计 场景二维码,现在分享给大家,希望可以做个参考。

  之前接到了一个项目,要求在关注公众号的用户,推广下个用户,实行奖励模式(只有两级!)。然而,一脸懵,网站开发推广生成二维码,我知道怎么做,大不了记录用户Id,生成二维码,扫描的时候,获取用户Id,然后得到推荐者。微信公众号的,还真不知道头绪。好吧,那就先按照网站的思路进行开发,将存储在数据库中的用户Id和要跳转的地址拼接成最终的字符串,生成二维码,开始开发(依旧没有自信可以成功,┭┮﹏┭┮)。现实总是那个顺应人意,果然是不可以的,推荐的用户,如果没有关注,是没法直接跳转相应的地址的,如果把跳转地址去掉权限,那么,推荐的用户就不能关注公众号,也就是此推荐是无效的。。。(难过10分钟),各种在网上找解决方案,问各路大神,貌似我都没法解释清楚问题(自己的表达能力有待提高。。。),然后,只能硬着头皮再去查看微信公众号开发平台的文档了,抱着死马当活马医的态度,竟然柳暗花明了,超开心,下面的图,这个不就是我要的结果么(跳跃,开心)

 目前有2种类型的二维码,分别是临时二维码和永久二维码,前者有过期时间,最大为1800秒,但能够生成较多数量,后者无过期时间,数量较少(目前参数只支持1--100000)。两种二维码分别适用于帐号绑定、用户来源统计等场景。

 

 

与用户关联,我在项目中使用的是长期有效二维码,根据场景Id与用户Id对应,然后将生成的长期二维码图片保存在服务器上,直接使用(但是无奈的是有数量限制)。

以下上代码:

 


///
/// 二维码分享
测试使用
///
public class ShareCodeController
{
// GET: ShareCode
public ActionResult Index()
{
return View();
}
/*生成永久二维码*/
public
void getPerpetualQR(String account)
{
var accessToken = AccessTokenContainer.TryGetAccessToken(AppId, AppSecret);
var ticketMessage = QrCode.Create(accessToken,0,100);
var urlFormat = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket={0}";
GetTicketImage(ticketMessage.ticket, openId);
}
///
/// 通过ticket换取二维码
///
///票据
///二维码依照openId 命名
///相对路径 @"weixinHuLuerweima2"
/// 下载二维码成功后的物理路径:D:XXXXXX.comkkkerweima2201503031044566511190.jpg
public
string GetTicketImage(string TICKET, string openId)
{
string content = string.Empty;
string strpath = string.Empty;//生成的URL 也就是 关注的URL
string savepath = string.Empty;//图片保存的路径
string stUrl = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=" +(TICKET);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(stUrl);
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
HttpWebResponse myResponse = (HttpWebResponse)req.GetResponse();
strpath = myResponse.ResponseUri.ToString();
WebClient mywebclient = new WebClient();
// @"
var path = AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
var filePath = $"UploadImages\ShareCode";
path = $"{path}{filePath}\{DateTime.Now.ToString("yyy-MM")}";
if (!System.IO.Directory.Exists(path))
{
System.IO.Directory.CreateDirectory(path);//不存在就创建目录
}
savepath = $"{path}\{openId}.{myResponse.ContentType.Split('/')[1].ToString()}";
try
{
mywebclient.DownloadFile(strpath, savepath);//下载生成的二维码图片
}
catch (Exception ex)
{
savepath = ex.ToString();
}
}
return savepath.ToString();
}
}

如何识别呢? 就是在用户关注的事件中,可以获取到二维码场景值,根据二维码的场景值(在上面,已经将场景值和yoghurt一一对应存储),可以获取到用户的Id,即可获取到推广者的信息。 以下用户关注公众号事件处理场景值Id代码:


#region 用户关注公众号
///
/// 用户关注公众号
///
///
///
public async override Task OnEvent_SubscribeRequestAsync(RequestMessageEvent_Subscribe requestMessage)
{
try
{
if (AppID != null)
{
var userInfo = await UserApi.InfoAsync(AppID, base.WeixinOpenId);
if (userInfo == null)
{
Sprite.Agile.Logger.LoggerManager.Instance.Logger_Info($"获取用户信息失败");
}
else
{
Sprite.Agile.Logger.LoggerManager.Instance.Logger_Info($"获取用户信息,OpenId:{userInfo.openid}, WeixinOpenId:{WeixinOpenId}");
}
#region 处理用户信息
if (requestMessage.Event == Event.subscribe)
{
var user = usersRepository.GetUserByOpenId(userInfo.openid);
Sprite.Agile.Logger.LoggerManager.Instance.Logger_Info($"二维码场景值{userInfo.qr_scene}");
if (user == null)
{
user = new YueSaoUser
{
OpenId = userInfo.openid,
WeChatNickName = userInfo.nickname,
HeadImg = userInfo.headimgurl,
Status = Sprite.Agile.Domain.Status.Disabled,
UserType=Sprite.Agile.Model.Domain.Entities.UserType.User,
IsSubscribe = true
};
//判断是否通过扫描进入关注
if (userInfo.subscribe_scene == "ADD_SCENE_QR_CODE")
{
//暂时通过场景Id识别上级
var parent = usersRepository.GetUserByScanId(userInfo.qr_scene);
if(parent!=null)
{
user.ParentId = parent.Id;
}
}
usersRepository.AddUser(user);
}
else
{
user.OpenId = userInfo.openid;
user.HeadImg = userInfo.headimgurl;
user.WeChatNickName = userInfo.nickname;
user.IsSubscribe = true;
usersRepository.SaveUser(user);
}
}
#endregion
var responseMessage = requestMessage.CreateResponseMessage();
responseMessage.Content = $"  感谢您的关注";
return responseMessage;
}
else
{
Sprite.Agile.Logger.LoggerManager.Instance.Logger_Info($"用户关注事件, 微信商户信息为空:{requestMessage.ToUserName}");
return new ResponseMessageNoResponse();
}
}
catch (Exception ex)
{
Sprite.Agile.Logger.LoggerManager.Instance.Logger_Error(ex);
return new ResponseMessageNoResponse();
}
}
#endregion

转载于:https://www.cnblogs.com/kekelele/p/9973337.html

最后

以上就是欢喜海燕最近收集整理的关于微信公众号 二维码场景统计 场景二维码的全部内容,更多相关微信公众号内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部