|
tips:代码我已经上传到github上了:https://github.com/sangbobo/WeChatSendRedPack
转载请注明出处: SangBigYe:http://blog.csdn.net/cutelittlebo/article/details/53874450
首先是罗列一下基本的开发步骤。
| 用到的jar包: |
jar包说明 |
| commons-lang3-3.4.jar |
文本处理 |
| httpcore-4.4.jar |
https相关 |
| json-20090211.jar |
json相关 |
| okhttp-3.5.0.jar |
http请求相关 |
| okio-1.11.0.jar |
okhttp依赖 |
public static void main(String[] args) throws Exception {
SendRedPack sendRedPack = new SendRedPack(
"随机字符串不超过32位",
"随机订单号,不超过32位",
"商户号",
"公众号appid",
"桑博",
"填写接受人的openid",
100,
1,
"萌萌哒",
"127.0.0.1",
"桑博红包",
"桑博",
"PRODUCT_5"
);
String urlParamsByMap = Tool.getUrlParamsByMap(Tool.toMap(sendRedPack));
urlParamsByMap += "&key=填写API密钥";
String sign = Tool.parseStrToMd5L32(urlParamsByMap).toUpperCase();
sendRedPack.setSign(sign);
TreeMap treeMap = new TreeMap(Tool.toMap(sendRedPack));
String soapRequestData = Tool.getSoapRequestData(treeMap);
RequestBody body = RequestBody.create(MediaType.parse("text/xml;charset=UTF-8"), soapRequestData);
Request request = new Request.Builder()
.url("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack")
.post(body)
.build();
//为http请求设置证书
SSLSocketFactory socketFactory = getSSL().getSocketFactory()
X509TrustManager x509TrustManager = Platform.get().trustManager(socketFactory)
OkHttpClient okHttpClient = new OkHttpClient.Builder().sslSocketFactory(socketFactory, x509TrustManager).build()
//得到输出内容
Response response = okHttpClient.newCall(request).execute()
String content = response.body().string()
System.out.println(content)
1、关于total_amout,此处略坑,100 == 1元钱 ,也就是说 这里的 1 相当于1分钱,所以大家做好处理。微信发送红包不少于1元钱。
2、关于使用中文签名错误,一定要使用utf-8进行md5。
public static SSLContext getSSL() throws KeyStoreException, IOException, CertificateException, NoSuchAlgorithmException, UnrecoverableKeyException, KeyManagementException {
KeyStore keyStore = KeyStore.getInstance("PKCS12");
FileInputStream instream = new FileInputStream(new File("D:/soft/apiclient_cert.p12"));
try {
keyStore.load(instream, "填写证书密码,默认为商户号".toCharArray());
} finally {
instream.close();
}
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, "填写证书密码,默认为商户号".toCharArray())
.build();
return sslcontext;
}
|