本文实例为大家分享了java微信APP支付代码,供大家参考,具体内容如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.Random;
import org.apache.http.ParseException;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONML;
import org.json.JSONObject;
public class Test {
private static final String appid = "wx0378bf81abfe3d26" ; //自己设置
private static final int mch_id = 1252196606 ; //自己设置
private static final String api_key = "b8b9c2bbe92d57cc38fde49745056167" ; //自己设置
private static final String notify_url = "http://www.xxx.com/weixin_notify_url.jsp" ;//自己设置
private static final String trade_type = "APP" ; //
public static void main(String[] args) {
postToWeChat( "5455545" , "test" , 0.01 );
postToWeChat( "5455545" , "中文" , 0.01 ); //会失败
}
/**
* 提交到微信
*
* @param out_trade_no
* 自己系统的订单号
* @param body
* 标题
* @param money
* 金额
* @return
*/
private static JSONObject postToWeChat(String out_trade_no, String body, double money) {
StringBuilder xml = new StringBuilder();
String nonce_str = getRandomString( 32 );
String ip = "127.0.0.1" ; // 客户端IP自己处理
JSONObject jso = new JSONObject();
String prepay_id = "" , sign = "" ;
try {
String weixinMoney = new java.text.DecimalFormat( "#" ).format(money * 100 ); // 微信是以分为单位的所以要乘以100
xml.append( "appid=" ).append(appid).append( "&body=" ).append( new String(body.getBytes( "UTF-8" ), "utf-8" ));
xml.append( "&mch_id=" ).append(mch_id).append( "&nonce_str=" ).append(nonce_str);
xml.append( "¬ify_url=" ).append(notify_url).append( "&out_trade_no=" ).append(out_trade_no).append( "&spbill_create_ip=" ).append(ip);
xml.append( "&total_fee=" ).append(weixinMoney).append( "&trade_type=" ).append(trade_type).append( "&key=" ).append(api_key);
xml.delete( 0 , xml.length());
xml.append( "<xml>" );
xml.append( " <appid>" ).append(appid).append( "</appid>" );
xml.append( " <body>" ).append(body).append( "</body>" );
xml.append( " <mch_id>" ).append(mch_id).append( "</mch_id>" );
xml.append( " <nonce_str>" ).append(nonce_str).append( "</nonce_str>" );
xml.append( " <notify_url>" ).append(notify_url).append( "</notify_url>" );
xml.append( " <out_trade_no>" ).append(out_trade_no).append( "</out_trade_no>" );
xml.append( " <spbill_create_ip>" ).append(ip).append( "</spbill_create_ip>" );
xml.append( " <total_fee>" ).append(weixinMoney).append( "</total_fee>" );
xml.append( " <trade_type>" ).append(trade_type).append( "</trade_type>" );
xml.append( " <sign>" ).append(sign).append( "</sign>" );
xml.append( "</xml>" );
HttpPost post = new HttpPost( "https://api.mch.weixin.qq.com/pay/unifiedorder" );
StringEntity entity = new StringEntity(xml.toString(), "UTF-8" );
entity.setContentEncoding( "utf-8" );
entity.setContentType( "text/xml" );
post.setEntity(entity);
JSONArray childNodes = JSONML.toJSONObject(EntityUtils.toString( new DefaultHttpClient().execute(post).getEntity(), "utf-8" )).getJSONArray(
"childNodes" );
System.out.println(childNodes);
int len = childNodes.length() - 1 ;
for ( int i = len; i > - 1 ; i--) {
JSONObject js = childNodes.getJSONObject(i);
if (js.get( "tagName" ).equals( "prepay_id" )) {
prepay_id = js.getJSONArray( "childNodes" ).getString( 0 );
break ;
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
jso.put( "sign" , sign);
jso.put( "appid" , appid);
jso.put( "noncestr" , nonce_str);
jso.put( "package" , "Sign=WXPay" );
jso.put( "partnerid" , mch_id);
jso.put( "prepayid" , prepay_id);
jso.put( "timestamp" , System.currentTimeMillis());
return jso;
}
/**
* 表示生成字符串的长度
*
* @param length
* @return
*/
private static String getRandomString( 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();
}
}
|
以上就是本文的全部内容,希望对大家学习java程序设计有所帮助。