<h2>1.前戏<br>
</h2>
<p>1.1请先完成微信APP支付接入商户服务中心<br>
</p>
<p>1.2详情请参考微信官方文档:<a href="https://open.weixin.qq.com/" rel="external nofollow" target="_blank">https://open.weixin.qq.com/</a></p>
<h2>2.application.yml文件的配置如下<br>
</h2>
<div class="blockcode">
<pre class="brush:plain;">
#微信支付配置
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
</pre>
</div>
<h2>3.配置文件对应的TenpayConfig,若没集成lombok请自行生成get/set方法<br>
</h2>
<div class="blockcode">
<pre class="brush:java;">
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;
} </pre>
</div>
<p>3.1新建一个TenPayVO<br>
</p>
<div class="blockcode">
<pre class="brush:java;">
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;
}</pre>
</div>
<p>3.2由于微信支付和回调的报文都是xml,先在maven中添加xstream的jar依赖<br>
</p>
<div class="blockcode">
<pre class="brush:xml;">
<!--xstream-->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7</version>
</dependency>
</pre>
</div>
<p>3.3TenPayUtils工具类,直接拿去用吧,该用到的我基本都写好了,拿走不谢<br>
</p>
<div class="blockcode">
<pre class="brush:java;">
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<String, Object> 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
*/
pub |
|