记录一下微信扫码支付。该思路是自己想的,如果错了,别喷,看一下即可

<!-- 微信sdk支付 --><dependency>    <groupId>com.github.wxpay</groupId>    <artifactId>wxpay-sdk</artifactId>  <version>0.0.3</version>   </dependency>

yml文件配置直接用传智播客提供的

ly:  pay:    wx:      appID: wx8397f8696b538317  #公众号id      mchID: 1473426802  #商户号id      key: T6m9iK73b0kn9g5v426MKfHQH7X8rKwb  # 秘钥      notifyurl: http://a31ef7db.ngrok.io/WeChatPay/WeChatPayNotify  #回调地址

写个配置类,一会方便调用

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "ly.pay.wx")
public class PayProperties {private String appID;    private String mchID;    private String key;    private String notifyurl;public String getAppID() {return appID;}public void setAppID(String appID) {this.appID = appID;}public String getMchID() {return mchID;}public void setMchID(String mchID) {this.mchID = mchID;}public String getKey() {return key;}public void setKey(String key) {this.key = key;}public String getNotifyurl() {return notifyurl;}public void setNotifyurl(String notifyurl) {this.notifyurl = notifyurl;}

配置一下请求调用编码

@Bean    public RestTemplate getRestTemplate(){        RestTemplate restTemplate = new RestTemplate();        //将默认的编码格式指定成utf-8        StringHttpMessageConverter converter = new StringHttpMessageConverter();        converter.setDefaultCharset(Charset.forName("utf-8"));//处理乱码        restTemplate.getMessageConverters().set(1,converter);        return restTemplate;    }

生成code_url,用来转化成二维码

@RequestMapping("/weChatPay")public String createPayUrl(HttpServletRequest request) { String orderId=UUID.randomUUID().toString().replace("-", "");try {            Map<String,String> paramMap = new HashMap<>();            paramMap.put("appid",payProperties.getAppID());            paramMap.put("mch_id",payProperties.getMchID());            paramMap.put("nonce_str", WXPayUtil.generateNonceStr());//随机数           paramMap.put("body","网课商城");      paramMap.put("out_trade_no",orderId); //交易号            paramMap.put("total_fee","1"); // 测试时 使用1分钱           paramMap.put("spbill_create_ip","127.0.0.1");            paramMap.put("notify_url",payProperties.getNotifyurl());          paramMap.put("trade_type","NATIVE");            //将参数转xml            String paramXml = WXPayUtil.generateSignedXml(paramMap, payProperties.getKey());            //2、基于httpclient工具类,调用微信支付平台,完成支付操作            String resultString = restTemplate.postForObject("https://api.mch.weixin.qq.com/pay/unifiedorder", paramXml, String.class);            Map<String, String> stringStringMap = WXPayUtil.xmlToMap(resultString); String code_url = stringStringMap.get("code_url");                         request.setAttribute("code_url", code_url);request.setAttribute("orderId", orderId);return "protal/memeber/wepay";} catch (Exception e) {            e.printStackTrace(); System.out.println("支付流程失败");}return "redirect:www.baidu.com";} /*** 查询该订单状态* @param orderId* @return*/@RequestMapping("/pay/state/{orderId}") @ResponseBodypublic int queryPayState(@PathVariable("orderId") String orderId) { try {// 1、组装微信查询支付状态所需要的必填参数            Map<String,String> paramMap = new HashMap<>();            paramMap.put("appid",payProperties.getAppID());            paramMap.put("mch_id",payProperties.getMchID());            paramMap.put("nonce_str", WXPayUtil.generateNonceStr());            paramMap.put("out_trade_no",orderId.toString());            //将参数转xmlString paramXml = WXPayUtil.generateSignedXml(paramMap, payProperties.getKey());            //2、基于restTemplate工具类,调用微信支付平台,完成支付状态操作操作                        String resultString = restTemplate.postForObject("https://api.mch.weixin.qq.com/pay/orderquery", paramXml, String.class);            //3、处理响应结果            Map<String, String> resultMap = WXPayUtil.xmlToMap(resultString);            //支付成功,返回状态1   String status = resultMap.get("trade_state");if(status.equals("NOTPAY")){return 0;}else if(status.equals("SUCCESS")){return 1;}else{return 2;}} catch (Exception e) {e.printStackTrace();return 2;} }

获取刚才的code_url,使用js生成二维码

<%@ page language="java" contentType="text/html; charset=utf-8"pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>扫码支付</title><script type="text/javascript" src="${pageContext.request.contextPath }/static/js/jquery-1.8.3.min.js"></script>
<script src="${pageContext.request.contextPath }/static/js/jquery.qrcode.min.js" type="text/javascript" ></script>
<script type="text/javascript">
var code = '${code_url}';
</script>
</head>
<body>
<div id="qrImage"></div>
<div><p>请用微信扫码支付</p>
</div>
</body>
<script type="text/javascript">
var code = '${code_url}';
$("#qrImage").qrcode({width:100,height:100,text:code,
})
</script>
<script type="text/javascript">var x= '${sessionScope.loginUser.id}';
//alert(x);
//订单查询状态
var orderId='${orderId}';
setTimeout("queryPayState()",1000);
function queryPayState(){$.ajax({url:"${pageContext.request.contextPath }/pay/state/"+orderId,data:{},type:"GET",success:function(data){if(data==0){setTimeout("queryPayState()",1000);}else if(data==1){//支付成功,并刷新父窗口//window.close();//window.opener.location.href = window.opener.location.href;makeorder();}else{alert("服务器忙");}},error:function(){alert("服务器忙");},dataType:"json"});
} </script>
</html>

我在该页面写一个setTimeout方法,一秒执行一次,查询该订单是否被支付,支付成功后提示信息。大致就这样,就不来图了

微信自定义二维码扫码支付相关推荐

  1. 微信扫码登录自定义二维码样式

    微信扫码登录自定义二维码样式 前言 Java生成data-url 1.工具类pom 2.代码实现 将data-url赋值给href 前言 今天在做web端扫码登录时,前端需要定义二维码的样式.官方文档 ...

  2. 微信扫码登录自定义二维码显示信息

    微信扫码登录,自定义二维码显示信息 <script src="http://res.wx.qq.com/connect/zh_CN/htmledition/js/wxLogin.js& ...

  3. 自定义带参数二维码扫码进入微信小程序获取参数

    第一步,需要进入小程序后台,开发设置里,添加二维码规则 第二步,添加好扫码进入的规则,比如扫码进去小程序的指定页面! (1)协议类型选择https (2)选择小写 (3)二维码规则,这个看文档有些人估 ...

  4. 前端怎么从H5调起微信扫描二维码?小程序使用扫码功能.

    小程序如何使用扫码的功能呢? wx.scanCode(Object object) 参数 属性 类型 默认值 必填 说明 最低版本 onlyFromCamera boolean false 否 是否只 ...

  5. 移动二维码支付 推进二维码扫码智能POS

    现如今:银币.再到纸币,演变到"钱"变得越来越轻薄.在现在这个移动支付市场中,互联网技术的支撑下,刷手机乘公交.刷支付宝买菜购物.缴水电费--日常生活中使用"现金&quo ...

  6. MyCnCart 专业版之个人微信二维码扫码转账

    个人微信二维码扫码转账支付方式,适合于国内外没有公司实体申请正常的微信支付渠道接口,但又想通过微信转账进行收款的国内个人商户或国外个人或公司商户. 后台配置: [扩展功能]->[支付方式]-&g ...

  7. thinkphp5+php微信公众号二维码扫码关注推广二维码事件实现

    thinkphp5微信公众号二维码扫码关注推广二维码事件实现, 给出实现的全部方法: 获取二维码,让微信公众号跳转到以下代码的code方法即可,用户点击二维码后,通过二维码获取关注用户信息及二维码推广 ...

  8. 应用宝ysdk微信二维码扫码登录没有回调问题

    在更新ysdk版本的时候,发现新版本ysdk增加了微信二维码扫码登录,但是打包测试发现并没有登录回调. 接下来就开始排查了,检查了生命周期都没有问题,那问题出现在哪里呢?用ysdk提供的demo换上我 ...

  9. VB6 简单实现 支付宝二维码扫马支付

    VB6 简单实现 支付宝二维码扫马支付 完整源码如下 Private Declare Function 初始化 Lib "alipay.dll" (ByVal 服务器 As Str ...

  10. uniapp中应用H5自定义二维码扫码界面

    uniapp中应用H5自定义二维码扫码界面 最终效果 pages配置 组件代码 最终效果 pages配置 {"path": "components/barcode/sca ...

最新文章

  1. php 计算一个字符串在另一个字符串中出现的次数
  2. linux+while循环多条件,有效的while循环条件客户端选择(TCP连接在Linux - C)
  3. java实现手机短信验证全过程
  4. boost 递归锁_c++/boost互斥量与锁
  5. Git/小白从零开始篇
  6. Alpha阶段发布说明
  7. Landsat中国西北地区行列号Shapefile图层对照(附行列号Shapefile下载)
  8. 挖矿为什么要用显卡_数字货币行情分析 2020/07/17 为什么大佬们都转向显卡挖矿了?...
  9. Nacos(三)之架构
  10. 原生开发小程序 和 wepy 、 mpvue 对比
  11. LIRe 源代码分析 7:算法类[以颜色布局为例]
  12. Python基础教程---读书笔记一
  13. 人都在你手下,难题我解决了,其他活也得我干?
  14. C语言考试题及答案(一)
  15. dell服务器显示器fre,戴尔全新 Freesync 显示器,专门针对游戏玩家
  16. 地铁 综合监控设备 及其所属子系统
  17. 在伦敦生活工作-2(由于本人懒惰的关系,这篇估计是最后一篇了,呵呵)
  18. man fflush
  19. 基于java愤怒的小鸟游戏的设计与实现
  20. Word2vec词向量工具带你发现不一样的《天龙八部》

热门文章

  1. 2011ACM大赛题目之贪吃蛇算法
  2. HS6 USB数据采集卡、USB高速数据采集卡,高级触发功能图解
  3. #今日说码栏目#第四集 各类选择器
  4. PPT内置宏教程——放映时用控件切换动态图表
  5. Java12之switch升级语法在Eclipse中的穿透问题
  6. html页面旋转图标或标签
  7. cad画多段线时不显示轨迹_CAD画多段线的时候看不到预览效果的解决方法
  8. ABAPDEMO批量更改BOM组件_SAP刘梦_新浪博客
  9. 一个单位球体积理清二三重积分计算与体积的求解方法(含旋转体体积)
  10. 编写程序,求柱体的体积: