微信支付服务端总结

//拼接微信参数
public SortedMap<String, String> getWXPayParam(String title,String orderNo,double price){
SortedMap<String, String> jsonmap = new TreeMap<String, String>();
// 构造下单所需要的参数
SortedMap<String, String> map = new TreeMap<String, String>();
map.put("nonce_str", UUID.randomUUID().toString().replaceAll("-", ""));
map.put("body", title);// 商品描述
map.put("out_trade_no", orderNo);// 商户订单号
// 总金额,单位是分*****************************************************************************************************************************************
map.put("total_fee", new Double(price * 100).intValue() + "");
map.put("spbill_create_ip", Common.getip(getRequest()));
map.put("notify_url", Config.wxNotifyUrl);// 异步通知地址
map.put("trade_type", "APP");
//map.put("openid", openid);
map.put("appid", "wx8ac3a462b78bfc37");// 公众账号id
map.put("mch_id", "1359047102");// 微信支付分配的商户号
// 生成sign
map.put("sign", Common.createSign1111("UTF-8", map));
// 把参数转换为xml数据
String postData = Common.createXmlData(map);
// 提交数据,执行预支付
String returnData = Common.postDataToWx(postData,
"https://api.mch.weixin.qq.com/pay/unifiedorder", "UTF-8");

if ("".equals(returnData)) {
return null;
} else {
Map<String, String> returnMap = Common.readStringXmlOut(returnData);
if ("success".equalsIgnoreCase(returnMap.get("return_code"))
&& "success".equalsIgnoreCase(returnMap.get("result_code"))) {
// 获取返回的预支付ID
jsonmap.put("partnerid", returnMap.get("mch_id"));
jsonmap.put("appid", returnMap.get("appid"));
jsonmap.put("prepayid", returnMap.get("prepay_id"));
jsonmap.put("noncestr", map.get("nonce_str"));
Long tim = new Date().getTime()/1000;
jsonmap.put("timestamp", tim.intValue() + "");
jsonmap.put("package", "Sign=WXPay");
// 第二次签名加密
String paySign = Common.createSign1111("UTF-8", jsonmap);
jsonmap.put("sign", paySign);
jsonmap.put("out_trade_no",orderNo);
return jsonmap;
} else {
return null;
}
}
}

============================================工具===========================================
/**
* 获取客户端IP地址
*
* @param request
* @return
*/
public static String getip(HttpServletRequest request) {
if (request == null)
return "";
String ip = request.getHeader("X-Requested-For");
if (ip == null || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("X-Forwarded-For");
}
if (ip == null || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_CLIENT_IP");
}
if (ip == null || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if (ip == null || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}

/**
* 创建签名
*
* @param characterEncoding
* @param map
* @return
*/
public static String createSign1111(String characterEncoding, SortedMap<String, String> map) {
StringBuffer sb = new StringBuffer();
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
String k = it.next();
String v = map.get(k);
if (null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)) {
sb.append(k + "=" + v + "&");
}
}

sb.append("key=A91FEF00CC3AA6C5C438C4F59FEF4129");
System.out.println(sb);
String sign = MD5Encode(sb.toString(), characterEncoding).toUpperCase();
System.out.print(sign);
return sign;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值