首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

微信支付Java实现 微信支付 NATIVE 方式 网页二维码的形式显示

后端 6.68KB 15 需要积分: 1
立即下载

资源介绍:

微信支付Java实现 微信支付 NATIVE 方式 网页二维码的形式显示
package com.mqd.weChatPay.service.impl; import cn.hutool.core.util.XmlUtil; import cn.hutool.extra.qrcode.QrCodeUtil; import cn.hutool.http.HttpUtil; import com.mqd.weChatPay.config.WeChatConfig; import com.mqd.weChatPay.service.WeChatPayService; import com.mqd.weChatPay.util.PayForUtil; import org.springframework.stereotype.Service; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Iterator; import java.util.Map; import java.util.SortedMap; import java.util.TreeMap; @Service public class WeChatPayServiceImpl implements WeChatPayService { @Override public void codePay(HttpServletRequest request, HttpServletResponse response) { // 支付的商品名称 String body="嘴巴香大辣条"; //支付金额(单位:分) String totalFee="200"; //获取二维码内容urlCode String resXml = null; try { resXml = getNative( body, totalFee); Map data= XmlUtil.xmlToMap(resXml); String urlCode = data.get("code_url").toString(); //生成二维码到输出流 response.setContentType("image/jpeg"); ServletOutputStream out = response.getOutputStream(); System.out.println(out); QrCodeUtil.generate(urlCode, 300, 300,"jpg" ,out); out.close(); } catch (Exception e) { throw new RuntimeException(e); } } /** * @Description 支付回调 */ @Override public void wxnotify(HttpServletRequest request, HttpServletResponse response) { // 读取回调数据 InputStream inputStream; StringBuffer sb = new StringBuffer(); try { inputStream = request.getInputStream(); String s; BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((s = in.readLine()) != null) { sb.append(s); } in.close(); inputStream.close(); // 解析xml成map Map m=XmlUtil.xmlToMap(sb.toString()); // 过滤空 设置 TreeMap SortedMap packageParams = new TreeMap(); Iterator it = m.keySet().iterator(); while (it.hasNext()) { String parameter = it.next(); Object parameterValue = m.get(parameter); String v = ""; if (null != parameterValue) { v = parameterValue.toString().trim(); } packageParams.put(parameter, v); } // 微信支付的API密钥 String key = WeChatConfig.APIKEY; // 判断签名是否正确 if (PayForUtil.isTenpaySign(packageParams, key)) { String resXml = ""; if ("SUCCESS".equals((String) packageParams.get("result_code"))) { System.err.println("--------------------------------------------"); System.err.println("支付回调成功。。。可在此处执行业务逻辑。。。"); System.err.println("--------------------------------------------"); // 支付成功,执行自己的业务逻辑开始 String app_id = (String) packageParams.get("appid"); String mch_id = (String) packageParams.get("mch_id"); String openid = (String) packageParams.get("openid"); // 是否关注公众号 String is_subscribe = (String) packageParams.get("is_subscribe"); // 附加参数【商标申请_0bda32824db44d6f9611f1047829fa3b_15460】--【业务类型_会员ID_订单号】 String attach = (String) packageParams.get("attach"); String out_trade_no = (String) packageParams.get("out_trade_no"); String total_fee = (String) packageParams.get("total_fee"); // 微信支付订单号 String transaction_id = (String) packageParams.get("transaction_id"); // 支付完成时间 String time_end = (String) packageParams.get("time_end"); System.out.println(packageParams); // 通知微信.异步确认成功.必写.不然会一直通知后台.八次之后就认为交易失败了. resXml = "" + "" + "" + " "; } else { System.err.println("支付失败,错误信息:" + packageParams.get("err_code")); resXml = "" + "" + "" + " "; } response.getWriter().write(resXml); } else { System.err.println("通知签名验证失败"); } } catch (IOException e) { throw new RuntimeException(e); } } /** * @Description NATIVE支付模式(二维码网页扫码支付) */ public static String getNative(String body,String totalFee) throws Exception { //账号信息 String appid = WeChatConfig.APPID; String mch_id = WeChatConfig.MCHID; String key = WeChatConfig.APIKEY; //微信支付成功之后的回调地址【注意:当前回调地址必须是公网能够访问的地址】 String notify_url = WeChatConfig.WECHAT_NOTIFY_URL_PC; String ufdoder_url = WeChatConfig.UFDODER_URL; String trade_type = "NATIVE"; String out_trade_no = PayForUtil.getOrderNo(); //请求参数封装 SortedMap packageParams = new TreeMap(); packageParams.put("appid", appid); packageParams.put("mch_id", mch_id); // 随机字符串 packageParams.put("nonce_str", "nonce"+out_trade_no); // 支付的商品名称 packageParams.put("body", body); // 商户订单号【备注:每次发起请求都需要随机的字符串,否则失败。】 packageParams.put("out_trade_no",out_trade_no); // 支付金额 packageParams.put("total_fee", totalFee); // 客户端主机 packageParams.put("spbill_create_ip", PayForUtil.localIp()); packageParams.put("notify_url", notify_url); packageParams.put("trade_type", trade_type); // 获取签名 String sign = PayForUtil.createSign(packageParams, key); packageParams.put("sign", sign); // 将请求参数转换成String类型 String requestXML = XmlUtil.mapToXmlStr(packageParams, "xml"); System.err.println("请求:-----------------------------------"); System.err.println(requestXML); // 解析请求之后的xml参数并且转换成String类型 String resXml= HttpUtil.post(ufdoder_url, requestXML); System.err.println("应答:-----------------------------------"); System.err.println(resXml); return resXml; } }

资源文件列表:

weChatPay.zip 大约有11个文件
  1. weChatPay/
  2. weChatPay/config/
  3. weChatPay/config/WeChatConfig.java 898B
  4. weChatPay/controller/
  5. weChatPay/controller/weChatPayController.java 1008B
  6. weChatPay/service/
  7. weChatPay/service/impl/
  8. weChatPay/service/impl/WeChatPayServiceImpl.java 7.53KB
  9. weChatPay/service/WeChatPayService.java 332B
  10. weChatPay/util/
  11. weChatPay/util/PayForUtil.java 4.12KB
0评论
提交 加载更多评论
其他资源 秋招中关于FreeRTOS的知识点总结
秋招中关于FreeRTOS的知识点总结
秋招中关于FreeRTOS的知识点总结 秋招中关于FreeRTOS的知识点总结 秋招中关于FreeRTOS的知识点总结
秋招中自己所总结的一些资料
包括c++、操作系统、FreeRTOS等
秋招中背诵的相关八股文,嵌入式方向比较全面
秋招中背诵的相关八股文,嵌入式方向比较全面
秋招中背诵的相关八股文,嵌入式方向比较全面 秋招中背诵的相关八股文,嵌入式方向比较全面 秋招中背诵的相关八股文,嵌入式方向比较全面
xray2024最新版下载,Xray的windows安装使用
Xray是一款完善的安全评估工具,支持常见 web 安全问题扫描,可用于日常安全测试。 使用使用有俩种方式:主动扫描、被动扫描主动扫描:直接命令执行 ./xray.exe webscan --basic-crawler http://... --html-output xxx.html这是powershell里的命令 ./xray.exe:就是下载下来的exe的全称,包含后缀,可自行更改方便的名称,但不要删除.exe,在powershell里需加./,cmd不用 webscan --basic-crawler:必须加的参数,用爬虫的方式扫描 http://...:你的目标url --html-output:以html的格式输出结果 xxx.html:输出html的名称,注意名称不可重复,即若文件夹里已有a.html,要么删除原文件,要么改名称即可 被动扫描:通过代理,你手动访问,xray扫描 首先,需要添加证书:在你新建的文件夹里打开powershell运行以下命令2次: .\xray_windows_amd64.exe genca
spire.presentation.free.zip
spire.presentation.free.zip
房屋冰凌冰锥冰柱检测数据集VOC+YOLO格式147张1类别.zip
文件太大放服务器下载,请先到资源详情查看然后下载 样本图:blog.csdn.net/2403_88102872/article/details/143742503 数据集格式:Pascal VOC格式+YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):147 标注数量(xml文件个数):147 标注数量(txt文件个数):147 标注类别数:1 标注类别名称:["icicle"] 每个类别标注的框数: icicle 框数 = 314 总框数:314 使用标注工具:labelImg 标注规则:对类别进行画矩形框 重要说明:暂无 特别声明:本数据集不对训练的模型或者权重文件精度作任何保证,数据集只提供准确且合理标注
免杀xlscan基于fscan魔改而来-过360、火绒、Defender、卡巴斯基
xlscan是基于Fscan二次开发而来,经过测试到目前为止 可以绕过360、火绒、微软、卡巴斯基,微步云沙箱病毒分析为安全。 请使用 -k 参数来指定您的密码 123
“碰一碰”渠道营销源码
仅供参考,不支持商用。