微信小程序订单支付及退款功能
源码:
public class Test_OrderControllerImpl {
private static final Logger logger = Logger.getLogger(PayServiceImpl.class);
@Value("${WX_AppID}")
private String appId;
@Value("${NotityUrl}")
private String notityUrl;
@Test
public JSONObject payOrder(PayDto payDto, HttpServletRequest request) {
if (logger.isDebugEnabled()) {
logger.debug("entering payOrder(PayDto)");
logger.debug("payDto: \"" + payDto + "\"");
}
JSONObject jsonObject = new JSONObject();
boolean result = true;
String info = "成功了,获取到prepayId";
String openId = payDto.getOpenId();
if(StringUtils.isBlank(openId)) {
String key = null;
String mchId = null;
openId = openId.replace("\"", "").trim();
String clientIP = CommonUtil.getClientIp(request);
int money = (int)(1*100);
String orderCode = "";
logger.error("openId: " + openId + ", clientIP: " + clientIP + ", money: " + money + ", orderCode: " + orderCode );
String randomNonceStr = RandomUtils.generateMixString(32);
Map<String, String> rest = unifiedOrder(openId,clientIP,randomNonceStr,money,orderCode,key,mchId);
String prepayId = rest.get("prepay_id");
String randomStr = rest.get("nonce_str");
logger.error("prepayId: " + prepayId);
if(StringUtils.isBlank(prepayId)) {
result = false;
info = "出错了,未获取到prepayId";
} else {
String timeStamp = String.valueOf(System.currentTimeMillis() / 1000 );
SignInfo signInfo = new SignInfo();
try {
signInfo = createSignInfo(prepayId, randomStr, timeStamp);
String sign = getTwoSign(signInfo,key);
signInfo.setSign(sign);
} catch (Exception e) {
e.printStackTrace();
}
jsonObject.put("signInfo", signInfo);
}
}
jsonObject.put("result", result);
jsonObject.put("info", info);
System.out.println("---------"+jsonObject+"----------");
return jsonObject;
}
private Map<String, String> unifiedOrder(String openId, String clientIP, String randomNonceStr, int money, String orderCode,String key,String mchId) {
try {
String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";
PayInfo payInfo = createPayInfo(openId,clientIP,randomNonceStr,money,orderCode,mchId);
String md5 = getSign(payInfo,key);
payInfo.setSign(md5);
logger.error("md5 value: " + md5);
String xml = CommonUtil.payInfoToXML(payInfo);
xml = xml.replace("__", "_").replace("<![CDATA[", "").replace("]]>", "");
StringBuffer buffer = CommonUtil