讲解微信支付V3接口真实开发代码,非demo

使用微信支付需要开通微信支付商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式

微信支付提供多种支付功能,包括【JSAPI支付、APP支付、H5支付、Native支付、小程序支付、合单支付】

本贴将讲述JSAPI支付、Native支付、小程序支付、支付成功回调、退款成功回调、订单超时未支付优雅的处理方案

JSAPI支付、小程序支付的作用:

在小程序、公众号、微信浏览器中调用微信指定的函数,发起调用页面

例如在小程序中的付款按钮事件中调用wx.requestPayment函数,就可以唤起微信支付页面进行支付

Native支付的作用:

PC网站,生成二维码,用户打开微信扫一扫进行支付

 准备工作:

  • mchId

微信支付平台开通的商户号

登录商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式,产品中心->开发配置中查看商户号

  • appId

JSAPI支付在公众号中使用,需要公众号的appid,需要在微信开放平台开通服务号或者公众号类型的账号,如果是在小程序中使用,需要在微信开放平台开通小程序类型的账号:微信开放平台

  • v3 appKey

微信支付v3版本的appkey

登录商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式,账户中心->API安全->APIv3密钥进行设置

  • API证书

微信支付接口每一步都需要的证书,用于验证

登录商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式,账户中心->API安全->申请API证书,进行获取

  • 微信平台证书

微信支付成功时的回调,验签回调返回的密文时使用

获取步骤:GitHub - wechatpay-apiv3/CertificateDownloader: Java 微信支付 APIv3 平台证书的命令行下载工具,下载CertificateDownloader源码,导入到开发工具中,打开com.elias.test.CertificateDownloaderTest类,填写相关信息,run运行

然后就会在指定的目录下生成一个.pem文件

  • 配置回调域名

假如你有一个域名:http://027.com

登录商户号:微信支付 - 中国领先的第三方支付平台 | 微信支付提供安全快捷的支付方式,产品中心->开发配置->支付配置

开始:---------------------------------------------------------------------------------

上代码:

首先你有一个springboot项目

在pom.xml中添加 http和生成二维码需要的jar包

<!-- http工具包 -->
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-http</artifactId><version>latest-version</version>
</dependency><!-- 二维码 -->
<dependency><groupId>com.google.zxing</groupId><artifactId>javase</artifactId><version>latest-version</version>
</dependency>
<dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>latest-version</version>
</dependency>

把我们准备工作中获取到的证书,添加到项目中,这里我们放在 resources/cert 目录中

添加微信配置,这里我们放在 resources/pay 目录中

wxpay_v3.properties 文件中的配置

### 商户号/服务号/公众号appid,
v3.appId=**************### 小程序appId
v3.appletId=*************### 商户号
v3.mchId=*************###v3 的 apiKey密钥
v3.apiKey3=**********************###apiclient_key.pem文件的路径,使用这种路径写法,后续不会出现idea和jar包两种启动方式jar找不到文件的错误
v3.keyPath=cert/apiclient_key.pem###apiclient_cert.pem文件的路径
v3.certPath=cert/apiclient_cert.pem###apiclient_cert.p12文件的路径
v3.certP12Path=cert/apiclient_cert.p12### 微信 平台证书路径
v3.platformCertPath=cert/wechatpay_72E89C7A03483426DA8028.pem### 微信 回调域名
v3.domain=http://027.com

创建读取 wxpay_v3.properties 配置文件的类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;/*** 微信支付V3 配置信息** @author lixx* @version 1.0* @since 2021-08-13 14:49*/
@Data
@Component
@PropertySource("classpath:pay/wxpay_v3.properties")
@ConfigurationProperties(prefix = "v3")
public class WxPayV3Property {/*** 商户号appId*/private String appId;/*** 小程序appId*/private String appletId;/*** 商户号*/private String mchId;/*** v3 的 apiKey密钥*/private String apiKey3;/*** key.pem文件的路径*/private String keyPath;/*** cert.pem文件的路径*/private String certPath;/*** cert.p12文件的路径*/private String certP12Path;/*** 平台证书文件的路径*/private String platformCertPath;/*** 回调域名*/private String domain;}

签名生成:

以微信文档里的示例/v3/certificates接口为例

准备微信支付常量类

