本文实例为大家分享了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程序设计有所帮助。