package com.vibang.tyrl.admin.utils;
import com.vibang.tyrl.admin.api.dto.pay.WXPayDTO;
import com.vibang.tyrl.admin.api.vo.trade.WeChatAppLetPaymentVO;
import com.vibang.tyrl.admin.api.vo.trade.WeChatAppPaymentVO;
import com.wechat.pay.java.core.Config;
import com.wechat.pay.java.core.RSAAutoCertificateConfig;
import com.wechat.pay.java.service.payments.app.AppServiceExtension;
import com.wechat.pay.java.service.payments.app.model.Amount;
import com.wechat.pay.java.service.payments.app.model.PrepayRequest;
import com.wechat.pay.java.service.payments.app.model.PrepayWithRequestPaymentResponse;
import com.wechat.pay.java.service.payments.app.model.QueryOrderByOutTradeNoRequest;
import com.wechat.pay.java.service.payments.jsapi.JsapiServiceExtension;
import com.wechat.pay.java.service.payments.jsapi.model.Payer;
import com.wechat.pay.java.service.payments.model.Transaction;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.time.ZonedDateTime;
import java.time.format.DateTimeFormatter;
import java.time.temporal.ChronoUnit;
@Configuration
public class WXPayUtil {
public static String merchantId;
public static String appId;
public static String appLetId;
public static String privateKey;
public static String merchantSerialNumber;
public static String apiV3Key;
public static String notifyUrl;
@Value("${WxPayParam.config.merchantId}")
public void setMerchantId(String merchantId){
WXPayUtil.merchantId=merchantId;
}
@Value("${WxPayParam.config.appId}")
public void setAppId(String appId){
WXPayUtil.appId=appId;
}
@Value("${WxPayParam.config.appLetId}")
public void setAppLetId(String appLetId){
WXPayUtil.appLetId=appLetId;
}
@Value("${WxPayParam.config.privateKey}")
public void setPrivateKey(String privateKey){
WXPayUtil.privateKey=privateKey;
}
@Value("${WxPayParam.config.merchantSerialNumber}")
public void setMerchantSerialNumber(String merchantSerialNumber){
WXPayUtil.merchantSerialNumber=merchantSerialNumber;
}
@Value("${WxPayParam.config.apiV3Key}")
public void setApiV3Key(String apiV3Key){
WXPayUtil.apiV3Key=apiV3Key;
}
@Value("${WxPayParam.config.notifyUrl}")
public void setNotifyUrl(String notifyUrl){
WXPayUtil.notifyUrl=notifyUrl;
}
public static AppServiceExtension appServiceExtension;
public static JsapiServiceExtension jsapiServiceExtension;
/**
* APP下单
* @param dto
* @return
*/
public static WeChatAppPaymentVO createOrder(WXPayDTO dto){
// 初始化商户配置
Config config =
new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
// 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
.privateKey(privateKey)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3Key)
.build();
appServiceExtension = new AppServiceExtension.Builder().config(config).build();
PrepayRequest prepayRequest = new PrepayRequest();
Amount amount = new Amount();
amount.setTotal(dto.getTotal());
amount.setCurrency("CNY");
prepayRequest.setAmount(amount);
prepayRequest.setAppid(appId);
prepayRequest.setMchid(merchantId);
prepayRequest.setDescription(dto.getDescription());
prepayRequest.setNotifyUrl(notifyUrl);
//设置订单失效时间
// 格式化时间为RFC 3339标准格式
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssXXX");
prepayRequest.setTimeExpire(formatter.format(ZonedDateTime.now().plus(30, ChronoUnit.MINUTES)));
long outTradeNo = System.currentTimeMillis();
prepayRequest.setOutTradeNo(String.valueOf(outTradeNo));
/*对于微信服务端来说,不必要知道付款人是谁,只需要知道订单交易号即可*/
/*流程是:用户下单 -> 服务端存储订单信息 -> 将订单信息传输给微信服务端完成下单操作
* -> 微信返回下单成功的参数给服务端 -> 服务端拿到返回值返回给前端 -> 前端调起微信收银台
* -> 用户操作进行支付 -> 微信响应APP支付结果 -> 异步微信服务端根据订单号将支付结果回调通知给服务端
* -> 服务端修改数据库订单支付状态
* -> 前端主动查询订单信息 -> 支付成功
* */
PrepayWithRequestPaymentResponse prepayWithRequestPaymentResponse = appServiceExtension.prepayWithRequestPayment(prepayRequest);
System.out.println(prepayWithRequestPaymentResponse);
WeChatAppPaymentVO paymentVO = new WeChatAppPaymentVO();
paymentVO.setPayment(prepayWithRequestPaymentResponse);
paymentVO.setOutOrderNo(String.valueOf(outTradeNo));
return paymentVO;
}
/** 商户订单号查询订单 */
public static Boolean queryOrderByOutTradeNo(String outTradeNo) {
// 初始化商户配置
Config config =
new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
// 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
.privateKey(privateKey)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3Key)
.build();
appServiceExtension = new AppServiceExtension.Builder().config(config).build();
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
// 调用request.setXxx(val)设置所需参数,具体参数可见Request定义
request.setMchid(merchantId);
request.setOutTradeNo(outTradeNo);
// 调用接口
Transaction transaction = appServiceExtension.queryOrderByOutTradeNo(request);
System.out.println(transaction);
if (transaction.getTradeState().equals(Transaction.TradeStateEnum.SUCCESS)){
return Boolean.TRUE;
}
return Boolean.FALSE;
}
/**
* 小程序下单
* @return
*/
public static WeChatAppLetPaymentVO appLetCreateOrder(WXPayDTO dto) {
// 初始化商户配置
Config config =
new RSAAutoCertificateConfig.Builder()
.merchantId(merchantId)
// 使用 com.wechat.pay.java.core.util 中的函数从本地文件中加载商户私钥,商户私钥会用来生成请求的签名
.privateKey(privateKey)
.merchantSerialNumber(merchantSerialNumber)
.apiV3Key(apiV3Key)
.build();
// 初始化服务
jsapiServiceExtension = new JsapiServiceExtension.Builder().config(config).signType("RSA") // 不填默认为RSA
.build();
//调用接口
com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest prepayRequest = new com.wechat.pay.java.service.payments.jsapi.model.PrepayRequest();
com.wechat.pay.java.service.payments.jsapi.model.Amount amount = new com.wechat.pay.java.service.payments.jsapi.model.Amount();
amount.setTotal(dto.getTotal());
amount.setCurrency("CNY");
prepayRequest.setAmount(amount);
prepayRequest.setAppid(appLetId);
prepayRequest.setMchid(merchantId);
prepayRequest.setDescription(dto.getDescription());
pre
没有合适的资源?快使用搜索试试~ 我知道了~
实现了APP微信支付的代码
资源推荐
资源详情
资源评论
收起资源包目录
支付完整代码.zip (2个子文件)
支付完整代码
WXPayUtil.java 10KB
TradeOrderInfoController.java 5KB
共 2 条
- 1
资源评论
铸键为犁
- 粉丝: 63
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功