二维码在网络和生活中的应用比比皆是。可我们也能发现,在商场、超市、菜市场等形形色色的场合,为了同时支持微信、支付宝,必须摆出2个二维码,这给商家、扫码者都带来了极大的不便。能不能将2个二维码合二为一,使得微信用户、支付宝用户,都扫同一个二维码呢?答案是肯定的。
合并原理:
二维码,就是用一个大方块中不同的小方格是否被使用(黑白)来表达各种信息。微信的收款码也罢,支付宝的收款码也罢,是将我们的微信号或支付宝号、收款数额等信息,先加密后以BASE64编码,发送到微信或支付宝的后台服务器进行处理。合并收款码,就是利用一个“中间服务器”,相当于一个“代理人”,将多个收款码集中在一起,并根据扫码者是微信还是支付宝,自动向各自的后台分别提供其所需的正确的收款信息。
开发思路:
知道了合并的原理,制作一个微信支付宝收款二维码合并程序,就比较简单了。其核心是用到二个二维码开发库,一个是Zxing,一个是Zint。根据开发语言,自己可选择下载。
(1)我们需要选择一个“中间服务器”,比如大名鼎鼎的heyfox.herokuapp.com.
(2)紧接着,准备好微信和支付宝的收款二维码,利用二维码识别开发接口,将他们的文字信息判读出来。假设分别得到了:
wxp://f2f0p9EKLQuvVi7ni3bKb0_-fE0HFR3X7xjO
HTTPS://QR.ALIPAY.COM/FKX08744TYN8GRQ1BZSSAC
核心代码:利用Zxing二维码开发库
void __fastcall TForm1::bWxClick(TObject *Sender)
{
//open an image
OpenDialog1->Filter=L"图片文件(*.jpg,*.png,*.bmp,*.gif,*.tif)|*.jpg;*.png;*.bmp;*.gif;*.tif";
if(OpenDialog1->Execute(Handle))
{
usWx=fileToText(OpenDialog1->FileName);
AnsiString ns= usWx;
if(StrLComp(ns.c_str(),"wxp://",6)==0)
imgWx->Picture->LoadFromFile(OpenDialog1->FileName);
else
{
return;
}
}
}
(3)将上一步得到的文字信息,各取出一部分并进行合并,得到下面类似的文字:
https://heyfox.herokuapp.com/pay?ali=FKX08744TYN8GRQ1BZSSAC&wx=f2f0p9EKLQuvVi7ni3bKb0_-fE0HFR3X7xjO
(4)将第3步的文字内容,转为二维码,大功即靠成矣!
核心代码:利用zint二维码开发库
void __fastcall TForm1::zCombineClick(TObject *Sender)
{
if(!imgWx->Picture->Graphic || !imgZfb->Picture->Graphic )
{
ShowMessage("请先打开微信、支付宝收款码!");
return;
}
UTF8String source=L"https://heyfox.herokuapp.com/pay?ali=" +usZfb.SubString(23,usZfb.Length()-22)+L"&wx="+
usWx.SubString(7,usWx.Length()-6);
//生成二维码
getQrCode(source);
}
如果想下载一个免费的运行于PC端的微信支付宝收款二维码合并器,可以从CSDN下载。这个工具使用起来也很简单,只要先准备好你的微信、支付宝收款码图片,再选择一个Logo,就OK了。
它的操作界面,类似于下图:
知道了原理和方法,合并更多的收款二维码,也就不在话下了。
好了,赶紧告诉周围那些采用二维码收款的朋友,用一个二维码合并工具,将他们的收款二维码合并吧。作为一个商家,如果别人都在面前摆放2个二维码,而你只要摆放1个,向你付款的微信用户也好,支付宝用户也好,扫同一个二维码,一定会显示很潮吧!
如果有什么不明白之处,就关注我的头条号,与我直接联系。第1次头条发文,不妥之处,希予海涵。
18.3.17 智有不明, 首发于今日头条