微信支付unifiedorder,请注意一下几点:
1.app_key 这个是指app对应的API我们自己设定的key
2.发起请求要用XML
简单代码如下:
public class Wxpay {
public static String unifieldOrder(HttpServletRequest request,HttpServletResponse response,String body,Float totalFee,String strReq) throws ClientProtocolException, IOException{
String ret=null;
Map<String, Object> params=new HashMap<String, Object>();
params.put("appid", ConstantUtil.APP_ID);
params.put("body",body);
params.put("mch_id", ConstantUtil.PARTNER);
params.put("nonce_str",WXUtil.getNonceStr());
params.put("notify_url",ConstantUtil.NOTIFYURL);
params.put("out_trade_no",strReq);
params.put("spbill_create_ip",request.getRemoteAddr());
params.put("total_fee",totalFee.intValue());
params.put("trade_type","APP");
Map<String, Object> smap = sortMapByKey(params);
String ps = preSignStr(smap);
ps+="&key="+ConstantUtil.APP_KEY;
String sign = StringUtil.encryption(ps).toUpperCase();
smap.put("sign",sign);
String paramXml = createXmlReqStr(smap);
TenpayHttpClient httpClient = new TenpayHttpClient();
if (httpClient.callHttpPost(ConstantUtil.UNIORDERURL, paramXml)) {
ret = httpClient.getResContent();
}
return ret;
}
public static String createXmlReqStr(Map<String, Object> map){
Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator();
String str="<xml>";
while (entries.hasNext()) {
Map.Entry<String, Object> entry = entries.next();
str+="<"+entry.getKey()+">"+entry.getValue()+"</"+entry.getKey()+">";
}
str+="</xml>";
return str;
}
public static String preSignStr(Map<String, Object> map){
Iterator<Map.Entry<String, Object>> entries = map.entrySet().iterator();
String str="";
while (entries.hasNext()) {
Map.Entry<String, Object> entry = entries.next();
if(str.length()>0)
{
str+="&";
}
str+=entry.getKey()+"="+entry.getValue();
}
return str;
}
/**
* 使用 Map按key进行排序
* @param map
* @return
*/
public static Map<String, Object> sortMapByKey(Map<String, Object> map) {
if (map == null || map.isEmpty()) {
return null;
}
Map<String, Object> sortMap = new TreeMap<String, Object>(
new MapKeyComparator());
sortMap.putAll(map);
return sortMap;
}
}
class MapKeyComparator implements Comparator<String>{
@Override
public int compare(String str1, String str2) {
return str1.compareTo(str2);
}
}
有需要的朋友可以私聊我