提交 0c6a14e2 authored 作者: liupengfei's avatar liupengfei

--no commit message

上级 eb470760
......@@ -3,6 +3,8 @@ package com.zrqx.third.pay.config;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.io.StringWriter;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.security.SecureRandom;
import java.util.Arrays;
......@@ -13,6 +15,7 @@ import java.util.Set;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import javax.servlet.http.HttpServletRequest;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
......@@ -299,4 +302,26 @@ public class WXPayUtil {
return System.currentTimeMillis();
}
/**
* 获取ip地址
* @param request
* @return
*/
public static String getIpAddr(HttpServletRequest request) {
InetAddress addr = null;
try {
addr = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
return request.getRemoteAddr();
}
byte[] ipAddr = addr.getAddress();
String ipAddrStr = "";
for (int i = 0; i < ipAddr.length; i++) {
if (i > 0) {
ipAddrStr += ".";
}
ipAddrStr += ipAddr[i] & 0xFF;
}
return ipAddrStr;
}
}
......@@ -14,6 +14,7 @@ import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradeCloseRequest;
import com.alipay.api.request.AlipayTradeFastpayRefundQueryRequest;
import com.alipay.api.request.AlipayTradePagePayRequest;
......@@ -104,27 +105,48 @@ public class AliPayImpl extends PayTypeAdapter{
logger.info("zzzzzzzzzzzzzzzzzzzz订单:" + toPayForm.getOut_trade_no() + "开始获取支付宝链接zzzzzzzzzzzzzzzzzzzz");
OrderPayVo orderPayVo = getOrderPayVo(toPayForm.getOut_trade_no());
// 获得初始化的AlipayClient
AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, app_id,
merchant_private_key, "json", charset, alipay_public_key,
sign_type);
// 设置请求参数
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(return_url);
alipayRequest.setNotifyUrl(notify_url);
// String total_amount = "0.01";
alipayRequest.setBizContent("{\"out_trade_no\":\"" + toPayForm.getOut_trade_no() + "\"," + "\"total_amount\":\""
+ orderPayVo.getPayment() + "\"," + "\"subject\":\"" + orderPayVo.getSubject() + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
AlipayClient alipayClient = new DefaultAlipayClient(gatewayUrl, app_id, merchant_private_key, "json", charset,
alipay_public_key, sign_type);
// 请求
String result = "";
String url = "https://openapi.alipay.com/gateway.do?";
try {
logger.info("zzzzzzzzzzzzzzzzzzzz订单:" + toPayForm.getOut_trade_no() + "获取链接请求参数zzzzzzzzzzzzzzzzzzzz\n" + alipayRequest.getBizContent());
result = url + alipayClient.sdkExecute(alipayRequest).getBody();
logger.info("zzzzzzzzzzzzzzzzzzzz订单:" + toPayForm.getOut_trade_no() + "获取链接响应zzzzzzzzzzzzzzzzzzzz\n" + result);
} catch (AlipayApiException e) {
logger.error("zzzzzzzzzzzzzzzzzzzz订单:" + toPayForm.getOut_trade_no() + "获取链接失败zzzzzzzzzzzzzzzzzzzz");
logger.error(e.getMessage());
// 设置请求参数
if("2".equals(toPayForm.getTrade_type())) {
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setReturnUrl(return_url);
request.setNotifyUrl(notify_url);
request.setBizContent("{\"out_trade_no\":\"" + toPayForm.getOut_trade_no() + "\"," + "\"total_amount\":\""
+ orderPayVo.getPayment() + "\"," + "\"subject\":\"" + orderPayVo.getSubject() + "\","
+ "\"product_code\":\"QUICK_MSECURITY_PAY\"}");
//AlipayTradeAppPayResponse response = alipayClient.pageExecute(request);
try {
logger.info("app订单:" + toPayForm.getOut_trade_no() + "获取链接请求参数zzzzzzzzzzzzzzzzzzzz\n"
+ request.getBizContent());
result = url + alipayClient.sdkExecute(request).getBody();
logger.info("app订单:" + toPayForm.getOut_trade_no() + "获取链接响应zzzzzzzzzzzzzzzzzzzz\n" + result);
}catch (Exception e) {
logger.error("app订单:" + toPayForm.getOut_trade_no() + "获取链接失败zzzzzzzzzzzzzzzzzzzz");
logger.error(e.getMessage());
}
}else {
AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();
alipayRequest.setReturnUrl(return_url);
alipayRequest.setNotifyUrl(notify_url);
// String total_amount = "0.01";
alipayRequest.setBizContent("{\"out_trade_no\":\"" + toPayForm.getOut_trade_no() + "\"," + "\"total_amount\":\""
+ orderPayVo.getPayment() + "\"," + "\"subject\":\"" + orderPayVo.getSubject() + "\","
+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");
try {
logger.info("zzzzzzzzzzzzzzzzzzzz订单:" + toPayForm.getOut_trade_no() + "获取链接请求参数zzzzzzzzzzzzzzzzzzzz\n"
+ alipayRequest.getBizContent());
result = url + alipayClient.sdkExecute(alipayRequest).getBody();
logger.info(
"zzzzzzzzzzzzzzzzzzzz订单:" + toPayForm.getOut_trade_no() + "获取链接响应zzzzzzzzzzzzzzzzzzzz\n" + result);
} catch (AlipayApiException e) {
logger.error("zzzzzzzzzzzzzzzzzzzz订单:" + toPayForm.getOut_trade_no() + "获取链接失败zzzzzzzzzzzzzzzzzzzz");
logger.error(e.getMessage());
}
}
logger.info("zzzzzzzzzzzzzzzzzzzz订单:" + toPayForm.getOut_trade_no() + "完成获取支付宝链接zzzzzzzzzzzzzzzzzzzz");
return CallBack.success(result);
......
......@@ -11,13 +11,18 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.BeanUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.alibaba.fastjson.JSON;
import com.zrqx.core.client.form.third.pay.CloseForm;
import com.zrqx.core.client.form.third.pay.RefundForm;
import com.zrqx.core.client.form.third.pay.RefundQueryForm;
......@@ -32,10 +37,12 @@ import com.zrqx.core.client.vo.third.wechart.WecartRefundQueryReturn;
import com.zrqx.core.client.vo.third.wechart.WechartRefundReturn;
import com.zrqx.core.enums.third.pay.PayTypeEnum;
import com.zrqx.core.enums.third.pay.WeChartType;
import com.zrqx.core.exception.BaseException;
import com.zrqx.core.util.datatype.DateUtils;
import com.zrqx.core.util.response.CallBack;
import com.zrqx.third.pay.config.WXPay;
import com.zrqx.third.pay.config.WXPayConfig;
import com.zrqx.third.pay.config.WXPayConstants.SignType;
import com.zrqx.third.pay.config.WXPayUtil;
import com.zrqx.third.pay.interfaces.payType.PayTypeAdapter;
/**
......@@ -108,7 +115,10 @@ public class WeChatPayImpl extends PayTypeAdapter{
Map<String, String> data = new HashMap<String, String>();
data.put("trade_type", WeChartType.getName(toPayForm.getTrade_type()));
data.put("device_info", device_info);
data.put("spbill_create_ip", spbill_create_ip);
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
logger.info("客户端ip:spbill_create_ip:" + WXPayUtil.getIpAddr(request));
data.put("spbill_create_ip", WXPayUtil.getIpAddr(request));
data.put("notify_url", notify_url);
data.put("time_start", startStr);
......@@ -119,7 +129,8 @@ public class WeChatPayImpl extends PayTypeAdapter{
data.put("product_id", String.valueOf(orderPayVo.getId()));
if(WeChartType.JSAPI.getCode().equals(toPayForm.getTrade_type())){
data.put("openid", toPayForm.getOpenid());
}
}
// 统一下单
Map<String, String> resp = wxpay.unifiedOrder(data);
if (resp == null)
return null;
......@@ -137,31 +148,63 @@ public class WeChatPayImpl extends PayTypeAdapter{
Object[] args = new Object[1];
args[0] = value;
descriptor.getWriteMethod().invoke(wecartPayReturn, args);
}
}
}
// 判断统一下单的返回状态码
if(!wecartPayReturn.getReturn_code().equalsIgnoreCase("success")){
throw new BaseException("统一下单失败:"+wecartPayReturn.getReturn_msg());
}
if(WeChartType.JSAPI.getCode().equals(toPayForm.getTrade_type())){
//拼装参数
Map<String,String> map =new HashMap<String,String>();
String timestamp = String.valueOf(new Date().getTime()/1000);
map.put("appId", wecartPayReturn.getAppid());
map.put("timeStamp", timestamp);
map.put("nonceStr", wecartPayReturn.getNonce_str());
map.put("package", "prepay_id="+wecartPayReturn.getPrepay_id());
map.put("signType", "MD5");
map.put("timeStamp", timestamp);
//签名生成
String prepay_id= resp.get("prepay_id");
/*String prepay_id= resp.get("prepay_id");
String stringA =""+"appId="+config.getAppID()+"&nonceStr="+resp.get("nonce_str") +"&package=prepay_id="+prepay_id+"&signType=MD5"+"&timeStamp=" + timestamp + "&key="+config.getKey();
String paySign=WXPayUtil.MD5(stringA).toUpperCase();
String paySign=WXPayUtil.MD5(stringA).toUpperCase();*/
String paySign = WXPayUtil.generateSignature(map, config.getKey(),SignType.MD5);
wecartPayReturn.setSign(paySign);
wecartPayReturn.setTimestamp(timestamp);
map.put("paySign ", paySign);
logger.info("wwwwwwwwwwwwwwwwwwwwJSAPI订单:" + toPayForm.getOut_trade_no() + "完成获取微信链接wwwwwwwwwwwwwwwwwwww");
return CallBack.success(JSON.toJSONString(map));
}
if(WeChartType.APP.getCode().equals(toPayForm.getTrade_type())){
//拼装参数
Map<String,String> map =new HashMap<String,String>();
String timestamp = String.valueOf(new Date().getTime()/1000);
map.put("appId", wecartPayReturn.getAppid());
map.put("timeStamp", timestamp);
map.put("nonceStr", wecartPayReturn.getNonce_str());
map.put("package", "Sign=WXPay");
map.put("partnerid", config.getMchID());
map.put("prepayid", wecartPayReturn.getPrepay_id());
map.put("signType", "MD5");
//签名生成
String prepay_id= resp.get("prepay_id");
String stringA =""+"appid="+config.getAppID()+"&noncestr="+resp.get("nonce_str") +"&package=Sign=WXPay"+"&partnerid="+config.getMchID()+"&prepayid="+prepay_id+"&timestamp=" + timestamp + "&key="+config.getKey();
String paySign=WXPayUtil.HMACSHA256(stringA, config.getKey()).toUpperCase();
//String paySign = WXPayUtil.generateSignature(map, config.getKey(),SignType.MD5);
wecartPayReturn.setSign(paySign);
wecartPayReturn.setTimestamp(timestamp);
if(!wecartPayReturn.getReturn_code().equalsIgnoreCase("success")){
throw new BaseException(wecartPayReturn.getReturn_msg());
}
logger.info("wwwwwwwwwwwwwwwwwwwwAPP订单:" + toPayForm.getOut_trade_no() + "完成获取微信链接wwwwwwwwwwwwwwwwwwww"+ stringA+"&sign="+paySign);
return CallBack.success(stringA+"&sign="+paySign);
}
logger.info("wwwwwwwwwwwwwwwwwwww订单:" + toPayForm.getOut_trade_no() + "完成获取微信链接wwwwwwwwwwwwwwwwwwww");
logger.info("wwwwwwwwwwwwwwwwwwww扫码订单:" + toPayForm.getOut_trade_no() + "完成获取微信链接wwwwwwwwwwwwwwwwwwww");
return CallBack.success(wecartPayReturn.getCode_url());
} catch (Exception e) {
logger.error("wwwwwwwwwwwwwwwwwwww订单:" + toPayForm.getOut_trade_no() + "获取微信链接失败wwwwwwwwwwwwwwwwwwww");
logger.error(e.getMessage());
return CallBack.fail();
return CallBack.fail(e.getMessage());
}
}
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论