-
-
-
-
-
- public class TyxdUtil {
-
-
-
-
-
- public static String makeTyxdMessage(Tyxd tyxd){
- SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
- parameters.put(”appid”, tyxd.getAppid());
- parameters.put(”mch_id”, tyxd.getMch_id());
- parameters.put(”nonce_str”, tyxd.getNonce_str());
- parameters.put(”body”, tyxd.getBody());
- parameters.put(”out_trade_no”, tyxd.getOut_trade_no());
- parameters.put(”total_fee”, tyxd.getTotal_fee());
- parameters.put(”spbill_create_ip”,tyxd.getSpbill_create_ip());
- parameters.put(”notify_url”, tyxd.getNotify_url());
- parameters.put(”trade_type”, tyxd.getTrade_type());
- parameters.put(”openid”, tyxd.getOpenid());
- String sign = PayCommonUtil.createSign(”UTF-8”, parameters);
- parameters.put(”sign”, sign);
- String requestXML = PayCommonUtil.getRequestXml(parameters);
- return requestXML;
- }
-
-
-
-
-
-
- public static Map<String, String> sendTyxdMessage(String requestXML) throws Exception{
- String result =CommonUtil.httpsRequest(ConfigUtil.UNIFIED_ORDER_URL, ”POST”, requestXML);
- Map<String, String> map = XMLUtil.doXMLParse(result);
- return map;
- }
- public static void main(String[] args) throws Exception {
- Tyxd t = new Tyxd();
- t.setAppid(ConfigUtil.APPID);
- t.setMch_id(ConfigUtil.MCH_ID);
- t.setNonce_str(PayCommonUtil.CreateNoncestr());
-
- t.setBody(”支付测试”);
- t.setOut_trade_no(”1441332471849”);
- t.setTotal_fee(”1”);
- t.setSpbill_create_ip(”127.0.0.1”);
- t.setNotify_url(ConfigUtil.NOTIFY_URL);
- t.setTrade_type(”JSAPI”);
- t.setOpenid(”********************”);
- Map<String, String> map = TyxdUtil.sendTyxdMessage(TyxdUtil.makeTyxdMessage(t));
- System.out.println(map);
- }
-
-
- }
/**
* 统一下单工具类
* @author why
*
*/
public class TyxdUtil {
/**
* json数据
* @param tyxd
* @return
*/
public static String makeTyxdMessage(Tyxd tyxd){
SortedMap<Object,Object> parameters = new TreeMap<Object,Object>();
parameters.put("appid", tyxd.getAppid());
parameters.put("mch_id", tyxd.getMch_id());
parameters.put("nonce_str", tyxd.getNonce_str());
parameters.put("body", tyxd.getBody());
parameters.put("out_trade_no", tyxd.getOut_trade_no());
parameters.put("total_fee", tyxd.getTotal_fee());
parameters.put("spbill_create_ip",tyxd.getSpbill_create_ip());
parameters.put("notify_url", tyxd.getNotify_url());
parameters.put("trade_type", tyxd.getTrade_type());
parameters.put("openid", tyxd.getOpenid());
String sign = PayCommonUtil.createSign("UTF-8", parameters);
parameters.put("sign", sign);
String requestXML = PayCommonUtil.getRequestXml(parameters);
return requestXML;
}
/**
* 调用统一下单接口
* @param requestXML
* @return
* @throws Exception
*/
public static Map<String, String> sendTyxdMessage(String requestXML) throws Exception{
String result =CommonUtil.httpsRequest(ConfigUtil.UNIFIED_ORDER_URL, "POST", requestXML);
Map<String, String> map = XMLUtil.doXMLParse(result);//解析微信返回的信息,以Map形式存储便于取值
return map;
}
public static void main(String[] args) throws Exception {
Tyxd t = new Tyxd();
t.setAppid(ConfigUtil.APPID);//公众号id
t.setMch_id(ConfigUtil.MCH_ID);//商户号
t.setNonce_str(PayCommonUtil.CreateNoncestr());//随机字符串
// t.setSign(sign);
t.setBody("支付测试");//商品描述
t.setOut_trade_no("1441332471849");//订单号
t.setTotal_fee("1");//总金额
t.setSpbill_create_ip("127.0.0.1");//终端ip
t.setNotify_url(ConfigUtil.NOTIFY_URL);//通知地址
t.setTrade_type("JSAPI");//交易类型
t.setOpenid("********************");//用户标示
Map<String, String> map = TyxdUtil.sendTyxdMessage(TyxdUtil.makeTyxdMessage(t));
System.out.println(map);
}
}
public class PayCommonUtil {
private static Logger log = LoggerFactory.getLogger(PayCommonUtil.class);
public static String CreateNoncestr(int length) {
String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String res = "";
for (int i = 0; i < length; i++) {
Random rd = new Random();
res += chars.indexOf(rd.nextInt(chars.length() - 1));
}
return res;
}
public static String CreateNoncestr() {
String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
String res = "";
for (int i = 0; i < 16; i++) {
Random rd = new Random();
res += chars.charAt(rd.nextInt(chars.length() - 1));
}
return res;
}
/**
* 获取一定长度的随机字符串
* @param length 指定字符串长度
* @return 一定长度的字符串
*/
public static String getRandomStringByLength(int length) {
String base = "abcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
StringBuffer sb = new StringBuffer();
for (int i = 0; i < length; i++) {
int number = random.nextInt(base.length());
sb.append(base.charAt(number));
}
return sb.toString();
}
/**
* 格式为yyyyMMddHHmmss的订单时间
* @return
*/
public static String getOrderTime(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
return sdf.format(new Date());
}
/**
*时间戳
*/
public static String getTimeStamp(){
Long date = System.currentTimeMillis();
return date.toString().substring(0, date.toString().length()-3);
}
/**
* @author why
* @Description:sign签名
* @param characterEncoding 编码格式
* @param parameters 请求参数
* @return
*/
public static String createSign(String characterEncoding,SortedMap<Object,Object> parameters){
System.out.println(parameters);
StringBuffer sb = new StringBuffer();
Set es = parameters.entrySet();
Iterator it = es.iterator();
while(it.hasNext()) {
Map.Entry entry = (Map.Entry)it.next();
String k = (String)entry.getKey();
Object v = entry.getValue();
if(null != v && !"".equals(v)
&& !"sign".equals(k) && !"key".equals(k)) {
sb.append(k + "=" + v + "&");
}
}
sb.append("key=" + ConfigUtil.API_KEY);
System.out.println(sb.toString());
String sign = MD5Util.MD5Encode(sb.toString(), characterEncoding).toUpperCase();
return sign;
}
/**
* @author why
* @Description:将请求参数转换为xml格式的string
* @param parameters 请求参数
* @return
*/
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();
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();
}
/**
* @author why
* @Description:返回给微信的参数
* @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>";
}
}
-
-
-
-
-
- public class CommonUtil {
- private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
-
-
-
-
-
-
-
- public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
- try {
-
- TrustManager[] tm = { new MyX509TrustManager() };
- SSLContext sslContext = SSLContext.getInstance(”SSL”, “SunJSSE”);
- sslContext.init(null, tm, new java.security.SecureRandom());
-
- SSLSocketFactory ssf = sslContext.getSocketFactory();
- URL url = new URL(requestUrl);
- HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
- conn.setSSLSocketFactory(ssf);
- conn.setDoOutput(true);
- conn.setDoInput(true);
- conn.setUseCaches(false);
-
- conn.setRequestMethod(requestMethod);
- conn.setRequestProperty(”content-type”, “application/x-www-form-urlencoded”);
-
- if (null != outputStr) {
- OutputStream outputStream = conn.getOutputStream();
-
- outputStream.write(outputStr.getBytes(”UTF-8”));
- outputStream.close();
- }
-
- InputStream inputStream = conn.getInputStream();
- InputStreamReader inputStreamReader = new InputStreamReader(inputStream, “utf-8”);
- BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
- String str = null;
- StringBuffer buffer = new StringBuffer();
- while ((str = bufferedReader.readLine()) != null) {
- buffer.append(str);
- }
-
- bufferedReader.close();
- inputStreamReader.close();
- inputStream.close();
- inputStream = null;
- conn.disconnect();
- return buffer.toString();
- } catch (ConnectException ce) {
- log.error(”连接超时:{}”, ce);
- } catch (Exception e) {
- log.error(”https请求异常:{}”, e);
- }
- return null;
- }
-
- public static String urlEncodeUTF8(String source){
- String result = source;
- try {
- result = java.net.URLEncoder.encode(source,”utf-8”);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
- return result;
- }
- }
/**
* 通用工具类
* @author why
* @date 2014-11-21下午9:10:30
*/
public class CommonUtil {
private static Logger log = LoggerFactory.getLogger(CommonUtil.class);
/**
* 发送https请求
* @param requestUrl 请求地址
* @param requestMethod 请求方式(GET、POST)
* @param outputStr 提交的数据
* @return 返回微信服务器响应的信息
*/
public static String httpsRequest(String requestUrl, String requestMethod, String outputStr) {
try {
// 创建SSLContext对象,并使用我们指定的信任管理器初始化
TrustManager[] tm = { new MyX509TrustManager() };
SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");
sslContext.init(null, tm, new java.security.SecureRandom());
// 从上述SSLContext对象中得到SSLSocketFactory对象
SSLSocketFactory ssf = sslContext.getSocketFactory();
URL url = new URL(requestUrl);
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(ssf);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
// 设置请求方式(GET/POST)
conn.setRequestMethod(requestMethod);
conn.setRequestProperty("content-type", "application/x-www-form-urlencoded");
// 当outputStr不为null时向输出流写数据
if (null != outputStr) {
OutputStream outputStream = conn.getOutputStream();
// 注意编码格式
outputStream.write(outputStr.getBytes("UTF-8"));
outputStream.close();
}
// 从输入流读取返回内容
InputStream inputStream = conn.getInputStream();
InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
String str = null;
StringBuffer buffer = new StringBuffer();
while ((str = bufferedReader.readLine()) != null) {
buffer.append(str);
}
// 释放资源
bufferedReader.close();
inputStreamReader.close();
inputStream.close();
inputStream = null;
conn.disconnect();
return buffer.toString();
} catch (ConnectException ce) {
log.error("连接超时:{}", ce);
} catch (Exception e) {
log.error("https请求异常:{}", e);
}
return null;
}
public static String urlEncodeUTF8(String source){
String result = source;
try {
result = java.net.URLEncoder.encode(source,"utf-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result;
}
}
- public class XMLUtil {
-
-
-
-
-
-
-
- public static Map doXMLParse(String strxml) throws JDOMException, IOException {
- strxml = strxml.replaceFirst(”encoding=\”.*\”“, “encoding=\”UTF-8\”“);
-
- if(null == strxml || “”.equals(strxml)) {
- return null;
- }
-
- Map m = new HashMap();
-
- InputStream in = new ByteArrayInputStream(strxml.getBytes(“UTF-8”));
- SAXBuilder builder = new SAXBuilder();
- Document doc = builder.build(in);
- Element root = doc.getRootElement();
- List list = root.getChildren();
- Iterator it = list.iterator();
- while(it.hasNext()) {
- Element e = (Element) it.next();
- String k = e.getName();
- String v = ”“;
- List children = e.getChildren();
- if(children.isEmpty()) {
- v = e.getTextNormalize();
- } else {
- v = XMLUtil.getChildrenText(children);
- }
-
- m.put(k, v);
- }
-
-
- in.close();
-
- return m;
- }
-
-
-
-
-
-
- public static String getChildrenText(List children) {
- StringBuffer sb = new StringBuffer();
- if(!children.isEmpty()) {
- Iterator it = children.iterator();
- while(it.hasNext()) {
- Element e = (Element) it.next();
- String name = e.getName();
- String value = e.getTextNormalize();
- List list = e.getChildren();
- sb.append(”<” + name + “>”);
- if(!list.isEmpty()) {
- sb.append(XMLUtil.getChildrenText(list));
- }
- sb.append(value);
- sb.append(”</” + name + “>”);
- }
- }
-
- return sb.toString();
- }
-
- }
public class XMLUtil {
/**
* 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。
* @param strxml
* @return
* @throws JDOMException
* @throws IOException
*/
public static Map doXMLParse(String strxml) throws JDOMException, IOException {
strxml = strxml.replaceFirst("encoding=\".*\"", "encoding=\"UTF-8\"");
if(null == strxml || "".equals(strxml)) {
return null;
}
Map m = new HashMap();
InputStream in = new ByteArrayInputStream(strxml.getBytes("UTF-8"));
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(in);
Element root = doc.getRootElement();
List list = root.getChildren();
Iterator it = list.iterator();
while(it.hasNext()) {
Element e = (Element) it.next();
String k = e.getName();
String v = "";
List children = e.getChildren();
if(children.isEmpty()) {
v = e.getTextNormalize();
} else {
v = XMLUtil.getChildrenText(children);
}
m.put(k, v);
}
//关闭流
in.close();
return m;
}
/**
* 获取子结点的xml
* @param children
* @return String
*/
public static String getChildrenText(List children) {
StringBuffer sb = new StringBuffer();
if(!children.isEmpty()) {
Iterator it = children.iterator();
while(it.hasNext()) {
Element e = (Element) it.next();
String name = e.getName();
String value = e.getTextNormalize();
List list = e.getChildren();
sb.append("<" + name + ">");
if(!list.isEmpty()) {
sb.append(XMLUtil.getChildrenText(list));
}
sb.append(value);
sb.append("</" + name + ">");
}
}
return sb.toString();
}
}
-
-
-
-
-
- public class Tyxd {
- private String appid;
- private String mch_id;
- private String nonce_str;
- private String sign;
- private String body;
- private String out_trade_no;
- private String total_fee;
- private String spbill_create_ip;
- private String notify_url;
- private String trade_type;
- private String openid;
- public Tyxd() {
- super();
- }
- public Tyxd(String appid, String mch_id, String nonce_str, String sign,
- String body, String out_trade_no, String total_fee,
- String spbill_create_ip, String notify_url, String trade_type,
- String openid) {
- super();
- this.appid = appid;
- this.mch_id = mch_id;
- this.nonce_str = nonce_str;
- this.sign = sign;
- this.body = body;
- this.out_trade_no = out_trade_no;
- this.total_fee = total_fee;
- this.spbill_create_ip = spbill_create_ip;
- this.notify_url = notify_url;
- this.trade_type = trade_type;
- this.openid = 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 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 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;
- }
- }
/**
* 统一下单实体类
* @author why
*
*/
public class Tyxd {
private String appid;//公众账号
private String mch_id;//商户号
private String nonce_str;//随机字符串
private String sign;//签名
private String body;//商品描述
private String out_trade_no;//商户订单号
private String total_fee;//总金额
private String spbill_create_ip;//终端ip
private String notify_url;//通知地址
private String trade_type;//交易类型
private String openid;//用户标示
public Tyxd() {
super();
}
public Tyxd(String appid, String mch_id, String nonce_str, String sign,
String body, String out_trade_no, String total_fee,
String spbill_create_ip, String notify_url, String trade_type,
String openid) {
super();
this.appid = appid;
this.mch_id = mch_id;
this.nonce_str = nonce_str;
this.sign = sign;
this.body = body;
this.out_trade_no = out_trade_no;
this.total_fee = total_fee;
this.spbill_create_ip = spbill_create_ip;
this.notify_url = notify_url;
this.trade_type = trade_type;
this.openid = 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 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 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;
}
}
document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)