Table of Contents
一、开发步骤如下 在微信二维码海报生成中,需要用到以下信息
1. 自定义菜单中设置一个菜单项,点击后返回二维码海报给用户
2. 接口接收到菜单点击之后,获取用户的头像、ID(可以使用OpenID)
3. 生成和用户关联的参数二维码,
4. 将参数二维码进行缩放
5. 将头像和参数二维码合并成新的参数二维码图片
6. 将新参数二维码图片做为水印合成到背景海报中
7. 将用户昵称,以及二维码时间戳(类型为临时二维码时)等文字合成到背景海报中
8. 将海报上传成临时图片素材
9. 将图片素材使用客服接口发送给用户。
二、图像处理关键点
1.用户默认头像是640像素的大图,将其切换成64位像素大小,以便放置在二维码中间。
2.微信二维码默认是430像素,将其缩放成300像素。
三、如何在用户输入关键字时自动回复图片,一张整体图。 第1种 是直接回复“图片消息”,这个的话因为图片是通过ID的方式使用的,所以你得先把图片存到公共平台上,也就是调用上传下载接口,然后才能回复图片消息。 第2种 是把它可以把它当作一个单一的图文类型回复就行,并且使用你的图片作为文章封面,不要写文章摘要,这样也能看到图片的。(如果用户打开文章的话就依然打开一个有你二维码的图片的网页(当然,做点简单的文字介绍可能会好一些))。这种方式的好处是你不用把图片上传公共平台,只需提供图片的url就行
四、用户关注公众号的方式
(一)通过图文
(二)通过二维码
(三)一键链接自动关注 朋友圈打广告的一些公众号可以直接关注的实现 https://blog.csdn.net/pksport/article/details/78189956
生成带用户标识的二维码海报菜单点击事件程序逻辑
#region 二维码海报
if (objectResult.EventKey == "rselfmenu_2_2")
{
#if DEBUG
_logger.LogInformation($"{DateTime.Now.ToString()}-var result = this._userPosterQrCodeService.GetUserPosterQrCodeByOpenId(i.FromUserName): {objectResult.FromUserName}");
#endif
this._customMessageService.SendCustomMessage(accessToken, objectResult.FromUserName, "正在为您生成个性化推广二维码海报,请稍等...");
//查找数据库看用户是否已经生成过二位码海报
var result = this._userPosterQrCodeService.GetUserPosterQrCodeByOpenId(objectResult.FromUserName);
result = null;
//未生成
if (result == null)
{
#if DEBUG
_logger.LogInformation($"{DateTime.Now.ToString()}-数据库里没该用户的海报记录,开始重新生成海报");
#endif
// var tmpresult = this._userPosterQrCodeService.GenerateUserPosterQrCodeMediaIdByOpenId(accessToken, objectResult.FromUserName);
//将生成的海报是一张带二维码的图片,将该图片上传至素材库,返回media_id
// this._userPosterQrCodeService.InsertUserPosterQrCode(tmpresult);
//向用户回复图文消息数据
// repayXmlString = PassiveUserReplyMessage.ImageMessageReplies(i.FromUserName, i.ToUserName, "pcexYSsrso19pDhC_MKfrMVGeUFp87NuJQHHAalnL7U7dpIwOLCCOVvorHA0BNvS");
//用图文消息回复该用户,回复内容为海报图片
// repayXmlString = PassiveUserReplyMessage.ImageMessageReplies(objectResult.FromUserName, objectResult.ToUserName, tmpresult.AssetUploadTemporaryResult.media_id);
// break;
}
广告词:
设置领取你的微信公众号专属海报
其他
(一)图像处理出现错误记录
A Graphics object cannot be created from an image that has an indexed pixel format. 解决办法 Try using a MemoryStream instead. 原文链接:https://forums.asp.net/t/1195630.aspx?A+Graphics+object+cannot+be+created+from+an+image+that+has+an+indexed+pixel+format+ https://stackoverflow.com/questions/17313285/graphics-on-indexed-image
(二)其他工具
QRCode是日本人开发的,ZXing是google开发,barcode4j也是老美开发的,barcode4j对一维条形码处理的很好。 参考资料:
1. C#图片处理示例(裁剪,缩放,清晰度,水印)
https://www.cnblogs.com/wu-jian/archive/2011/02/21/1959382.html
c# QRCode生成与解码二维码,圆角用户图像
http://www.cnblogs.com/yechangzhong-826217795/p/6734359.html
http://www.cnblogs.com/zxtceq/p/5845378.html
http://www.cnblogs.com/txw1958/p/weixin-poster.html.
ZXing c#
How to use? c#
https://www.cnblogs.com/daboluo/p/17843359.html