java使用微信支付API完成支付功能
2021/6/7 20:53:58
本文主要是介绍java使用微信支付API完成支付功能,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
java使用微信支付API完成支付功能目录
文章目录
- java使用微信支付API完成支付功能目录
- 微信支付官方介绍
- Native支付介绍
- 1.Api文档查看
- 2.下单功能实现
- 1.接口链接
- 2.请求参数和返回参数
- Native的下单和查询支付
- 引入依赖
- 涉及的工具类
- 下单功能
- 1.创建一个实体类封装数据
- 2.创建controller方法
- 3.对应的service
- 查看订单状态
微信支付官方介绍
https://pay.weixin.qq.com/wiki/doc/api/index.html
提示:在这边选择想要使用的支付方式点击查看api文档,我这边开发的是web项目,所以就以Native支付来讲解。
提示:以下是本篇文章正文内容,下面案例可供参考
Native支付介绍
1.Api文档查看
点击进入Native支付—Api列表
在这里可以选择想要的接口进行使用,并且查看需要带的参数,发送请求路径等
2.下单功能实现
1.接口链接
接口链接就是我们往此链接发送请求,即可得到我们想要的数据,比如二维码,订单状态等
URL地址:https://api.mch.weixin.qq.com/pay/unifiedorder
URL地址:https://api2.mch.weixin.qq.com/pay/unifiedorder(备用域名)见跨城冗灾方案
这两个接口都可以使用,推荐使用第一个
2.请求参数和返回参数
我们只要关注必填参数即可,感兴趣可以自己去官网看一下,这边不一一介绍了
Native的下单和查询支付
引入依赖
<dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5.3</version> </dependency> <dependency> <groupId>com.github.wxpay</groupId> <artifactId>wxpay-sdk</artifactId> <version>0.0.3</version> </dependency>
涉及的工具类
HttpClient:模仿网页发送http请求,wx提供的工具包
CommonResult:返回参数
@Data @NoArgsConstructor @AllArgsConstructor @ApiModel("响应的结果") public class CommonResult { @ApiModelProperty("响应的状态码") private Integer code; @ApiModelProperty("响应的信息") private String msg; @ApiModelProperty("响应的数据") private Object result; }
我们在使用之前要明确一些参数
- APPID :服务号的应用号
- MCH_ID:商户号
- APP_SECRECT:服务号的应用密码
- API_KEY:API密钥
这些在开发时会有人提供
下单功能
1.创建一个实体类封装数据
public class ConfigUtil { public final static String APPID = "wx8087d8149331d27c";//服务号的应用号 public final static String MCH_ID = "1532192611";//商户号 public final static String APP_SECRECT = "e8cb3f526ac67e41dffb8fb4201873da";//服务号的应用密码 public final static String API_KEY = "Cc158380629071583806290715838062";//API密钥 }
2.创建controller方法
@GetMapping("erweima") public Result createNative(String orderno){ Map testorder = payService.createNative(orderno); Result result=new Result(); result.setCode(100); result.setMsg(""); result.setT(testorder); return result; }
3.对应的service
创建二维码的时候需要知道将钱付给谁,也就是商户的信息,由于什么原因发起的支付,所以这个service里面需要传递的有商户的信息还有订单的信息
各个参数的意思请参考微信支付开发文档
public Map createNative(String orderNo) { try { Map m = new HashMap(); //1、设置支付参数 m.put("appid", ConfigUtil.APPID);//"wx74862e0dfcf69954" m.put("mch_id",ConfigUtil.MCH_ID );//"1558950191" m.put("nonce_str", WXPayUtil.generateNonceStr()); m.put("body", "课程的信息"); m.put("out_trade_no", orderNo); m.put("total_fee", new BigDecimal("0.01").multiply(new BigDecimal("100")).longValue() + ""); m.put("spbill_create_ip", "127.0.0.1"); //设置的回调的路径 m.put("notify_url","http://www.chenkaixiang.top/notifyWeiXinPay\n");// //支付类型 native 扫码支付 m.put("trade_type", "NATIVE"); //2、HTTPClient来根据URL访问第三方接口并且传递参数 //https://api.mch.weixin.qq.com/v3/pay/transactions/native HttpClient client = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder"); //client设置参数 client.setXmlParam(WXPayUtil.generateSignedXml(m, ConfigUtil.API_KEY));//"Cc158380629071583806290715838062"));//"T6m9iK73b0kn9g5v426MKfHQH7X8rKwb" client.setHttps(true); client.post(); //3、返回第三方的数据 String xml = client.getContent(); Map<String, String> resultMap = WXPayUtil.xmlToMap(xml); //4、封装返回结果集 Map map = new HashMap<>(); map.put("out_trade_no", orderNo); map.put("course_id", 1); map.put("total_fee", 0.01); 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<>(); } }
查看订单状态
支付完成之后需要查询一下订单的状态,到底是否支付成功,成功支付要进行操作
controller:
@GetMapping("getPayStatus/{orderNo}") public Result getPayStatus(@PathVariable("orderNo")String orderNo) throws AAAException { Map<String,String> map=payService.getPayStatus(orderNo); System.out.println(map); Result result=new Result(); if(map==null){ result.setMsg("支付失败"); return result; } else if(map.get("trade_state").equals("SUCCESS")){ //修改订单状态 并添加支付记录 result.setMsg("支付"); result.setT(map); return result; }else{ result.setCode(2500); result.setMsg("支付中"); result.setT(map); return result; }
对应的service
public Map<String, String> getPayStatus(String orderNo) throws AAAException { try { String url = "https://api.mch.weixin.qq.com/pay/orderquery"; Map<String, String> map = new HashMap<>(); map.put("appid",ConfigUtil.APPID); map.put("mch_id", ConfigUtil.MCH_ID); map.put("out_trade_no", orderNo); map.put("nonce_str", WXPayUtil.generateNonceStr()); HttpClient httpClient = new HttpClient(url); httpClient.setXmlParam(WXPayUtil.generateSignedXml(map,ConfigUtil.API_KEY ));//"Cc158380629071583806290715838062"));//"T6m9iK73b0kn9g5v426MKfHQH7X8rKwb")); httpClient.setHttps(true); httpClient.post(); String xml = httpClient.getContent(); Map<String,String> resultMap=WXPayUtil.xmlToMap(xml); System.out.println(resultMap); return resultMap; }catch (Exception e){ e.printStackTrace(); throw new AAAException(20001,"支付失败"); } }
这篇关于java使用微信支付API完成支付功能的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器
- 2024-11-26Java云原生资料:新手入门教程与实战指南
- 2024-11-26JAVA云原生资料入门教程