springboot接入微信app支付的方法

论坛 期权论坛     
niminba   2021-5-26 12:31   2348   0
<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;">
&lt;!--xstream--&gt;
&lt;dependency&gt;
    &lt;groupId&gt;com.thoughtworks.xstream&lt;/groupId&gt;
    &lt;artifactId&gt;xstream&lt;/artifactId&gt;
    &lt;version&gt;1.4.7&lt;/version&gt;
&lt;/dependency&gt;
</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&lt;String, Object&gt; 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") &amp;&amp; StringUtil.isNotEmpty(value)){
                buffer.append(key + "=" + value + "&amp;");
            }
        }
        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
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP