当前位置:网站首页>微信支付接口
微信支付接口
2022-07-29 18:51:00 【小白要变大牛】
微信支付接口交互流程

1 用户想要购买商品生成订单和支付订单
2 调用微信统一下单API
3 微信通过传入的参数 返回参数 其中有支付二维码链接
4 将生成的链接转换为二维码给前端
5 用户扫码
6 提交链接信息,微信判断链接是否有效
7 返会让用户进行支付授权
8 用户授权给微信并且输入支付密码
9-10 两个步骤是推送数据 微信一共会推送24小时4分 过了这个时间如果商户还没有告知微信接收情况就不再推送支付状态
9 微信完成支付进行回调返回给商户支付结果
10 商户再去告诉微信是否接收成功
11这个步骤是9步骤一直没有返回最新数据那么就会去主动拉取状态
11 如果商户一直没有收到微信告知的结果就去主动调用微信接口询问支付状态
返回链接一共有一个小时的时效性
开通商户后微信给的关键数据
公众号ID appid
商户ID mach_id
秘钥 key
调用微信支付接口请求和返回参数参数
请求参数



返回参数
return_code 和 result_code为SUCCESS区别:
return_code: 返回的是微信响应的成功或者失败
result_code: 返回的是业务处理的成功与否
只有当这两个都是SUCCESS才会返回url
当return_code为SUCCESS时返回的数据

当return_code 和 result_code为SUCCESS的时候有返回

其中二维码链接就是当 return_code 和 result_code为SUCCESS才会返回
微信V2和V3的区别
v2返回的结果为xml类型的
v3返回的结果为JSON类型的
微信支付使用步骤
第一步,导入依赖:
<dependency>
<groupId>com.github.binarywang</groupId>
<artifactId>weixin-java-pay</artifactId>
<version>3.4.0</version>
</dependency>第二步 将商户的重要信息添加到配置文件:
下边的配置信息会被第三步的配置类WxPayConfig自动读进去
#商户微信公共号或开放平台唯一标识
weixinpay.app-id = xxxxxxxxxx
#商户号
weixinpay.mch-id = xxxxxxxxxx
#商户密钥
weixinpay.mch-key = xxxxxxxxxx
#微信回调商户的地址
weixinpay.notify-url = http://xxx
#商户的支付类型(NATIVE 为扫码支付)
weixinpay.trade-type = NATIVE
第三步,创建配置类:
package com.xuecheng.order.config;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* <P>
* WebMvc Config
* </p>
*/
@Configuration
public class WXPayConfig{
/**
* 第三方jar包已存在微信支付配置类,这里直接和配置属性关联
* @return
*/
@Bean("wxPayConfig")
@ConfigurationProperties(prefix = "weixinpay")
public WxPayConfig wxPayConfig(){
return new WxPayConfig();
}
/**
* 创建 WxPayService 实现类,并将其 WxPayConfig 配置类配置到支付服务类中
* @return
*/
@Bean
public WxPayService wxPayService(@Qualifier("wxPayConfig") WxPayConfig wxConfig) {
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(wxConfig);
return wxPayService;
}
}这个类是以后调用时注入这个类,操作就是这个类
测试
@SpringBootTest
@RunWith(SpringRunner.class)
public class WXPayTest {
@Autowired
private WxPayService wxPayService;
@Test
public void test() throws UnknownHostException, WxPayException {
// 1.创建统一下单的请求对象
WxPayUnifiedOrderRequest unifiedOrderRequest = new WxPayUnifiedOrderRequest();
// 2.设置统一下单数据
// 商品描述
unifiedOrderRequest.setBody("测试数据");
// 商品订单号
unifiedOrderRequest.setOutTradeNo(PaymentUtil.genUniquePayOrderNo());
// 商品金额(单位为:分)
unifiedOrderRequest.setTotalFee(100);
// 生成二维码的终端IP地址
unifiedOrderRequest.setSpbillCreateIp(InetAddress.getLocalHost().getHostAddress());
// 订单的详情描述
unifiedOrderRequest.setDetail("测试一下");
// 订单的商品Id号
unifiedOrderRequest.setProductId("123123123");
// 3.调用service获得生成二维码的结果数据
WxPayUnifiedOrderResult result = wxPayService.unifiedOrder(unifiedOrderRequest);
System.out.println("-----------------获得结果信息--------------------");
// 获得返回码
System.out.println(result.getReturnCode());
// 获得结果码
System.out.println(result.getResultCode());
// 获得二维码路径
String codeURL = result.getCodeURL();
System.out.println(codeURL);
}
}测试二:
//4:获取微信的二维码链接
WxPayUnifiedOrderResult response = null;
try {
response = getWxPayUrl(orders);
} catch (Exception e) {
return PayCodeUrlResult.failed(response.getErrCodeDes());
}
//5:封装到PayCodeUrlResult返回
// 只有返回状态码和业务结果都成功才嗯那个得到url return_code:代表业务处理成功或者失败 result_code: 代表响应的成功失败
String flag = PayCodeUrlResult.WX_PAY_SUCCESS_FLAG;
if (response.getResultCode().equalsIgnoreCase(flag) && response.getResultCode().equalsIgnoreCase(flag)) {
return PayCodeUrlResult.success(response.getCodeURL());
} else {
return PayCodeUrlResult.failed(response.getErrCodeDes());
}
/**
* 生成微信支付URL
*
* @param orders
* @return
*/
private WxPayUnifiedOrderResult getWxPayUrl(Orders orders) throws Exception {
//创建统一下单对象
WxPayUnifiedOrderRequest request = new WxPayUnifiedOrderRequest();
//商品描述
request.setBody(orders.getCoursePubName());
// 订单编号
request.setOutTradeNo(orders.getOrderNo());
// 商品金额 BaseWxPayRequest.yuanToFen("1")为将元转换为分 因为TotalFee接收的就是分
request.setTotalFee(BaseWxPayRequest.yuanToFen(orders.getPrice().toString()));
//获得本机的ip地址
String hostAddress = InetAddress.getLocalHost().getHostAddress();
request.setSpbillCreateIp(hostAddress);
//商品id
request.setProductId(orders.getCoursePubId().toString());
//发送请求
WxPayUnifiedOrderResult response = wxPayService.unifiedOrder(request);
return response;
}官方接口文档
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1
查询订单API
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_2
统一下单API文档
https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=9_1
边栏推荐
- 一线大厂软件测试面试题及答案解析,2022最强版...
- 如何防止订单重复支付?
- Idea工具的使用
- 大疆MID 360
- R语言ggplot2可视化绘制条形图(bar plot)、使用gghighlight包突出高亮条形图中的特定条形(highlight specific bar plot)
- 【中标麒麟系统Your trial is EXPIRED and no VALID licens 关闭弹窗】
- exdark数据集转yolo格式(仅供参考)
- pytorch构建YOLOV7网络结构
- 记录一个相当坑爹的WSL局域网访问问题
- R语言使用treemap包中的treemap函数可视化treemap图:treemap将分层数据显示为一组嵌套矩形,每一组都用一个矩形表示,该矩形的面积与其值成正比
猜你喜欢

