springboot接入微信app支付的方法

本文使用springboot集成微信支付服务,包含微信统一支付订单接口,以及支付回调接口等,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.前戏

1.1请先完成微信APP支付接入商户服务中心

1.2详情请参考微信官方文档:https://open.weixin.qq.com/

2.application.yml文件的配置如下

 #微信支付配置 tenpayconfig: #商户APPID appId: asdfg12345 #商户号 mchId: 12345678 #商户的key(API密匙) key: qwertyuiop #API支付请求地址 payUrl: https://api.mch.weixin.qq.com/pay/unifiedorder #API查询请求地址 queryUrl: https://api.mch.weixin.qq.com/pay/orderquery #package packageValue: Sign=WXPay 

3.配置文件对应的TenpayConfig,若没集成lombok请自行生成get/set方法

 import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import lombok.Data; /** * @Description: 微信支付配置类 * @Param: * @return: * @Author: zengXianKang * @Date: 2019/7/28 */ @Data @Component @ConfigurationProperties(prefix = "tenpayconfig") public class TenpayConfig { //appId private String appId; //商户号 private String mchId; //商户的key(API密匙) private String key; //API支付请求地址 private String payUrl; //API查询请求地址 private String queryUrl; //Sign=WXPay private String packageValue; }    

3.1新建一个TenPayVO

 import java.math.BigDecimal; import lombok.Data; /** * @description: TenPayVO * @author: zengXianKang * @create: 2019-07-28 **/ @Data public class TenPayVO { //商户订单号 private String outTradeNo; //业务结果 private String resultCode; //签名方式 private String signType; //签名 private String sign; //交易类型 private String tradeType; //交易状态 private String tradeState; //商户号 private String mchId; //付款银行 private String bankType; //支付金额 private BigDecimal totalFee; //币种 private String feeType; //微信支付订单号 private String transactionId; //支付完成时间 private String timeEnd; }

3.2由于微信支付和回调的报文都是xml,先在maven中添加xstream的jar依赖

  com.thoughtworks.xstreamxstream1.4.7

3.3TenPayUtils工具类,直接拿去用吧,该用到的我基本都写好了,拿走不谢

 import com.github.pagehelper.util.StringUtil; import com.huaku.ecom.common.config.TenpayConfig; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.converters.Converter; import com.thoughtworks.xstream.converters.MarshallingContext; import com.thoughtworks.xstream.converters.UnmarshallingContext; import com.thoughtworks.xstream.io.HierarchicalStreamReader; import com.thoughtworks.xstream.io.HierarchicalStreamWriter; import com.thoughtworks.xstream.io.xml.DomDriver; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; import javax.net.ssl.HttpsURLConnection; import java.io.*; import java.net.URL; import java.security.NoSuchAlgorithmException; import java.util.*; import java.util.Map.Entry; /** * TenPayUtils * @author :zengXianKang */ @Component public class TenPayUtils { private static TenPayUtils tenPayUtils; @Autowired private TenpayConfig tenpayConfig; @PostConstruct public void init(){ tenPayUtils = this; tenPayUtils.tenpayConfig = this.tenpayConfig; } /** * @Description: 微信支付签名 * * @Param: [paramsMap, charSetName] * @return: java.lang.String * @Author: zengXianKang * @Date: 2019/7/28 */ public String createSign(SortedMap paramsMap, String charSetName) throws UnsupportedEncodingException, NoSuchAlgorithmException { StringBuffer buffer = new StringBuffer(); //参数按照ACCSII排序(升序) Set set = paramsMap.entrySet(); Iterator iterator = set.iterator(); while (iterator.hasNext()){ Map.Entry entry = (Map.Entry) iterator.next(); String key = (String) entry.getKey(); String value = (String) entry.getValue(); if(!key.equals("sign") && StringUtil.isNotEmpty(value)){ buffer.append(key + "=" + value + "&"); } } buffer.append("key=" + tenPayUtils.tenpayConfig.getKey()); String sign = MDUtils.MD5EncodeForHex(buffer.toString(), charSetName).toUpperCase(); return sign; } /** * @Description: 组装微信支付请求报文 * * @Param: [paramsMap] * @return: java.lang.String * @Author: zengXianKang * @Date: 2019/7/28 */ public static String tenPayXmlInfo(SortedMap paramsMap){ StringBuffer buffer = new StringBuffer(); if(paramsMap != null){ buffer.append(""); for(Map.Entry entry : paramsMap.entrySet()){ buffer.append("<").append(entry.getKey()).append(">"); } buffer.append(""); } return buffer.toString(); } /** * @Description: 请求调用URL * * @Param: [requestUrl, requestMethod, output] * @return: java.lang.String * @Author: zengXianKang * @Date: 2019/7/28 */ public static String httpsRequest(String requestUrl, String requestMethod, String output) throws Exception { URL url = new URL(requestUrl); HttpsURLConnecti

以上就是springboot接入微信app支付的方法的详细内容,更多请关注0133技术站其它相关文章!

赞(0) 打赏
未经允许不得转载:0133技术站首页 » Java