package com.walker.pay.payunk; import com.fasterxml.jackson.databind.JsonNode; import com.walker.infrastructure.utils.MoneyUtils; import com.walker.infrastructure.utils.NumberFormatUtils; import com.walker.pay.AbstractOrderGenerator; import com.walker.pay.Order; import com.walker.pay.PayException; import com.walker.pay.payunk.util.AlipayUtils; import com.walker.pay.payunk.util.SignUtils; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import java.util.HashMap; import java.util.Map; public abstract class BaseOrderGenerator extends AbstractOrderGenerator { protected String sendRequest(String url, Map payMap) throws PayException{ HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_JSON); HttpEntity> request = new HttpEntity<>(payMap, headers); // ResponseEntity entity = this.getRestTemplate().postForEntity(url, request, String.class); ResponseEntity entity = this.getRestTemplate().postForEntity(url, request, JsonNode.class); logger.debug("entity = {}", entity); if(entity.getStatusCodeValue() != 200){ throw new PayException(payMap.get("out_trade_no").toString(), "调用转账接口失败," + entity.toString(), null); } return entity.getBody().toString(); } protected Map toRequest(DefaultPayContext context, Order platformOrder, String payInfo, String providerPayType){ // 请求封装参数 Map payMap = new HashMap<>(10); // 您的商户唯一标识 payMap.put("appid", context.getAppIdConfig().getStringValue()); // 支付通道 // payMap.put("pay_type", Constants.PAY_TYPE_TRANS_ALIPAY_ONE); payMap.put("pay_type", providerPayType); // 畅联后台 账户管理 账户编号 payMap.put("user_account_id", context.getUserAccountId().getStringValue()); // 交易金额 单位:元 精确小数点后2位10.00 payMap.put("amount", MoneyUtils.scaleYuan2Accuracy(platformOrder.getTotalMoney())); // 回调地址 payMap.put("callback_url", platformOrder.getNotifyUrl()); // 商户订单号 C20142222231234 payMap.put("out_trade_no", String.valueOf(platformOrder.getId())); // payMap.put("pay", JsonUtils.objectToJsonString(AlipayUtils.acquireAlipayReplace(context))); payMap.put("pay", payInfo); // payMap.put("extend", AlipayUtils.getAlipayInfo(platformOrder)); payMap.put("extend", AlipayUtils.getAlipayInfoExtendJson(platformOrder)); // sign 签名 String signStr = SignUtils.signature(payMap); payMap.put("sign", signStr); return payMap; } public RestTemplate getRestTemplate() { return restTemplate; } public void setRestTemplate(RestTemplate restTemplate) { this.restTemplate = restTemplate; } // public static final String PAY_RETURN_JSON_URL = "https://apipay.payunk.cn/pay/index/unifiedorder?format=json"; public static final String PAY_RETURN_JSON_URL = "https://apipay.payunk.cn/pay/index/unifiedorder?format=jsonIn"; private RestTemplate restTemplate; }