return_code.equals(return_code)){ // 业务结果
String prepay_id = map.get("prepay_id");//返回的预付单信息
String nonceStr=UUIDHexGenerator.generate();
JsonObject.put("nonceStr", nonceStr);
JsonObject.put("package", "prepay_id="+prepay_id);
Long timeStamp= System.currentTimeMillis()/1000;
JsonObject.put("timeStamp", timeStamp+""); String stringSignTemp = "appId="+appid+"&nonceStr=" + nonceStr + "&package=prepay_id=" + prepay_id+ "&signType=MD5&timeStamp=" + timeStamp; //再次签名
String paySign=PayUtil.sign(stringSignTemp, "&key=替换为自己的密钥", "utf-8").toUpperCase();
JsonObject.put("paySign", paySign);
jsonArray.add(JsonObject);
} return "pay";
} public String getTotal_fee() { return total_fee;
} public void setTotal_fee(String total_fee) {
this.total_fee = total_fee;
} public String getBody() { return body;
} public void setBody(String body) {
this.body = body;
} public JSONArray getJsonArray() { return jsonArray;
} public void setJsonArray(JSONArray jsonArray) {
this.jsonArray = jsonArray;
} public String getDetail() { return detail;
} public void setDetail(String detail) {
this.detail = detail;
} public String getAttach() { return attach;
} public void setAttach(String attach) {
this.attach = attach;
} public String getTime_start() { return time_start;
} public void setTime_start(String time_start) {
this.time_start = time_start;
} public String getTime_expire() { return time_expire;
} public void setTime_expire(String time_expire) {
this.time_expire = time_expire;
} public String getOpenid() { return openid;
} public void setOpenid(String openid) {
this.openid = openid;
}
}
MessageUtil
package cn.it.shop.util;import java.io.IOException;import java.io.Writer;import java.util.HashMap;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;import com.thoughtworks.xstream.XStream;import com.thoughtworks.xstream.core.util.QuickWriter;import com.thoughtworks.xstream.io.HierarchicalStreamWriter;import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;import com.thoughtworks.xstream.io.xml.XppDriver;public class MessageUtil {
public static HashMap<String,String> parseXML(HttpServletRequest request) throws Exception, IOException{
HashMap<String,String> map=new HashMap<String,String>(); // 通过IO获得Document
SAXReader reader = new SAXReader();
Document doc = reader.read(request.getInputStream()); //得到xml的根节点
Element root=doc.getRootElement();
recursiveParseXML(root,map); return map;
} private static void recursiveParseXML(Element root,HashMap<String,String> map){ //得到根节点的子节点列表
List<Element> elementList=root.elements(); //判断有没有子元素列表
if(elementList.size()==0){
map.put(root.getName(), root.getTextTrim());
} else{ //遍历
for(Element e:elementList){
recursiveParseXML(e,map);
}
}
} private static XStream xstream = new XStream(new XppDriver() { public HierarchicalStreamWriter createWriter(Writer out) { return new PrettyPrintWriter(out) { // 对所有xml节点都增加CDATA标记
boolean cdata = true; public void startNode(String name, Class clazz) { super.startNode(name, clazz);
} protected void writeText(QuickWriter writer, String text) { if (cdata) {
writer.write("<![CDATA[");
writer.write(text);
writer.write("]]>");
} else {
writer.write(text);
}
}
};
}
}); public static String messageToXML(PaymentPo paymentPo){
xstream.alias("xml",PaymentPo.class); return xstream.toXML(paymentPo);
}
}
PaymentPo//封装支付参数实体package cn.it.shop.util;/**
* @author * @version 创建时间:2017年1月21日 下午4:20:52
* 类说明
*/public class PaymentPo {
private String appid;//小程序ID
private String mch_id;//商户号
private String device_info;//设备号
private String nonce_str;//随机字符串
private String sign;//签名
private String body;//商品描述
private String detail;//商品详情
private String attach;//附加数据
private String out_trade_no;//商户订单号
private String fee_type;//货币类型
private String spbill_create_ip;//终端IP
private String time_start;//交易起始时间
private String time_expire;//交易结束时间
private String goods_tag;//商品标记
private String total_fee;//总金额
private String notify_url;//通知地址
private String trade_type;//交易类型
private String limit_pay;//指定支付方式
private String openid;//用户标识
public String getAppid() { return appid;
} public void setAppid(String appid) { this.appid = appid;
} public String getMch_id() { return mch_id;
} public void setMch_id(String mch_id) { this.mch_id = mch_id;
} public String getNonce_str() { return nonce_str;
} public void setNonce_str(String nonce_str) { this.nonce_str = nonce_str;
} public String getSign() { return sign;
} public void setSign(String sign) { this.sign = sign;
} public String getBody() { return body;
} public void setBody(String body) { this.body = body;
} public String getOut_trade_no() { return out_trade_no;
} public void setOut_trade_no(String out_trade_no) { this.out_trade_no = out_trade_no;
} public String getTotal_fee() { return total_fee;
} public void setTotal_fee(String total_fee) { this.total_fee = total_fee;
} public String getNotify_url() { return notify_url;
} public void setNotify_url(String notify_url) { this.notify_url = notify_url;
} public String getTrade_type() { return trade_type;
} public void setTrade_type(String trade_type) { this.trade_type = trade_type;
} public String getOpenid() { return openid;
} public void setOpenid(String openid) { this.openid = openid;
} public String getSpbill_create_ip() { return spbill_create_ip;
} public void setSpbill_create_ip(String spbill_create_ip) { this.spbill_create_ip = spbill_create_ip;
} public String getDevice_info() { return device_info;
} public void setDevice_info(String device_info) { this.device_info = device_info;
} public String getDetail() { return detail;
} public void setDetail(String detail) { this.detail = detail;
} public String getAttach() { return attach;
} public void setAttach(String attach) { this.attach = attach;
} public String getFee_type() { return fee_type;
} public void setFee_type(String fee_type) { this.fee_type = fee_type;
} public String getTime_start() { return time_start;
} public void setTime_start(String time_start) { this.time_start = time_start;
} public String getTime_expire() { return time_expire;
} public void setTime_expire(String time_expire) { this.time_expire = time_expire;
} public String getGoods_tag() { return goods_tag;
} public void setGoods_tag(String goods_tag) { this.goods_tag = goods_tag;
} public String getLimit_pay() { return limit_pay;
} public void setLimit_pay(String limit_pay) { this.limit_pay = limit_pay;
}
}
PayUtilpackage cn.it.shop.util;import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.UnsupportedEncodingException;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.Collections;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.codec.digest.DigestUtils;/**
* @author
* @version 创建时间:2017年1月17日 下午7:46:29 类说明
*/public class PayUtil {
/**
* 签名字符串
* @param text需要签名的字符串
* @param key 密钥
* @param input_charset编码格式
* @return 签名结果
*/
public static String sign(String text, String key, String input_charset) {
text = text + key; return DigestUtils.md5Hex(getContentBytes(text, input_charset));
} /**
* 签名字符串
* @param text需要签名的字符串
* @param sign 签名结果
* @param key密钥
* @param input_charset 编码格式
* @return 签名结果
*/
public static boolean verify(String text, String sign, String key, String input_charset) {
text = text + key;
String mysign = DigestUtils.md5Hex(getContentBytes(text, input_charset)); if (mysign.equals(sign)) { return true;
} else { return false;
}
} /**
* @param content
* @param charset
* @return
* @throws SignatureException
* @throws UnsupportedEncodingException
*/
public static byte[] getContentBytes(String content, String charset) { if (charset == null 关键词:微信小程序支付接口的案例详细说明