Java实现微信⼩程序⽣成⼩程序⼆维码,并携带参数。
业务需求:⽣成⼩程序的⼆维码,并携带指定参数;
官⽅提供两个接⼝,我选择了imited,⽣成数量不受限制;
1.⾸先需要获取微信的access_token
/**
*获取微信accesstoken
*
*@paramwxappid
*@paramwxappkey
*@return
*/
publicstaticStringgetWxAcesstoken(Stringwxappid,Stringwxappkey)throwsCustomizeException{
StringtokenUrl="/cgi-bin/token?grant_type=client_credential&appid="+wxappid+"&cret="+wxappkey;
try{
Stringjsonstr=(tokenUrl);
JSONObjectjsonObject=bject(jsonstr);
if(nsKey("access_token")){
Stringaccesstoken=ing("access_token");
returnaccesstoken;
}el{
("未获取到token");
thrownewCustomizeException("未获取到token");
}
}catch(Exceptione){
("未获取到token");
thrownewCustomizeException(sage());
}
}
2.重写了⼀个发送http请求的⽅法
返回的格式是ByteArrayInputStream,它是⼀个访问数组的字节输⼊流
publicstaticByteArrayInputStreamndPost(StringURL,Stringjson){
InputStreaminputStream=null;
ByteArrayInputStreambyteArrayInputStream=null;
//创建默认的httpClient实例.
CloableHttpClienthttpclient=Default();
//创建httppost
HttpPosthttppost=newHttpPost(URL);
der("Content-type","application/json;chart=utf-8");
der("Accept","application/json");
try{
StringEntitys=newStringEntity(json,e("UTF-8"));
tentEncoding("UTF-8");
ity(s);
HttpResponrespon=e(httppost);
if(tusLine().getStatusCode()==_OK){
//获取相应实体
HttpEntityentity=ity();
inputStream=tent();
ByteArrayOutputStreamoutStream=newByteArrayOutputStream();
//创建⼀个Buffer字符串
byte[]buffer=newbyte[1024];
//每次读取的字符串长度,如果为-1,代表全部读取完毕
intlen=0;
//使⽤⼀个输⼊流从buffer⾥把数据读取出来
while((len=(buffer))!=-1){
//⽤输出流往buffer⾥写⼊数据,中间参数代表从哪个位置开始读,len代表读取的长度
(buffer,0,len);
}
//关闭输⼊流
();
//把outStream⾥的数据写⼊内存
byteArrayInputStream=newByteArrayInputStream(Array());
}
}catch(Exceptione){
tackTrace();
}finally{
//关闭连接,释放资源
try{
();
}catch(IOExceptione){
tackTrace();
}
}
returnbyteArrayInputStream;
}
3.第三步就是⽣成⼩程序⼆维码的逻辑
/**
*获取⼩程序菊花码
*parm:machineNo⼆维码想携带的参数
**/
publicStringgetWXCode(StringmachineNo)throwsCustomizeException{
privateStringappId="asdasdasd";//⾃⼰⼩程序的appid
privateStringcret="454654645564";//⾃⼰⼩程序的密钥
StringaiyunUrl="";
try{
//这⾥调⽤的是上⾯的获取access_token⽅法
Stringaccess_token=getWxAcesstoken(appId,cret);
Stringurl="/wxa/getwxacodeunlimit?access_token="+access_token;
Stringscene=machineNo;/携带参数放在scene内
Map
("scene",scene);
//这⾥的page如果没有的话可以不写,默认是跳主页,如果写了没有的页⾯的话,会返回错误信息
//("page","pages/index/index");
Stringjson=String(param);
ByteArrayInputStreaminputStream=ndPost(url,json);
//这⾥判断的是返回的图⽚还是错误信息,⼀般错误信息不会⼤于200
if(ble()<=200){
ByteArrayOutputStreambyteArrayOutputStream=newByteArrayOutputStream();
inti;
byte[]buffer=newbyte[200];
while((i=(buffer))!=-1){
(buffer,0,i);
}
Stringstr=newString(Array());
//错误信息的格式在官⽅⽂档⾥有
JSONObjectjsonObject=bject(str);
if("41030".equals(ing("errcode"))){
("所传page页⾯不存在,或者⼩程序没有发布");
thrownewCustomizeException("所传page页⾯不存在,或者⼩程序没有发布");
}elif("45009".equals(ing("errcode"))){
("调⽤分钟频率受限");
thrownewCustomizeException("调⽤分钟频率受限");
}
();
}
//上传阿⾥云,也可以不上传
StringaiyunUrl=ImgAndReturnImgUrlInputStream(inputStream,fileName,path);
//输出到本地的代码
FileOutputStreamfileOutputStream=newFileOutputStream("D:/");
inti;
byte[]buffer=newbyte[200];
while((i=(buffer))!=-1){
(buffer,0,i);
}
();
();
();
("⼆维码⽣成成功");
}catch(Exceptione){
("获取⼆维码异常");
thrownewCustomizeException(sage());
}
returnaiyunUrl;
}
4.⽤到的⾃定义的⼀个异常
publicclassCustomizeExceptionextendsException{
publicCustomizeException(Stringmessage){
super(message);
}
}
⾄此⼆维码⽣成成功!
本文发布于:2023-03-04 03:42:36,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/1677872556130484.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:微信二维码生成.doc
本文 PDF 下载地址:微信二维码生成.pdf
留言与评论(共有 0 条评论) |