微信支付总结
轻量的微信支付组件wepay
他山之石可以攻玉
以下文档基于github上找到的一款优秀的支付组件wepay。
wepay为我们做的事情:创建签名、验证签名,解析或转换微信要求的XML格式参数。
wepay实现了:支付、退款、订单、通知、账单等功能,详情可以参考wepay接口文档,或直接点击下面链接了解。
轻量的微信支付组件:https://github.com/ihaolin/wepay
微信支付,官方开发文档:https://pay.weixin.qq.com/wiki/doc/api/index.html
简单封装的WePayUtil
根据作者的demo,结合项目实际情况,我整理了一个更方便的WePayUtil
application.properties
# 微信支付回调地址(外网可访问)
wepay.notify.url=domain/wepay/notify
# 微信支付用的 appId,appKey,mchId(商户号是数字,appKey是管理后台配置好的一个自定义字符串)
wepay.appId = wxabcd1234xxxx
wepay.appKey = zidingyideyichuankey
wepay.mchId = 1234567890
WePayUtil.java
package com.parsec.universal.util;
import com.google.common.base.Throwables;
import com.parsec.universal.exception.BadRequestException;
import lombok.Data;
import me.hao0.common.date.Dates;
import me.hao0.wepay.core.Wepay;
import me.hao0.wepay.core.WepayBuilder;
import me.hao0.wepay.model.pay.JsPayRequest;
import me.hao0.wepay.model.pay.JsPayResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.servlet.http.HttpServletRequest;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.Map;
/**
* 公司微信支付工具
* <p>
* PS:退款才使用证书
* </p>
*/
@Component
@Data
public class WePayUtil {
@Value("${wepay.appId}")
private String appId;
@Value("${wepay.appKey}")
private String appKey;
@Value("${wepay.mchId}")
private String mchId;
@Value("${wepay.notify.url}")
private String notifyUrl;
private Wepay wepay;
@PostConstruct
public void initWepay() {
try {
wepay = WepayBuilder.newBuilder(appId, appKey, mchId)
.certPasswd(mchId)
.build();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 小程序支付
*
* @param outTradeNo 商户订单号(32个字符内,只能是数字、大小写字母_-|*且在同一个商户号下唯一)
* @param body 商品描述,如“腾讯充值中心-QQ会员充值”
* @param ip 终端IP
* @param totalFee 总金额
* @param openid openid
* @param notifyUrl 回调地址
* @return 预支付参数
*/
public JsPayResponse jsPay