pom.xml
<!-- 微信支付SDK -->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
配置文件
public class WxConfig implements WXPayConfig {
@Override
public String getAppID(){
return MyWxPayConfig.appid;
}
@Override
public String getMchID(){
return MyWxPayConfig.mch_id;
}
@Override
public String getKey(){
return MyWxPayConfig.key;
}
@Override
public InputStream getCertStream(){
return null;
}
@Override
public int getHttpConnectTimeoutMs() {
return 0;
}
@Override
public int getHttpReadTimeoutMs() {
return 0;
}
}
public class MyWxPayConfig {
public static final String appid = "1";
public static final String appSecret = "1";
public static final String mch_id = "1";
public static final String key = "1";
public static final String get_openid_url ="https://api.weixin.qq.com/sns/jscode2session";
public static final String notify_url = "http://47.93.87.216:8081/wx/notify";
}
工具类
public class ConvertUtils {
public static String convertToString(InputStream inputStream) throws IOException {
ByteArrayOutputStream outSteam = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while ((len = inputStream.read(buffer)) != -1) {
outSteam.write(buffer, 0, len);
}
outSteam.close();
inputStream.close();
String result = new String(outSteam.toByteArray(), "utf-8");
return result;
}
}
Controller
@RequestMapping("/wx")
@RestController
public class WXPayController {
@Autowired
private RestTemplate restTemplate;
@Autowired
private WxPayService wxPayService;
@GetMapping("/pay")
@ResponseBody
public Result pay(HttpServletRequest request,@RequestBody PayParam Param) throws Exception {
String openid = Param.getOpenid();
String orderNo = Param.getOrderNo();
Double totalMoney = Param.getTotalMoney();
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
if (ip.indexOf(",") != -1) {
String[] ips = ip.split(",");
ip = ips[0].trim();
}
return wxPayService.wxPay(openid, orderNo, totalMoney, ip);
}
@RequestMapping("/notify")
public void notifyLogic(HttpServletRequest request, HttpServletResponse response) {
try {
String xml = ConvertUtils.convertToString(request.getInputStream());
Map<String, String> map = WXPayUtil.xmlToMap(xml);
if ("SUCCESS".equals(map.get("result_code"))) {
response.setContentType("text/xml");
String data="<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
response.getWriter().write(data);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Service
@Service
public class WxPayService {
public Result wxPay(String openid, String orderNo, Double totalMoney, String ip) {
try {
Map<String, String> paraMap = new HashMap<String, String>();
paraMap.put("openid",openid);
paraMap.put("body", "充值佣金");
paraMap.put("out_trade_no", orderNo);
BigDecimal payMoney = new BigDecimal(totalMoney);
BigDecimal fen = payMoney.multiply(new BigDecimal("100"));
fen = fen.setScale(0, BigDecimal.ROUND_UP);
paraMap.put("total_fee", String.valueOf(fen));
paraMap.put("spbill_create_ip", ip);
paraMap.put("notify_url","http://zq32586844.qicp.vip/wx/notify");
paraMap.put("trade_type", "JSAPI");
WxConfig config = new WxConfig();
WXPay wxpay = new WXPay(config);
Map<String, String> map = wxpay.unifiedOrder(paraMap);
String prepayId = (String) map.get("prepay_id");
Map<String, String> payMap = new HashMap<String, String>();
payMap.put("appId", MyWxPayConfig.appid);
payMap.put("timeStamp", System.currentTimeMillis() + "");
payMap.put("nonceStr", WXPayUtil.generateNonceStr());
payMap.put("signType", WXPayConstants.HMACSHA256);
payMap.put("package", "prepay_id=" + prepayId);
String paySign = WXPayUtil.generateSignature(payMap, MyWxPayConfig.key,WXPayConstants.SignType.HMACSHA256);
payMap.put("paySign", paySign);
return Result.ok("调用统一下单接口,成功!", payMap);
} catch (Exception e) {
e.printStackTrace();
return Result.error("调用统一下单接口,失败!");
}
}
}