PaymentApiTest.java
6.06 KB
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
package com.jfinal.weixin.sdk.api;
import java.util.HashMap;
import java.util.Map;
import com.jfinal.weixin.sdk.api.PaymentApi.TradeType;
import com.jfinal.weixin.sdk.kit.PaymentKit;
public class PaymentApiTest {
//商户相关资料
static String appid = "";
static String partner = "";
static String paternerKey = "";
public static void testCreate() {
//商户相关资料
String openId = "";
String notify_url = "";
Map<String, String> params = new HashMap<String, String>();
params.put("appid", appid);
params.put("mch_id", partner);
params.put("body", "JFinal2.0技术开发");
params.put("out_trade_no", "97777368");
params.put("total_fee", "1");
params.put("spbill_create_ip", "60.12.33.121");
params.put("trade_type", TradeType.JSAPI.name());
params.put("nonce_str", System.currentTimeMillis() / 1000 + "");
params.put("notify_url", notify_url);
params.put("openid", openId);
String sign = PaymentKit.createSign(params, paternerKey);
params.put("sign", sign);
String xmlResult = PaymentApi.pushOrder(params);
System.out.println(xmlResult);
Map<String, String> result = PaymentKit.xmlToMap(xmlResult);
String prepay_id = result.get("prepay_id");
Map<String, String> packageParams = PaymentKit.xmlToMap(xmlResult);
packageParams.put("appId", appid);
packageParams.put("timeStamp", System.currentTimeMillis() / 1000 + "");
packageParams.put("nonceStr", System.currentTimeMillis() + "");
packageParams.put("package", "prepay_id=" + prepay_id);
packageParams.put("signType", "MD5");
String packageSign = PaymentKit.createSign(packageParams, paternerKey);
packageParams.put("paySign", packageSign);
System.out.println(packageParams.toString());
}
public static void testQuery() {
Map<String, String> map1 = PaymentApi.queryByOutTradeNo(appid, partner, paternerKey, "US2015111300040");
System.out.println(map1);
// {transaction_id=1004240183201511131584295448, nonce_str=ZY1cxjlrMH72E6kN, trade_state=SUCCESS, bank_type=CFT, openid=o7FXhsqNPNVTA0MyXv17mad-OWCE, sign=5FB74F13A13834764537EF1219F30772, return_msg=OK, fee_type=CNY, mch_id=1260676301, cash_fee=1, out_trade_no=US2015111300041, appid=wx316b370c618de94d, total_fee=1, trade_type=JSAPI, result_code=SUCCESS, attach=, time_end=20151113143319, is_subscribe=Y, return_code=SUCCESS}
// Map<String, String> map2 = PaymentApi.queryByTransactionId(appid, partner, paternerKey, "1004240183201511131584295448");
// System.out.println(map2);
//{transaction_id=1004240183201511131584295448, nonce_str=HmkxvZXWMU9MZWcM, trade_state=SUCCESS, bank_type=CFT, openid=o7FXhsqNPNVTA0MyXv17mad-OWCE, sign=0C43E2A5097DB8D5ABE0F1171301C56D, return_msg=OK, fee_type=CNY, mch_id=1260676301, cash_fee=1, out_trade_no=US2015111300041, appid=wx316b370c618de94d, total_fee=1, trade_type=JSAPI, result_code=SUCCESS, attach=, time_end=20151113143319, is_subscribe=Y, return_code=SUCCESS}
}
public static void testClose() {
Map<String, String> map1 = PaymentApi.closeOrder(appid, partner, paternerKey, "US2015111300030");
System.out.println(map1);
// {nonce_str=G50b3BEKUotSOnNV, appid=wx316b370c618de94d, sign=0F3B33FA5B7B8F7338849BF4E84FAF48, return_msg=OK, result_code=SUCCESS, mch_id=1260676301, sub_mch_id=, return_code=SUCCESS}
}
/**
* 退款需要使用证书:https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3
* @throws Exception
*/
public static void testRefund() {
// 公众账号ID appid 是 String(32) wx8888888888888888 微信分配的公众账号ID(企业号corpid即为此appId)
// 商户号 mch_id 是 String(32) 1900000109 微信支付分配的商户号
// 设备号 device_info 否 String(32) 013467007045764 终端设备号
// 随机字符串 nonce_str 是 String(32) 5K8264ILTKCH16CQ2502SI8ZNMTM67VS 随机字符串,不长于32位。推荐随机数生成算法
// 签名 sign 是 String(32) C380BEC2BFD727A4B6845133519F3AD6 签名,详见签名生成算法
// 微信订单号 transaction_id 二选一 String(28) 1217752501201407033233368018 微信生成的订单号,在支付通知中有返回
// 商户订单号 out_trade_no String(32) 1217752501201407033233368018 商户侧传给微信的订单号
// 商户退款单号 out_refund_no 是 String(32) 1217752501201407033233368018 商户系统内部的退款单号,商户系统内部唯一,同一退款单号多次请求只退一笔
// 总金额 total_fee 是 Int 100 订单总金额,单位为分,只能为整数,详见支付金额
// 退款金额 refund_fee 是 Int 100 退款总金额,订单总金额,单位为分,只能为整数,详见支付金额
// 货币种类 refund_fee_type 否 String(8) CNY 货币类型,符合ISO 4217标准的三位字母代码,默认人民币:CNY,其他值列表详见货币类型
// 操作员 op_user_id 是 String(32) 1900000109 操作员帐号, 默认为商户号
Map<String, String> params = new HashMap<String, String>();
params.put("appid", appid);
params.put("mch_id", partner);
params.put("out_trade_no", "US2015111300044");
params.put("out_refund_no", System.currentTimeMillis() + "");
params.put("total_fee", "1");
params.put("refund_fee", "1");
params.put("op_user_id", partner);
String certPath = "/Users/lcm/Desktop/apiclient_cert.p12";
// 申请退款,内部添加了随机字符串nonce_str和签名sign
Map<String, String> map1 = PaymentApi.refund(params, paternerKey, certPath);
System.out.println(map1);
}
public static void main(String[] args) {
// testQuery();
// testClose();
testRefund();
}
}