weixin-java-pay实现APP微信支付与退款
pom依赖:
<dependency><groupId>com.github.binarywang</groupId><artifactId>weixin-java-pay</artifactId><version>3.6.0</version><exclusions><exclusion><groupId>com.github.binarywang</groupId><artifactId>qrcode-utils</artifactId></exclusion></exclusions></dependency>
application.yml配置:
wx:app-id: app-secret: mch-id: mch-key: notify-url: refund-notify-url: # 微信退款通知回调接口key-path: classpath:cert/apiclient_cert.p12
读取配置信息,初始化配置,两个文件:
@Configuration
@ConfigurationProperties(prefix = "wx")
@Data
public class WxProperties {private String appId;private String mchId;private String mchKey;private String notifyUrl;private String keyPath;private String refundNotifyUrl;}
@Configuration
public class WxConfig {private final WxProperties properties;public WxConfig(WxProperties properties) {this.properties = properties;}@Beanpublic WxPayConfig wxPayConfig() {WxPayConfig payConfig = new WxPayConfig();payConfig.setAppId(properties.getAppId());payConfig.setMchId(properties.getMchId());payConfig.setMchKey(properties.getMchKey());payConfig.setNotifyUrl(properties.getNotifyUrl());payConfig.setKeyPath(properties.getKeyPath());payConfig.setTradeType("APP");payConfig.setSignType("MD5");return payConfig;}@Beanpublic WxPayService wxPayService(WxPayConfig payConfig) {WxPayService wxPayService = new WxPayServiceImpl();wxPayService.setConfig(payConfig);return wxPayService;}
}
微信支付/退款/查询:
/*** 预支付* @param request* @return*/public WxPayAppOrderResult wxPrepay(PayRequest request) {// TODO 先保存支付请求历史记录WxPayAppOrderResult result = null;WxPayUnifiedOrderRequest orderRequest = new WxPayUnifiedOrderRequest();orderRequest.setOutTradeNo(request.getPaySn());orderRequest.setTotalFee((request.getTotalFee());orderRequest.setBody(request.getBody());orderRequest.setSpbillCreateIp(request.getIp());orderRequest.setDeviceInfo(request.getDeviceInfo()); // 非必填orderRequest.setDetail(request.getDetail()); // 非必填orderRequest.setAttach(request.getAttach()); // 非必填try {result = wxPayService.createOrder(orderRequest);} catch (WxPayException e) {log.error("微信支付-生成预付款订单错误", e);}return result;}/*** 支付通知* @param xmlResult* @return*/public String wxPayNotify(@RequestBody String xmlResult) {WxPayOrderNotifyResult result;try {result = wxPayService.parseOrderNotifyResult(xmlResult);if (!WxPayConstants.ResultCode.SUCCESS.equals(result.getReturnCode())) {log.error(xmlResult);throw new WxPayException("微信支付-通知失败!");}if (!WxPayConstants.ResultCode.SUCCESS.equals(result.getResultCode())) {log.error(xmlResult);throw new WxPayException("微信支付-通知失败!");}} catch (WxPayException e) {log.error("微信支付-通知失败", e);return WxPayNotifyResponse.fail(e.getMessage());}String orderSn = result.getOutTradeNo();String thirdTradeId = result.getTransactionId();// 支付成功业务处理return WxPayNotifyResponse.success("OK");}/*** 支付订单查询* @param transactionId 微信返回订单号* @param paySn 支付流水号* @return*/public String wxOrderQuery(String transactionId, String paySn) {WxPayOrderQueryResult result = null;try {result = wxPayService.queryOrder(transactionId, paySn);if (!WxPayConstants.ResultCode.SUCCESS.equals(result.getReturnCode())) {throw new WxPayException("微信支付-查询失败!");}if (!WxPayConstants.ResultCode.SUCCESS.equals(result.getResultCode())) {throw new WxPayException("微信支付-查询失败!");}} catch (WxPayException e) {log.error("微信支付-查询失败,params:" + result, e);return null;}if (!WxPayConstants.WxpayTradeStatus.SUCCESS.equals(result.getTradeState())) {// 查询失败}// 查询成功业务处理}/*** 微信退款* @param body* @return*/public String wxRefund(RefundRequest body) {WxPayRefundRequest refundRequest = new WxPayRefundRequest();refundRequest.setOutTradeNo(body.getPaySerial());refundRequest.setOutRefundNo(body.getPaySerial());refundRequest.setTotalFee(refundFee);refundRequest.setRefundFee(refundFee);refundRequest.setRefundDesc("商品退款");refundRequest.setNotifyUrl(wxProperties.getRefundNotifyUrl());try {WxPayRefundResult result = wxPayService.refund(refundRequest);if (REFUND_SUCCESS.equals(result.getReturnCode()) && REFUND_SUCCESS.equals(result.getResultCode())) {// 退款成功} else {// 退款失败}} catch (WxPayException e) {e.printStackTrace();}}/*** 微信退款通知* @return*/public String wxRefundNotify(@RequestBody String xmlResult) {WxPayRefundNotifyResult result;try {result = wxPayService.parseRefundNotifyResult(xmlResult);if (!WxPayConstants.ResultCode.SUCCESS.equals(result.getReturnCode())) {log.error(xmlResult);throw new WxPayException("微信退款-通知失败!");}if (!WxPayConstants.RefundStatus.SUCCESS.equals(result.getReqInfo().getRefundStatus())) {log.error(xmlResult);throw new WxPayException("微信退款-通知失败");}} catch (WxPayException e) {log.error("微信退款-通知失败", e);return WxPayNotifyResponse.fail(e.getMessage());}WxPayRefundNotifyResult.ReqInfo reqInfo = result.getReqInfo();reqInfo.getOutTradeNo();// 退款成功业务处理return WxPayNotifyResponse.success("OK");}
weixin-java-pay实现APP微信支付与退款相关推荐
- java+uniapp对接app微信支付
java+uniapp对接app微信支付 1.准备工作 注册app APP接入微信支付,需要先将商户APP在微信开放平台进行注册,登记APP开发参数以生成APPID.具体操作步骤如下: 一.登录微信开 ...
- app微信支付-java服务端接口 支付/查询/退款
app微信支付-java服务端接口 支付-查询-退款 个人看微信的文档,看了很多前辈的写法,终于调通了,在这里做一下记录. 首先来定义各种处理类(微信支付不需要特殊jar包,很多处理需要自己封装,当然 ...
- 微信回调 java_详解APP微信支付(java后台_统一下单和回调)
1.微信配置信息 global.properties 2.方法wxpay用于生成预支付订单信息 方法notifyWeiXinPay用于微信支付成功后的回调, 注意: 在手机端使用微信支付成功后,微信服 ...
- php android 微信支付,Android_Android实现微信支付功能,开发Android APP微信支付功能, - phpStudy...
Android实现微信支付功能 开发Android APP微信支付功能,需要完成三个步骤:第一步生成预支付订单.第二步生成微信支付参数.第三步调起微信APP支付.除了需要审核通过的APP应用外,还需要 ...
- app微信支付后端接口编写
刚做完app微信支付,我这块主要负责的是后端,现在我将我怎么开发的以及踩过的坑给大家写出来 微信支付主要有3步, 第一步:是生成一个预付订单 第二步:第二次签名的信息传到app端 第三步:最后接受到微 ...
- 用java实现微信支付,退款,部分退款服务端
由于公司业务需要,最近搞微信退款功能,今天抽空在此记录一下,以后用到也可以到这来看一眼.废话不多说,进入正题. 微信支付以及付款呢,先要有个证书,不清楚的,还要有证书,可以去微信平台看证书怎么下载 h ...
- Android支付宝错误码62009,hb混合开发app 微信支付提示支付宝62009未知错误
问题描述 hb混合开发app 微信支付提示支付宝62009未知错误 问题出现的环境背景及自己尝试过哪些方法 真机模拟测试 相关代码 获取通道 mounted(){ plus.payment.getCh ...
- 微信h5支付 php sdk_微信支付V3版,H5,APP微信支付PHP服务端使用方式
使用步骤: 1.导入下载好的微信V3版本SDK public function __construct() { parent::__construct(); //引入微信支付 Vendor('Wxpa ...
- IOS --app微信支付
2019独角兽企业重金招聘Python工程师标准>>> 微信支付分为好几种,这里记录的是app微信支付流程. 适用场景 用户使用xxAPP时,需要通过微信支付完成某项报名.此时xxA ...
最新文章
- 小程序给视频加默认图片封面,点击播放视频并停止播放上一个视频
- 关于CSS中表单的一些属性和使用
- div 隐藏_注入WordPress网站的隐藏垃圾邮件链接
- 《侠侣天下》资料片武魂大揭晓
- 快学Scala习题解答—第十章 特质
- HTML5 基础知识(四)
- js String方法集合
- Web API 实现JSONP或者安装配置Cors跨域
- 循环基础-第一个while循环
- python scrapy request_Scrapy中的Request和日志分析|python基础教程|python入门|python教程...
- MySQL数据库的datetime与timestamp
- 光耦驱动单向可控硅_华越国际一文带路:可控硅触发设计技巧
- CodeProject每日精选: Progress controls 进度条
- exit(0)和exit(1)解释
- 斯坦福大学stanford
- 霍兰德SE型人格如何选择专业?高考志愿填报选专业
- PHP实现生成二维码的示例代码
- 生物电(ECG、EMG、EEG)科普研究
- 【无标题】阿里滑块 通过 x82y接口、dll、源码 返回x5sec,可解决!
- 华为业务:组织架构和产品矩阵