我自己的店铺,想用微信收款二维码能永久。应该打印哪个二维码?是不是永久的?就单单只用来收款

&&&&&&& 简单介绍一下该功能所在的项目背景:C#语言编写的WPF客户端应用程序,在&结账&模块中,打印出的收款小票上需要显示一个二维码,服务生拿着小票去找顾客,顾客可以选择现金、银行卡等普通支付方式,也可以直接扫小票上的二维码进行微信支付。用于打印小票的模板使用FastReport制作。结账功能和收款单打印模板已经在使用,现在只需要在原有模板的基础上进行修改。
&&&&&&& 首先,我们要明确一点:二维码其实就是一张图片。因此和打印条形码不同,打印二维码,只需要使用FastReport中的图片控件就可以了。双击图片控件后,有四种方式可以用于设置图片的数据源,如下图所示:
&&&&&&&&&&&&&&&&&&&&&&&
&&&&&&& 这些方法大家一看就知道怎么用,本项目中我们使用最下面这张大图中的&数据列&方法,用FastReport数据源中的内容对图片进行设置。
&&&&&&& 以本项目的结账收款单打印模板为例,实现打印二维码的步骤如下所示:
1、在程序中获取需要打印的二维码数据,并将数据源传给打印模板
&&&&&&& 在该项目中,使用DataSet向打印模板传递数据源,使用Dictionary&string, string&向打印模板传递参数。传递的方法这里不再详述。
&&&&&&& 为了实现打印二维码这个功能,在传递给打印模板的数据源DataSet中添加了一张用于显示二维码的&微信数据&表,还添加了一个参数&微信二维码&。&微信二维码&参数中保存了这个二维码的地址,若地址为空字符串,说明没有微信二维码,不需要打印。在程序端,调用下面的方法AddQRCodeForPrint为打印模板添加二维码所需的数据。微信二维码图片的url(例:weixin://wxpay/payurl?pr=9BF4WY0)是线上的代码生成的,这里不做介绍。
/// &summary&
/// 向打印模板添加微信二维码
/// &/summary&
/// &param name="dsPrint"&数据源&/param&
/// &param name="objdict"&参数&/param&
/// &param name="codeURL"&微信二维码图片URL&/param&
public static void AddQRCodeForPrint(DataSet dsPrint, Dictionary&string, string& objdict, String codeURL)
//添加参数:微信二维码图片URL
objdict.Add("微信二维码", codeURL);
//将微信二维码写入数据源
Bitmap bp = GetQrImage(codeURL);
MemoryStream ms = new MemoryStream();
bp.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp);
Byte[] code = ms.ToArray();
DataTable dt = new DataTable();
dt.Columns.Add("二维码", typeof(Byte[]));
DataRow dr = dt.NewRow();
dr["二维码"] =
dt.Rows.Add(dr);
dt.TableName = "微信数据";
dsPrint.Tables.Add(dt);
if (objdict != null && !objdict.ContainsKey("微信二维码"))
objdict.Add("微信二维码", "");
&&&&&&& 这个方法中,用于绘制二维码图形的方法GetQrImage如下所示:
/// &summary&
/// 绘制二维码
/// &/summary&
/// &param name="qrstr"&&/param&
/// &param name="ImageWidth"&&/param&
/// &param name="ImageHeight"&&/param&
/// &param name="savelocal"&&/param&
/// &returns&返回:二维码&/returns&
private static Bitmap GetQrImage(String qrstr, int ImageWidth = 256, int ImageHeight = 256, bool savelocal = false)
Dictionary&EncodeHintType, object& ht = new Dictionary&EncodeHintType, object&();
ht.Add(EncodeHintType.MARGIN, 1);
BitMatrix matrix = new MultiFormatWriter().encode(qrstr, BarcodeFormat.QR_CODE, ImageWidth, ImageHeight, ht);
Bitmap bitmap = new BarcodeWriter().Write(matrix); //toBitmap(matrix);
int[] rec = matrix.getEnclosingRectangle(); //二维码所有的位置及大小
前两位是位置
后两位是大小
Bitmap argb32bp = new Bitmap(ImageWidth, ImageHeight);
Graphics g = Graphics.FromImage(argb32bp);
System.Drawing.Point[] point = new System.Drawing.Point[3];
point[0] = new System.Drawing.Point(5, 5);
point[1] = new System.Drawing.Point(ImageWidth - 5, 5);
point[2] = new System.Drawing.Point(5, ImageHeight - 5);
g.FillRectangle(System.Drawing.Brushes.White, new System.Drawing.Rectangle(0, 0, ImageWidth, ImageHeight));
g.DrawImage(bitmap, point, new System.Drawing.Rectangle(rec[0], rec[1], rec[2], rec[3]), GraphicsUnit.Pixel);
argb32bp.SetResolution(120, 120);
if (savelocal)
String filename = DateTime.Now.ToString("yyyyMMddHHmmssfff") + ".png";
bitmap.Save(String.Format(@"{0}\{1}", System.Windows.Forms.Application.StartupPath, filename), System.Drawing.Imaging.ImageFormat.Png);
bitmap.Dispose();
return argb32
catch (Exception ex)
return null;
&&&&&& 上述方法需要添加的引用:System.Drawing、System.IO,以及一个名为zxing的动态库。(zxing的下载链接:)
2、在上面的方法中,程序端已经实现了向打印模板提供所需的数据,接下来需要修改打印模板,接收这些新添加的数据。
&&&&&&& 这里有一个简单的方法,能够为FastReport的数据源中添加一张表。那就是不直接双击打开打印模板,而是在打印模板的文件上右击,选择打开方式为&记事本&。在记事本中找到&Dictionary&&/Dictionary&这部分,在里面添加数据源和参数。以本项目的结账收款单打印模板为例,添加了一张用于显示二维码的表&微信数据&,还添加了一个用于确定是否需要打印二维码的参数&微信二维码&。
&&&&&&& 因此,需要在&Dictionary&&/Dictionary&中添加如下内容:
&TableDataSource Name="微信数据" ReferenceName="Data.微信数据" DataType="System.Int32" Enabled="true"&
&Column Name="二维码" DataType="System.Byte[]"/&
&/TableDataSource&
&Parameter Name="微信二维码" DataType="System.String"/&
&&&&&&& 保存并关闭打印模板的记事本文件。再双击打开打印模板,此时在FastReport的右侧边栏中,能看到数据源里已经多了一个&微信数据&表,如下图所示:
&&&&&& 这里的&二维码&就是步骤1中代码里绘制出的二维码图形,检查这个字段的属性,需要确保它的DataType是Byte[]型的。并且在下面的&参数&列表中,也能看到多了一个&微信二维码&参数。
&&&&&& 为打印模板新建一个数据区,用于打印二维码。点击&报表&&&&设置报表栏&菜单,在打开的窗体中点击&添加&按钮,添加&数据区&。将新添加的数据区重命名为Data_PictureCode。主要步骤如下图所示:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& && & & &&
&&&&&& 为什么要新建一个数据区,而不是在原来的数据区里添加二维码呢?因为当不需要打印二维码,也就是&微信二维码&参数为空时,我们可以直接把这个数据区隐藏,从而不用在打印出的小票上显示出空白的一大片来,也为客户节省纸张。
&&&&&& 在新添加的数据区中插入图片,如下图所示:
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& && &&
&&&&&& 双击图片,在图片编辑器的&数据列&中,选择&微信数据&表中的&二维码&。如下图所示:
&&&&&&& 最后,设置是否需要显示二维码所在的这个数据区。选择一个一定会打印的数据区,在这个数据区的BeforePrint事件中进行控制。首先为所选的数据区添加事件,在FastReport的右侧边栏中,进入到数据区的事件列表(点击那个闪电形状的按钮),在BeforePrint事件后面的编辑框内双击,即可为该数据区添加一个BeforePrint事件。该事件中的代码在打印数据区前执行,如下图所示:
&&&&&&& 在所选数据区的BeforePrint事件中添加如下代码,控制是否显示二维码所在的那个数据区:
private void Data10_BeforePrint(object sender, EventArgs e)
//获取微信二维码url
string codeURL=(String)Report.GetParameterValue("微信二维码");
//若微信二维码url为空,则不显示二维码数据区
if(codeURL=="")
Data_PictureCode.Visible=false;
&&&&&&& 代码和打印模板设计界面的切换按钮,在FastReport的左下角,见下图所示:
&&&&&&& 在进行了上述全部修改后,本项目的结账收款单上就能够打印出用于微信支付的二维码了。
阅读(...) 评论()微信收款二维码有效期是多久?
&&&&&&&&核心提示:长期有效。...
长期有效。
比比推微信导航(),集微信导航、微信第三方接口网站、微信运营为一体的微信管理平台!...
★★★★★一般推荐,鼎立推荐
《北京遇上西雅图之不二情书》中,女主人公在15岁的时候随父亲移民到澳门,并且在安家,之后便成为了公关,男主人公也是在小时候...
考试大纲的发布是考研过程中的一件大事,据说2017考研考试大纲可能会提前至8月下旬公布,下面是对今年考研大纲的一些预测及建议...
最近,一则关于“部分海淘洋奶粉不合格,严重时可能导致婴儿智力低下”的新闻引起了大家的广泛关注。央视报道一出,一票奶爸奶妈...
最近多地被暴雨侵袭,大家一定要注意出行安全。那么,暴雨天出行要注意什么呢?暴雨出行有什么注意事项呢?下面蚂蜂窝为您总结一下...
分享与收藏:&
本文关键字:
为您推荐更多相关文章
联系人:嘉客(先生)&&
会员: [当前在线]小齐原创,分享互联网基础,探寻其价值所在。
&&Powered by
(小齐是百度经验签约作家,此文曾在百度经验发表,原文有图&)
微信支付因便捷性以及微信的高粘度大有超过支付宝支付之势,试想一下,摆个地摊、上门送货给个二维码让客户微信扫一扫付款,免去麻烦的现金找零,没有支付宝的多重验证,是不是极其方便。
微信支付虽说只面对企业开放,由于门槛较高,审核时间较长,开通的企业并不多,还没有进入老(diao)百(si)姓(zhai)的生活,但是部分企业换一种思路给出了解决方案,市面上已有生成二维码供微信扫描的硬件和软件,也就是客户付款到他们的账号,他们再结算给你。
此文介绍手机客户端轻松实现微信收款:
1.各大应用市场下载乐刷商务版手机客户端,点击免费注册;
2.选择立即开通我要免费开通微信支付收款;
3.填写登陆账号和登陆密码,进入下一步‘
4.填写姓名、生身证号码、商户/店铺名称、手机号码(填写之后点击获取验证码)、手机验证码、选择省市以及详细地址、安全邮箱(找回密码等)、选择所属行业,进入下一步,填写收款账户信息(客户微信支付的钱回转到所填的银行卡上,需要填写开户行)
5.注册完之后即可回到登陆页用刚刚注册的账号签到(登陆),进入数字按钮界面,点击右下角微信支付;
6.输入收款金额,点击微信支付;
7.系统自动生成二维码,客户使用微信扫描二维码即可支付成功。
温馨提示:普通手续费为1%,可花费200元升级,升级之后手续费为0.78%}

我要回帖

更多关于 微信收款二维码能永久 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信