无人驾驶技术有什么优点,人工驾驶的优缺点英文

centos8安装mysql8.0.28

leetcode:36. 有效的数独

从零在AutoDL调试一份目标检测代码

智能合约安全——重入漏洞

单核浏览器和双核浏览器有什么区别,哪个好用?

牛客网剑指offer刷题练习之重构二叉树

7 lines of code crashed station B for 3 hours, but because of "a tricky 0"

What should I do if the Win11 network is unstable?The solution to frequent disconnection of wifi connection in Win11

第02章 MySQL的数据目录【1.MySQL架构篇】【MySQL高级】
随机推荐
Really touch the fish and lead the teacher: The programmer brother works 10 minutes a day with an annual salary of 570,000. I broke the defense...
从零在AutoDL调试一份目标检测代码
【中标麒麟系统Your trial is EXPIRED and no VALID licens 关闭弹窗】
Small programs use npm packages
uniapp H5 跳转应用外页面
如何防止订单重复支付?
小程序组件的总结
R语言ggplot2可视化绘制条形图(bar plot)、使用gghighlight包突出高亮条形图中的特定条形(highlight specific bar plot)
Chapter 02 MySQL Data Directory [1. MySQL Architecture] [MySQL Advanced]
Typescript类功能混合(mixin)使用,将多个类中功能合并到一个对象
迅为i.MX8MM开发板Coatrx-M4内核开发给IAR安装8MM补丁
在宇宙中心五道口上班,是怎样一种体验
函数的声明与作用域
单核浏览器和双核浏览器有什么区别,哪个好用?
牛客网刷题记录 || 指针
我用两行代码实现了一个数据库!
Low code of the trilogy
洪九果品、百果园抢滩港股,卖水果是门好生意吗?
High-speed passive link impedance matching routine
2.5w字 + 36 张图爆肝操作系统面试题 学不吐你