public class WxPayConstant {/*** 域名*/public interface Domain {/*** 中国国内*/String CHINA = "https://api.mch.weixin.qq.com";/*** 中国国内(备用域名)*/String CHINA2 = "https://api2.mch.weixin.qq.com";/*** 东南亚*/String HK = "https://apihk.mch.weixin.qq.com";/*** 其它*/String US = "https://apius.mch.weixin.qq.com";/*** 获取公钥*/String FRAUD = "https://fraud.mch.weixin.qq.com";/*** 活动*/String ACTION = "https://action.weixin.qq.com";/*** 刷脸支付* PAY_APP*/String PAY_APP = "https://payapp.weixin.qq.com";}/*** 属性*/public interface Attribute {/*** 认证类型,目前为固定值 WECHATPAY2-SHA256-RSA2048*/String AUTH_TYPE = "WECHATPAY2-SHA256-RSA2048";/*** 微信支付,二维码图片存放的目录名称*/String DIRECTORY = "WxPayQrCodeTempFiles";/*** 符合ISO 4217标准的三位字母代码,目前只支持人民币:CNY。*/String CURRENCY = "CNY";}/*** url 接口地址*/public interface Api {/*** 支付回调地址*/String CALL_BACK_NOTIFY = "/wx/pay/callBackNotify";/*** 退款回调地址*/String CALL_BACK_REFUND_NOTIFY = "/wx/pay/callBackRefundNotify";/*** 获取商户平台证书*/String V3_CERTIFICATES = "/v3/certificates";/*** 微信支付订单号查询* <p>* 第一个%s:订单号* 第二个%s: 商户号*/String V3_PAY_ID = "/v3/pay/transactions/id/%s?mchid=%s";/*** JSAPI下单*/String V3_PAY_JSAPI = "/v3/pay/transactions/jsapi";/*** native下单*/String V3_PAY_NATIVE = "/v3/pay/transactions/native";/*** h5 下单*/String V3_PAY_H5 = "/v3/pay/transactions/h5";/*** 退款接口*/String V3_REFUND = "/v3/refund/domestic/refunds";/*** 退款订单查询*/String V3_REFUND_ID = "/v3/refund/domestic/refunds/%s";}}

创建一个注解工具类

@Component
public class WxPayBean {@Autowiredprivate WxPayV3Property v3Property;/*** 构建微信支付签名** @param method    {@link RequestMethod} 请求方法* @param urlSuffix 可通过 {@link WxPayConstant.Api} 来获取,URL挂载参数需要自行拼接* @param body      接口请求参数,***注意*** 如果无参数,要传入""字符串,不能传null* @return {@link String} 返回 v3 所需的 Authorization* @throws Exception 异常信息*/public String buildAuthorization(RequestMethod method, String urlSuffix, String body) throws Exception {return WxPayUtils.buildAuthorization(method, urlSuffix, v3Property.getMchId(), body, v3Property.getKeyPath(), v3Property.getCertPath());}}

创建一个接口调用测试一下

 @Autowiredprivate WxPayBean wxPayBean;/*** 生成微信支付签名 test*/@GetMapping("test")public void getSign() throws Exception {String authorization = wxPayBean.buildAuthorization("get", WxPayConstant.Api.V3_CERTIFICATES, "");System.err.println(authorization);}

打印签名结果如下

使用 postman 测试一下

代码已经写好了,大家可以下载到自己的电脑上,copy自己需要的功能到自己的项目中使用

代码下载地址微信扫一扫登录、微信支付、springsecurity&oauth2-Java文档类资源-CSDN下载项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/a1053765496/24871993

代码中使用的版本:springboot2.3.12.RELEASE、maven3.5+、mysql5.7、mybatis-plus3.4.3.3、

JDK1.8、flywaydb6.5.7

代码中使用的技术:SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis-Plus、Validation、各种自定义aop、发送邮件、Redis、Lombok、flywaydb(自动生成数据库表和初始化数据)、生成二维码、execl、跨域、全局异常处理、i18n国际化、图片滑块验证码、数据库敏感数据加密、字段脱敏、微信支付、微信扫一扫登录

五星 好评,放心下载

