| | |
| | | package cc.mrbird.febs.pay.util; |
| | | |
| | | import cc.mrbird.febs.common.utils.MallUtils; |
| | | import cc.mrbird.febs.common.utils.RedisUtils; |
| | | import cc.mrbird.febs.rabbit.producter.AgentProducer; |
| | | import cn.hutool.core.io.FileUtil; |
| | | import cn.hutool.core.text.StrFormatter; |
| | | import cn.hutool.core.util.ObjectUtil; |
| | | import cn.hutool.core.util.StrUtil; |
| | | import cn.hutool.http.HttpRequest; |
| | | import cn.hutool.http.HttpResponse; |
| | | import cn.hutool.json.JSONUtil; |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import org.dom4j.io.SAXReader; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.io.BufferedInputStream; |
| | | import java.io.File; |
| | | import java.io.FileOutputStream; |
| | | import java.security.MessageDigest; |
| | | import java.security.NoSuchAlgorithmException; |
| | | import java.util.Arrays; |
| | |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import java.io.InputStream; |
| | | import java.util.*; |
| | |
| | | return ""; |
| | | } |
| | | |
| | | |
| | | @Autowired |
| | | RedisUtils redisUtils; |
| | | |
| | | /** |
| | | * 获取ticket |
| | | * |
| | | * @param qrCodeParam |
| | | * @return |
| | | */ |
| | | public String getTicket(String qrCodeParam) { |
| | | RestTemplate restTemplate = new RestTemplate(); |
| | | String ticket = null; |
| | | // 拼接请求地址 |
| | | String CREATE_QRCODE_URL = "https://api.weixin.qq.com/cgi-bin/qrcode/create?access_token=TOKEN"; |
| | | String requestUrl = CREATE_QRCODE_URL.replace("TOKEN", "70_ECdQaX-QtNXZP9ugU_JEJGRYEADWrlQZNYrT2I2IRHsx6hx4_O8RY4VasWI97_ixia8vANTdnNRI_cT00toK7CX98513sQI8535eTFw3b-VQChEFZrRqTfNPdSoGYXgAIAVNM"); |
| | | // String requestUrl = CREATE_QRCODE_URL.replace("TOKEN", redisUtils.get(WechatConfigure.WX_ACCESS_TOKEN_REDIS_KEY).toString()); |
| | | // 创建临时带参二维码 |
| | | |
| | | JSONObject jsonObject = restTemplate.postForObject(requestUrl, |
| | | "{\"expire_seconds\": 604800, \"action_name\": \"QR_STR_SCENE\", \"action_info\": {\"scene\": {\"scene_str\": "+qrCodeParam+"}}}", |
| | | JSONObject.class); |
| | | // JSONObject jsonObject = HttpsUtil.request(requestUrl, "POST", "{\"expire_seconds\": 604800, \"action_name\": \"QR_SCENE\", \"action_info\": {\"scene\": {\"scene_id\": 123}}}"); |
| | | if (ObjectUtil.isNotEmpty(jsonObject)) { |
| | | String response = JSON.toJSONString(jsonObject); |
| | | if (!jsonObject.containsKey("errcode")) { |
| | | ticket = jsonObject.getString("ticket"); |
| | | System.out.println("临时带参二维码ticket成功" + response); |
| | | } else { |
| | | log.error("临时带参二维码ticket失败:" + response); |
| | | } |
| | | } |
| | | return ticket; |
| | | } |
| | | |
| | | /** |
| | | * 通过ticket换取二维码并保存二维码图片 |
| | | * |
| | | * @param ticket |
| | | * @param savePath |
| | | * @return |
| | | */ |
| | | //图片上传路径 |
| | | public static final String IMG_UPLOAD_PATH="/home/javaweb/webresource/ywg/wxcode"; |
| | | public String getQRcode(String ticket) { |
| | | |
| | | String SHOW_QRCODE_URL = "https://mp.weixin.qq.com/cgi-bin/showqrcode?ticket=TICKET"; |
| | | String requestUrl = SHOW_QRCODE_URL.replace("TICKET", ticket); |
| | | |
| | | String randomNum = MallUtils.getRandomNum(5); |
| | | String imgName="/user_" + randomNum + "_acode_1.jpg"; |
| | | String urlPrefix="https://ywgpzapi.meiao.biz/ywg/wxcode"; |
| | | String imgPath=IMG_UPLOAD_PATH+imgName; |
| | | if(!FileUtil.exist(imgPath)){ |
| | | try { |
| | | HttpResponse execute = HttpRequest.get(requestUrl).execute(); |
| | | InputStream inputStream = execute.bodyStream(); |
| | | File file = new File(imgPath); |
| | | FileUtil.writeFromStream(inputStream, file); |
| | | long uploadUrl = FileUtil.size(file); |
| | | //小于10kb重新生成 |
| | | if(uploadUrl<=10240){ |
| | | log.error("生成微信小程序码失败:图片大小异常:{}",uploadUrl); |
| | | return null; |
| | | } |
| | | } catch (Exception e) { |
| | | log.error("生成微信小程序码失败",e); |
| | | return null; |
| | | } |
| | | }else{ |
| | | |
| | | //判断文件是否正常 不正常 删除 |
| | | File file = new File(imgPath); |
| | | long uploadUrl = FileUtil.size(file); |
| | | if(uploadUrl<=10240){ |
| | | FileUtil.del(file); |
| | | return null; |
| | | } |
| | | } |
| | | System.out.println("根据ticket换取二维码成功,路径:" + imgPath); |
| | | return urlPrefix+"/"+imgName; |
| | | |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | } |
| | | } |