1.出现35311004 错误代码。 这个错误出现的原因是参数填写错误。 然后微信返回并没有给出具体错误,只给了一个错误代码。
public static void main(String[] args) {
Map map=new HashMap();
map.put("out_trade_no", "hqf1487679713897wx1m11737");
map.put("transaction_id", "4008362001201612314607859187");
map.put("cert_id", "440228196911185315");
map.put("name", "陈建雄");
//获得签名
String url1="appid=wx3b336b6d11fbf1f2&cert_id="+map.get("cert_id")+"&cert_type=IDCARD&customs=GUANGZHOU&mch_customs_no=4403160A6V&mch_id=1333012801&name="+map.get("name")+"&out_trade_no="+map.get("out_trade_no")+"&transaction_id="+map.get("transaction_id");
url1+="&key=gbexse204545k4aff05df79e342c637d";
String sign=MD5Util.MD5Encode(url1,"UTF-8").toUpperCase();
map.put("sign",sign);
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
//公众账号ID 描叙:微信分配的公众账号ID 必填
parameters.put("appid", "wx3b336b6d11fbf1f2");
//海关名称 必填
parameters.put("customs", "GUANGZHOU");
//商户号 必填
parameters.put("mch_id", "1333012801");
//商户订单号 必填
parameters.put("out_trade_no", map.get("out_trade_no"));
//签名,详见签名生成算法 必填
parameters.put("sign", map.get("sign"));
//微信支付订单号 必填
parameters.put("transaction_id", map.get("transaction_id"));
//证件类型 必填
parameters.put("cert_type", "IDCARD");
//证件号码 必填
parameters.put("cert_id", map.get("cert_id"));
//姓名 必填
parameters.put("name", map.get("name"));
//&mch_customs_no=4403160A6V
parameters.put("mch_customs_no", "4403160A6V");
System.out.println(new XMLMethods().getRequestXml(parameters));
//发送请求
String url = "https://api.mch.weixin.qq.com/cgi-bin/mch/customs/customdeclareorder";
HttpClient client = new HttpClient();
PostMethod myPost = new PostMethod(url);
client.getParams().setSoTimeout(300*1000);
String responseString = null;
try{
myPost.setRequestEntity(new StringRequestEntity(new XMLMethods().getRequestXml(parameters),"text/xml","utf-8"));
int statusCode = client.executeMethod(myPost);
if(statusCode == HttpStatus.SC_OK){
BufferedInputStream bis = new BufferedInputStream(myPost.getResponseBodyAsStream());
byte[] bytes = new byte[1024];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
int count = 0;
while((count = bis.read(bytes))!= -1){
bos.write(bytes, 0, count);
}
byte[] strByte = bos.toByteArray();
responseString = new String(strByte,0,strByte.length,"utf-8");
bos.close();
bis.close();
}
}catch (Exception e) {
e.printStackTrace();
}
myPost.releaseConnection();
client.getHttpConnectionManager().closeIdleConnections(0);
System.out.println(responseString);
}
package com.gb.wap.publicMethods;
import java.io.IOException;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.SortedMap;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
public class XMLMethods {
/**
* 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。
* @param strxml
* @return
* @throws DocumentException
* @throws JDOMException
* @throws IOException
*/
@SuppressWarnings("unchecked")
public static Map doXMLParse(String strxml) throws DocumentException{
strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");
if(null == strxml || "".equals(strxml)) {
return null;
}
Map m = new HashMap();
Document document = DocumentHelper.parseText(strxml);
Element root = document.getRootElement();
// 遍历根节点下所有子节点
Iterator<?> it = root.elementIterator();
while(it.hasNext()) {
Element e = (Element) it.next();
if(!e.isTextOnly()){
System.out.println("有多个子节点");
}
String k = e.getName();
String v = e.getText();
// System.out.println(k+" "+v);
m.put(k, v);
}
return m;
}
/**
* 将map封装成XML
* @param parameters
* @return
*/
@SuppressWarnings("unchecked")
public static String getRequestXml(SortedMap<Object,Object> parameters){
StringBuffer sb = new StringBuffer();
sb.append("<xml>");
Set es = parameters.entrySet();
Iterator it = es.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
String v = (String)entry.getValue();
//注意,有一些值要用![CDATA[value]]来表示
if ("attach".equalsIgnoreCase(k)||"body".equalsIgnoreCase(k)||"sign".equalsIgnoreCase(k)) {
sb.append("<"+k+">"+"<![CDATA["+v+"]]></"+k+">");
}else {
sb.append("<"+k+">"+v+"</"+k+">");
}
}
sb.append("</xml>");
return sb.toString();
}
/**
* 生成一个XML返回给微信的通知
* @param return_code
* @param return_msg
* @return
*/
public static String setXML(String return_code, String return_msg) {
return "<xml><return_code><![CDATA[" + return_code
+ "]]></return_code><return_msg><![CDATA[" + return_msg
+ "]]></return_msg></xml>";
}
/**
* 封装微信text类的返回消息
* @param to
* @param from
* @param content
* @return
*/
public static String formatXmlAnswer(String to, String from, String content) {
StringBuffer sb = new StringBuffer();
Date date = new Date();
sb.append("<xml><ToUserName><![CDATA[");
sb.append(to);
sb.append("]]></ToUserName><FromUserName><![CDATA[");
sb.append(from);
sb.append("]]></FromUserName><CreateTime>");
sb.append(date.getTime());
sb.append("</CreateTime><MsgType><![CDATA[text]]></MsgType><Content><![CDATA[");
sb.append(content);
sb.append("]]></Content><FuncFlag>0</FuncFlag></xml>");
return sb.toString();
}
public static void main(String[] args) throws DocumentException {
String xml = "<xml><appid><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></appid><attach>支付测试</attach><body>JSAPI支付测试</body><mch_id>10000100</mch_id></xml>";
doXMLParse(xml);
}
}