springboot整合微信支付相关推荐

  1. SpringBoot整合微信支付开发在线教育视频网站(完整版)

    目录 ├─code.zip ├─第 1 章项目介绍和前期准备 │  ├─1-1 SpringBoot整合微信支付开发在线教育视频站点介绍.TS │  ├─1-2 中大型公司里面项目开发流程讲解.TS ...

  2. SpringBoot整合微信支付(Native最详细)

    一.微信支付产品介绍 1.付款码支付 用户展示微信钱包内的 " 付款码 " 给商家,商家扫描后直接完成支付,适用于线下面对面收银的场景. 2.JSAPI支付 线下场所:商户展示一个 ...

  3. Springboot----项目整合微信支付(引入延迟队列实现订单过期取消以及商户主动查单)

    前言 目前更新的是Springboot项目整合微信支付系列的文章,可以在我的主页中找到该系列其他文章,这一系列的文章将会系统介绍如何在项目中引入微信支付的下单.关单.处理回调通知等功能.由于前面创作经 ...

  4. SpringBoot对接微信支付之JSAPI

    分享SpringBoot整合微信公众号支付项目,对接微信JSAPI支付类型遇到的问题和过程封装的工具类,目前已正常使用,有问题大家评论区互动哈,有需要源码的可以私信我. 1.创建SpringBoot项 ...

  5. SpringBoot整合微信扫码登录

    SpringBoot整合微信扫码登录 准备工作 基本思路流程 搭建SpringBoot 引入依赖 加入配置文件 代码实现 工具类 controller层 结果 准备工作 1.登录官网了解到,学习者想本 ...

  6. 微信支付php详解 php,ThinkPHP框架整合微信支付之刷卡模式图文详解

    本文实例讲述了ThinkPHP框架整合微信支付之刷卡模式.分享给大家供大家参考,具体如下: 大家好,这篇文章是继微信支付之Native 扫码支付 模式二之后的微信支付系列教程第四篇:微信刷卡支付 本教 ...

  7. 关于微店整合微信支付时出现的的各种问题的记录 php版

    由于公司项目的需要,需要在项目里整合微信支付,公司原有的项目中已有老版本的支付功能,在此不作讨论.我需要作的就是加入新版本的支付功能 让项目里可以支持新老两种版本的功能.在微信官方下载到了新版支付的p ...

  8. SpringBoot整合支付宝支付接口 详解 (有源文件)

    目录 1.简介与支付接口运行原理 2.基本配置说明 3.支付接口实现 4.整合后沙箱测试 1.简介与支付接口运行原理 简介: 现在与钱有关的项目都离不开支付,现在就来介绍一下如何对接支付宝接口.演示项 ...

  9. Spring-Boot整合微信登陆、微信支付、邮箱发送、支付宝支付和阿里云短信

    Spring-Boot整合 1. 发送邮件 2. 支付宝支付 3. 阿里云短信 4. 微信登陆 5. 微信支付 6. Swargger2 前后端API接口信息文档 7. ehcache缓存缓存 8. ...

最新文章

  1. ASP.NET2.0国际化/本地化应用程序的实现总结(多语言,多文化页面的实现)
  2. Oracle中不同条件的日期查询
  3. ipv6 端口号_计算机网络之IP、MAC、端口号、子网掩码、默认网关、DNS
  4. php代码清除空格注解,去除php注释和去除空格函数分享
  5. 133-PHP子类无法重写父类private同名函数
  6. 串口与modem流量控制大全(1)
  7. springboot jwt token前后端分离_7个开源的 Spring Boot 前后端分离项目,一定要收藏!...
  8. 整理90部好看的经典喜剧片
  9. 怎么把网页源码家入hexo博客_从零开始搭建个人博客(超详细)
  10. android获取有线、wifi、3G(4G)的IP
  11. mybatis的缓存技术使用
  12. 大数据可视化分析方法与流程
  13. 【语音识别】之梅尔频率倒谱系数(mfcc)及Python实现
  14. 电子邮箱官网地址是什么,企业邮箱官网地址登录入口讲解
  15. Matlab之共轭转置与非共轭转置
  16. 1万条数据大概占多大空间_国漫丨2019年上半年漫画数据报告
  17. linux usb ic读卡器,在Linux下使用ACS ACR1252U USB NFC读卡器
  18. 机器学习领域著名的期刊与会议
  19. 怎么把PDF转换成图片?教大家两种方式转换
  20. [算法题]返回数组A的元素组成的小于n的最大数

热门文章

  1. 如何设置python类的私有属性
  2. R3Det: Refined Single-Stage Detector with Feature Refinementfor Rotating Object论文学习
  3. Ubuntu 20.04双拼输入法
  4. JAVA编写代码实现如下需求:皮球(Ball)分为足球(Football)和排球(Volleyball),各种皮球的运动(play)方法各不相同。
  5. c语言编程排球队员站位问题,排球比赛的站位技巧介绍,在比赛过程中该如何与队友沟通呢?排球比赛常见的手势说明...
  6. 经典图书介绍:广义相对论--从A到B
  7. K8S-5--云原生基础/k8s基础及组件/二进制部署k8s集群
  8. uni-app快速上手顺序
  9. java编程实现;猜单词游戏
  10. python中trun是什么意思_Python 中 'unicodeescape' codec can't decode bytes in position XXX: trun錯誤解決方案...