前提
生成二维码一扫就卡住了。没有页面跳转
原因:生成二维码功能,接口请求错了。
检查接口返回,参数都一一检查了一遍都没问题
<xml>
<return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[不识别的参数body]]></return_msg>
</xml>
解决
结果是请求地址错了
//生成二维码地址
https://api.mch.weixin.qq.com/pay/unifiedorder
但是访问了//查询订单地址
https://api.mch.weixin.qq.com/pay/orderquery
生成二维码过程
//根据订单号生成支付二维码
@Override
public Map createNative(String orderNo) {
try {
//1 根据订单号获取订单信息
QueryWrapper<TOrder> wrapper = new QueryWrapper<>();
wrapper.eq("order_no",orderNo);
TOrder order = orderService.getOne(wrapper);
if(order==null){
throw new GuliException(20001,"订单失效");
}
//2 封装参数,用map
Map m = new HashMap();
m.put("appid", "wx74ddsdvsfcf69954");//微信支付id
m.put("mch_id", "1558102311");//商户号
m.put("nonce_str", WXPayUtil.generateNonceStr());//随机字符串
m.put("body", order.getCourseTitle());//商品描述
m.put("out_trade_no", orderNo);//订单号
m.put("total_fee", order.getTotalFee().multiply(new BigDecimal("100")).longValue()+"");//支付金额
m.put("spbill_create_ip", "127.0.0.1");//终端ip地址
m.put("notify_url", "http://domoyun.com/api/order/weixinPay/weixinNotify\n");//支付回调地址
m.put("trade_type", "NATIVE");//交易类型
//3 创建httpclient对象,进行请求
HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder");
//4 向httpclient设置xml格式参数,
//WXPayUtil.generateSignedXml参数:1 map集合,2 微信商户key
client.setXmlParam(WXPayUtil.generateSignedXml(m,"T6m9iK73b0kn9g5v426MKfHQH7X8rKwb"));
client.setHttps(true);
client.post();
//5 发送请求得到返回结果
String content = client.getContent();//xml格式
Map<String, String> map = WXPayUtil.xmlToMap(content);
//6 获取需要值,进行封装
Map<String,Object> resultMap = new HashMap<>();
resultMap.put("out_trade_no", orderNo);
resultMap.put("course_id", order.getCourseId());
resultMap.put("total_fee", order.getTotalFee());
resultMap.put("result_code", map.get("result_code"));
resultMap.put("code_url", map.get("code_url"));
return resultMap;
} catch (Exception e) {
e.printStackTrace();
throw new GuliException(20001,"生成支付二维码失败");
}
}
前端
一下这个模板需要这个插件
npm install vue-qriously
<template>
<div class="cart py-container">
<!--主内容-->
<div class="checkout py-container pay">
<div class="checkout-tit">
<h4 class="fl tit-txt"><span class="success-icon"></span><span class="success-info">订单提交成功,请您及时付款!订单号:{{payObj.out_trade_no}}</span>
</h4>
<span class="fr"><em class="sui-lead">应付金额:</em><em class="orange money">¥{{payObj.total_fee}}</em></span>
<div class="clearfix"></div>
</div>
<div class="checkout-steps">
<div class="fl weixin">微信支付</div>
<div class="fl sao">
<p class="red">请使用微信扫一扫。</p>
<div class="fl code">
<!-- <img id="qrious" src="~/assets/img/erweima.png" alt=""> -->
<!-- <qriously value="weixin://wxpay/bizpayurl?pr=R7tnDpZ" :size="338"/> -->
<qriously :value="payObj.code_url" :size="338"/>
<div class="saosao">
<p>请使用微信扫一扫</p>
<p>扫描二维码支付</p>
</div>
</div>
</div>
<div class="clearfix"></div>
<!-- <p><a href="pay.html" target="_blank">> 其他支付方式</a></p> -->
</div>
</div>
</div>
</template>