受欢迎的博客标签

Wechat-微信服务号Asp .Net Core开发实战记录(4)-微信服务号二维码海报生成及发送给用户

Published

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