开发者学堂课程【微服务+全栈在线教育实战项目演练(SpringCloud Alibaba+SpringBoot):课程支付功能(查询订单接口)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/667/detail/11490
课程支付功能(查询订单接口)
内容介绍:
一、 需求分析:根据订单 id 查询订单信息
二、生成微信支付二维码
一、需求分析:根据订单 id 查询订单信息
代码示例:
//根据订单id查询订单信息
RGetMapping{"getOrderInfo/ {orderId}"}
public R getOrderInfo(@PathVariable String orderId){
QueryWrapper<Order> wrapper = new QueryWrapper<>() ;
wrapper.eq( column: " order_no" , orderId);
Order order = orderService. getOne(wrapper) ;
return R. ok() . data("item" , order) ;
}
其中 order_no 的 id,不是订单号。
二 、生成微信支付二维码
1、 编写 controller
代码示例:
@RestController
@RequestMapping("" / orderservice/log")
@CrossOrigin
public class PayLogController {
@Autawired
private PayLogService payService;
/**
*生成二维码
*@return*/
@GetMapping(" IcreateNative/{orderNo}”)
public R createNative(@PathVariable String orderNo) {
public R createNative (@PathVariable String orderNo){
Map map = payService.createNative (orderNo);
return R.ok ().data(map) ;
}
}
}
2.编写 service
@Service
public class PayLogServiceImpl extends ServiceImpl PayLogMlapper,PayLog) implements PayLogservice {
@Autavired
private TOrderService orderService;
@Override
public ap createNative (String orderNo){
try {
//根据订单id获取订单信息
Queryr apper<TOrder> wrapper=new Querywrapper<>();
wrapper.eq("" order_no" , orderNo);
TOrder order = orderService.getOne(
wr
apper );
Map m = new HashMap ();
根据订单参数把订单编号查出来
//1.设置支付参数
m.put (" appid" ,“wx74862e0dfcf69954”);m.put ("mch_id","1558950191"");
m.put ("nonce_str", wXPayUtil.generateNonceStr());
m.put ("body" , order.getCourseTitle());
m.put(" out_trade_no" ,orderNo);
m.put("total_fee",order.getTotalFee().multiply(newBigDecimal("100" )).longValue()+"");
m.put("spbill_create_ip","127.0.0.1");
m.put("notify_url"","http://guli.shop/api/order/weixinPay/seixinNotifyin");
m.put("trade_type",“NATIVE");
//2、HTTPClient来根据URL访问第三方接口并且传递参数
HttpClientclient
=
new HttpClient
("https://api.mch.weixin.qq.cam/pay/unifiedorder" );
/ /client设置参数
client.setXmlParam(viKPayUJtil.generateSignedXml(m,“T6m91K73b0kn9g5v426MNKfHQH7X8rKwub"));
client.setHttps(true);
client.post();
l//3、返回第三方的数据
String xml = client.getContent();
Mlap<String,String> resultMap = wXPayUtil.xmlToMlap(xml);
//4、封装返回结果集
Map map = new HashMap<>();
map.put ("out_trade_no" , orderNo);
map .put (" course_id", order. getCourseId());
map.put ("total_fee" , order.getTotalFee());
map.put (result_code" , resultMap.get("result_code" ));
map.put (" code_url",resultMap. get (" code_url"));
//
微
信支付二维码2小时过期,可采取2小时未支付取消订单
/
/redisTemplate.opsForValue().set(orderNo,map,120,TimeUnit.MINUTES);
return map;
} catch (Exception e) {
e.printStackTrace();
return new HashMap<>();
}
}
}