微信支付---二维码的生成(保姆级介绍)
目录
URL生成二维码
扫码回调开发
验证签名的正确性,更改订单状态
操作多个表库要开启事务
URL生成二维码
1、生成二维码返回页端
加入依赖<!-- google二维码生成包 --><dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>3.3.0</version></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>2.0</version></dependency>
2、使用微信扫码完成支付
参考资料:https://blog.csdn.net/shenfuli/article/details/68923393https://www.cnblogs.com/lanxiamo/p/6293580.html
二维码知识:https://coolshell.cn/articles/10590.html
扫码回调开发
文档:
https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=9_7&index=3
1 、开发支付回调接口
//读取回调输入流 StringBuffer sb = new StringBuffer(); InputStream inputStream = request.getInputStream(); String line ; BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, "UTF-8")); while ((line = in.readLine()) != null){ sb.append(line); } in.close(); inputStream.close(); //解析xml成map //{transaction_id=4200000141201805266700247361, nonce_str=cbb67accd8044c9ea48f3318b99d88e4, bank_type=CFT, openid=oiNKG03vVY4PHlGUEwT-ztFo8K8Y, sign=0575804DBE4E9FFF6545046FA062BC4C, fee_type=CNY, mch_id=1503809911, cash_fee=1, out_trade_no=78902e694bab485b8e7745b61e05dbfe, appid=wx5beac15ca207c40c, total_fee=1, trade_type=NATIVE, result_code=SUCCESS, time_end=20180526162759, is_subscribe=Y, return_code=SUCCESS}Map<String, String> callbackMap = WXPayUtil.xmlToMap(sb.toString()); //获取有序map SortedMap<String, String> sortedMap = CommonUtil.getSortedMap(callbackMap) ;
回调数据:<xml><appid><![CDATA[wx5beac15ca207c40c]]></appid><bank_type><![CDATA[CFT]]></bank_type><cash_fee><![CDATA[10]]></cash_fee><fee_type><![CDATA[CNY]]></fee_type><is_subscribe><![CDATA[Y]]></is_subscribe><mch_id><![CDATA[1503809911]]></mch_id><nonce_str><![CDATA[de019d5f1e5d40649cd76de33f18b13e]]></nonce_str><openid><![CDATA[oiNKG03vVY4PHlGUEwT-ztFo8K8Y]]></openid><out_trade_no><![CDATA[4d8cea4a916440368583edaf82488624]]></out_trade_no><result_code><![CDATA[SUCCESS]]></result_code><return_code><![CDATA[SUCCESS]]></return_code><sign><![CDATA[FA799B7DF70C2BAC558E839E01EF341A]]></sign><time_end><![CDATA[20180626230347]]></time_end><total_fee>10</total_fee><trade_type><![CDATA[NATIVE]]></trade_type><transaction_id><![CDATA[4200000142201806264038572903]]></transaction_id></xml>
转成map:{transaction_id=4200000142201806264038572903, nonce_str=de019d5f1e5d40649cd76de33f18b13e, bank_type=CFT, openid=oiNKG03vVY4PHlGUEwT-ztFo8K8Y, sign=FA799B7DF70C2BAC558E839E01EF341A, fee_type=CNY, mch_id=1503809911, cash_fee=10, out_trade_no=4d8cea4a916440368583edaf82488624, appid=wx5beac15ca207c40c, total_fee=10, trade_type=NATIVE, result_code=SUCCESS, time_end=20180626230347, is_subscribe=Y, return_code=SUCCESS}2、注意点:回调要用post方式,微信文档没有写回调的通知方式可以用这个注解 @RequestMapping
问题:一定要看日志
验证签名的正确性,更改订单状态
更新订单状态和幂等性
无论调用多少次接口,积分只增加1次(wx会多次回调我们的接口)所以回调接口要考虑幂等性
微信回调通知规则(通知频率为15/15/30/180/1800/1800/1800/1800/3600,单位:秒)
幂等性: 同样的参数和值,不管调用你的接口多少次,响应结果都和调用一次是一样的1、校验签名是否正确,防止伪造回调2、查询订单是否已经更新
3、若没更新则更新订单状态
4、回应微信,SUCCESS 或者 FAIL response.setContentType("text/xml"); response.getWriter().println("success");
下单接口开启事务(这里只操作一个数据库可以不开启事务)
1、springboot开启事务,启动类里面增加 @EnableTransactionManagement
2、需要事务的方法上加 @Transactional(propagation = Propagation.REQUIRED)
3、aop的管理事务的好处和选择
SUPPORTS如果没有事务就 不开启
REQUIRED 如果没有事务就开启事务
增,删,改 开启事务
操作多个表库要开启事务
@Override
public int updateViderOrderByoutTradeNo(VideoOrder videoOrder) {
//如果要加积分给又换券等多个操作的话要开启事务return videoOrderMapper.updateViderOrderByoutTradeNo(videoOrder);
}
微信支付---二维码的生成(保姆级介绍)相关推荐
- Java利用HttpClient发送请求生成微信支付二维码、查询支付状态
一.HttpClient工具类 import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache. ...
- 用qrcode生成微信支付二维码
项目场景: 用qrcode生成微信支付二维码 问题描述 根据后台返回的路径动态生成微信二维码 在这里我们用的是qrcodejs2,它有官网文档 npm i qrcodejs2 导入: import Q ...
- 微信支付:支付流程分析、微信扫码支付(HttpClient)、微信支付二维码生成、检测支付状态、订单状态操作准备工作、支付信息回调、MQ处理支付回调状态、定时处理订单状态
微信支付 微信支付开发的整体思路 生成支付二维码 查询支付状态(微信的服务器) 实现订单状态的修改.删除订单 支付状态回查->微信服务器将支付状态返回给支付微服务 MQ处理支付回调状态 Rabb ...
- 前端 js 微信 支付二维码
这里使用了 js 以及一个网上的工具包,巨j2简单的生成了微信的支付二维码 文章目录 这里使用了 js 以及一个网上的工具包,巨j2简单的生成了微信的支付二维码 下载微信二维码包 生成微信二维码 事后 ...
- 微信支付之01------获取订单微信支付二维码的接口------Java实现
[ 前言:以前写过一个获取微信二维码支付的接口,发现最近公司新开的项目会经常用到,现在我又翻出代码看了一遍,觉得还是把整个代码流程记下来的好 ] 借鉴博客: 他这篇博客写得不错,挺全的:https:/ ...
- python制作微信二维码_Python提取支付宝和微信支付二维码的示例代码
支付宝或者微信支付导出的收款二维码,除了二维码部分,还有很大一块背景图案,例如下面就是微信支付的收款二维码: 有时候我们仅仅只想要图片中间的方形二维码部分,为了提取出中间部分,我们可以使用图片处理软件 ...
- 9月4日科技资讯|微信支付二维码被诉侵权;AI 换脸 App「ZAO」致歉; Android 10 正式发布
「CSDN 极客头条」,是从 CSDN 网站延伸至官方微信公众号的特别栏目,专注于一天业界事报道.风里雨里,我们将每天为朋友们,播报最新鲜有料的新闻资讯,让所有技术人,时刻紧跟业界潮流. 整理 | 胡 ...
- 微信支付二维码显示(二)
第一步: 首先配置WxPayConfig /* 微信公众号信息配置 * APPID:绑定支付的APPID(必须配置) * MCHID:商户号(必须配置) * KEY:商户支付密钥,参考开户邮件设置(必 ...
- 关于微信支付 二维码扫码支付
首先注册微信公众平台服务号:https://mp.weixin.qq.com 获得开发者id和秘钥(appid & appsecret) 随后注册微信支付商户平台:https://pay.we ...
最新文章
- Angular自学笔记(?)结构型指令
- 通过Servlet的response绘制页面验证码
- 【转】理解Azure订阅,账户,活动目录AD,租户等概念
- 剑指Offer - 面试题59 - II. 队列的最大值(deque模拟单调栈)
- 服务器系统关了,各种服务器系统的关机
- vue读取外部配置文件
- ARM环境中的c语言socket进程通信-转
- 机器学习常见的六大错误
- hibernate配置文件hibernate.cfg.xml的详细解释
- 如何用Uber JVM Profiler等可视化工具监控Spark应用程序?
- js 调用 php,利用js调用后台php进行数据处理原码
- DMA内存申请--dma_alloc_coherent 及 寄存器与内存【转】
- IE兼容模式文件上传所遇问题解决
- Android 5.1.1 源码目录结构
- 实时视频带宽的计算过程
- badboy设置中文_badboy基本操作
- 上海高考物理能不能用计算机,上海高考物理卷并未超纲 但不按套路出牌
- GMS2(Gamemaker Studio 2)运行工程时遇到的问题解决
- 提取mdx字典文件中的数据
- 搜索引擎shodan
热门文章
- pc分布使用率情况_如何在不违反法律的情况下获得廉价和免费的PC游戏
- 北航计算机组成原理课程设计-2020秋 PreProject-Verilog HDL与ISE-Verilog题目实例与分析
- win10查询计算机ip和用户名和密码,win10系统查询电脑ip子网掩码和默认网关的设置教程...
- Swift 闪光灯的使用
- FileMaker Pro 19 Advanced for mac(数据库工具)
- 利用Fiddler抓取手机流量
- js正则匹配小数点后2位_js验证是正数且保留2位有效小数点的正则表达式
- 更好用的看家工具,智能侦测异常情况,QCY智能摄像机CC1A上手
- 现场记录:Nginx重启失败,端口已被使用的可能原因及解决方法
- 堆排序【手写小根堆】