@Repository(value = ConstantsPay.DaJi_PAY + "Processor")
@Log4j2
public class DajiPayProcessor extends AbstractPay {
@Override
public String orderPay(PayChannelNew payChannelNew, PayPlatformNew payPlatformNew, ReqPayRechargeNew reqPayRecharge) {
Map<String, String> params = new HashMap<>();
params.put("return_type", "json");
params.put("api_code", payPlatformNew.getMerId());
params.put("is_type", payChannelNew.getPayMethod());
params.put("price", reqPayRecharge.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP).toString());
params.put("order_id", reqPayRecharge.getOrderNo());
params.put("mark", "buy");
params.put("return_url", payReturnUrl);
params.put("notify_url", payCallbackUrl + ConstantsPay.DaJi_PAY);
params.put("time", System.currentTimeMillis() + "");
//对参数名按照ASCII升序排序
Object[] key = params.keySet().toArray();
Arrays.sort(key);
//生成加密原串
StringBuffer res = new StringBuffer();
for (int i = 0; i < key.length; i++) {
res.append(key[i] + "=" + params.get(key[i]) + "&");
}
//再拼接秘钥
String src = res.append("key=" + payPlatformNew.getSignMd5()).toString();
//MD5加密并转为大写
String sign = DigestUtils.md5Hex(src).toUpperCase();
log.warn(sign);
params.put("sign", sign);
log.warn(JsonUtil.object2Json(params));
MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
params.forEach((k, v) -> map.add(k, v));
//发送请求
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.APPLICATION_FORM_URLENCODED);
HttpEntity<MultiValueMap<String, Object>> httpEntity = new HttpEntity<>(map, httpHeaders);
Map<String, Object> resultMap = null;
try {
resultMap = restTemplate.postForObject(payPlatformNew.getPlatPayUrl(), httpEntity, Map.class);
} catch (Exception e) {
log.error(e.getMessage(), e);
}
System.err.println(JsonUtil.object2Json(resultMap));
if (!CollectionUtils.isEmpty(resultMap) && resultMap.containsKey("payurl")) {
System.out.println(resultMap.get("payurl").toString());
return resultMap.get("payurl").toString();
}
return null;
}
@Override
public boolean queryPay(MemberPayJour payJour, PayPlatformNew payPlatformNew, PayChannelNew payChannelNew) {
SortedMap<String, String> reqMap = new TreeMap<>();
reqMap.put("api_code", payPlatformNew.getMerId());
reqMap.put("is_type", payChannelNew.getPayMethod());
reqMap.put("order_id", payJour.getOrder_no());
reqMap.put("price", payJour.getMoney().setScale(2, BigDecimal.ROUND_HALF_UP).toString());
//对参数名按照ASCII升序排序
Object[] key = reqMap.keySet().toArray();
Arrays.sort(key);
//生成加密原串
StringBuffer res = new StringBuffer();
for (int i = 0; i < key.length; i++) {
res.append(key[i] + "=" + reqMap.get(key[i]) + "&");
}
//再拼接秘钥
String src = res.append("key=" + payPlatformNew.getSignMd5()).toString();
//MD5加密并转为大写
String sign = DigestUtils.md5Hex(src).toUpperCase();
reqMap.put("sign",sign);
MultiValueMap<String, String> requestMap = new LinkedMultiValueMap<>();
requestMap.setAll( reqMap );
log.warn( JsonUtil.object2Json( requestMap ) );
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType( MediaType.APPLICATION_FORM_URLENCODED );
HttpEntity<MultiValueMap<String, String>> httpEntity = new HttpEntity<>( requestMap, httpHeaders );
Map<String,Object> resultMap=null;
try {
resultMap = restTemplate.postForObject( payPlatformNew.getPlatPayUrl(), httpEntity, Map.class );
} catch ( Exception e ) {
log.error( e.getMessage(), e );
}
log.warn( JsonUtil.object2Json( resultMap ) );
if ( !CollectionUtils.isEmpty( resultMap ) ) {
int status = Integer.parseInt( resultMap.getOrDefault( "status", 0 ).toString() );
if ( status == 1 ) {
BigDecimal real_price = new BigDecimal( resultMap.getOrDefault( "real_price", 0 ).toString() );
String paysapi_id = resultMap.getOrDefault( "paysapi_id", "" ).toString();
payJour.setSub_money(real_price);
payJour.setTrade_sn(paysapi_id);
return true;
}
}
return false;
}
@Override
public String callbackPay(Map<String, Object> requestMap, String realIp) {
// 订单id
String order_id = requestMap.getOrDefault("order_id", "").toString();
// 上游订单ID
String paysapi_id = requestMap.getOrDefault("paysapi_id", "").toString();
MemberPayJour payJour = payJourMapper.findByOrderNo(order_id);
if ("1".equals(payJour.getStatus())) {
log.warn("订单已成功,无需继续回调");
return "success";
}
PayPlatformNew payPlatformNew = payPlatformNewMapper.selectByPrimaryKey(Integer.valueOf(payJour.getPlatform_id()));
PayChannelNew payChannelNew = payChannelNewMapper.selectByPrimaryKey(Integer.valueOf(payJour.getChannel_id()));
BigDecimal price = new BigDecimal(requestMap.getOrDefault("price", 0).toString());
BigDecimal real_price = new BigDecimal(requestMap.getOrDefault("real_price", 0).toString());
String is_type = requestMap.getOrDefault("is_type", "").toString();
String mark = requestMap.getOrDefault("mark", "").toString();
String code = requestMap.getOrDefault("code", "").toString();
String api_code = requestMap.getOrDefault("api_code", "").toString();
String sign = requestMap.getOrDefault("sign", "").toString();
SortedMap<String, Object> bodyMap = new TreeMap<>();
bodyMap.put("order_id", order_id);
bodyMap.put("paysapi_id", paysapi_id);
bodyMap.put("price", price);
bodyMap.put("real_price", real_price);
bodyMap.put("mark", mark);
bodyMap.put("code", code);
bodyMap.put("is_type", is_type);
bodyMap.put("api_code", api_code);
String signStr = this.assemblyUrl(bodyMap) + "&key=" + payPlatformNew.getSignMd5();
log.warn(signStr);
String rel = DigestUtils.md5Hex(signStr);
log.warn(rel + ":" + sign);
//判断是否匹配
if (rel.equalsIgnoreCase(sign)) {
if ("1".equals(code)) {
payJour.setSub_money(real_price);
payJour.setTrade_sn(paysapi_id);
return payService.updatePayJourStatus(payJour, payChannelNew.getDiscountBill(), new String[]{"success",
"fail"}, payChannelNew.getName());
}
}
return "fail";
}
}
大吉支付的下单,回调和查询状态
猜你喜欢
转载自blog.csdn.net/programmer188/article/details/110198051
今日推荐
周排行