大家好,我又来了!!!
哎,我上一篇的文章。因为版权原因发布不出来。就是一个破解idea的方法。很简单,也超级好用。
如果又需要的话,可以私信小铁。我可以私发给你
一、微信退款
第三方微信的干活又来了,之前讲了微信授权和微信支付,我想大家对微信第三方的已经有了一定的了解了。今天咱们来讲讲微信退款。
还是先看微信支付的文档,点这里,直接跳转了。
咱们先看看需要的参数,其实你能写出来微信支付的话,这个微信退款你也不会非常困难的。
在我看来的话,您比较疑惑的是 这个证书是怎么搞的。
好的,咱们主要来看看这个证书是怎么弄的。
二、证书下载
1)在微信商户平台–>账户中心–>账户设置–>API安全中下载微信提供的证书生成工具
2)填写商户信息,需要自己的商户号、商户名称。完成后,点击下一步
3)将软件生成的密钥字符串复制到微信商户平台。完成后,点击下一步
4)复制粘贴到商户后台后,提交请求串,证书串生成后,复制到“证书工具”中
5)这里粘贴商户后台生成的证书串,点击下一步,生成证书
6)这里证书已经生成成功,点击“查看证书文件”查看电脑本地的证书,提供给微信API使用
咱们已经下载完了,现在就开始安装吧!!
小铁在这里就不写了,请直接访问这里把,点击这里
好了,微信的证书现在已经安装完了吧。现在就开始写代码吧。
三、退款证书配置
public static String doRefund(String url, String data) throws Exception{
KeyStore keyStore = KeyStore.getInstance("PKCS12");
//P12文件目录 证书路径,这里需要你自己修改,linux下还是windows下的根路径
String filepath = "D:\\xhaccount\\src\\main\\resources\\";
System.out.println("filepath->"+filepath);
FileInputStream instream = new FileInputStream(filepath+"apiclient_cert.p12");
try {
keyStore.load(instream, "none".toCharArray());//这里写密码..默认是你的MCHID
} finally {
instream.close();
}
// Trust own CA and all self-signed certs
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, "none".toCharArray())//这里也是写密码的
.build();
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext,
SSLConnectionSocketFactory.getDefaultHostnameVerifier());
CloseableHttpClient httpclient = HttpClients.custom()
.setSSLSocketFactory(sslsf)
.build();
try {
HttpPost httpost = new HttpPost(url); // 设置响应头信息
httpost.addHeader("Connection", "keep-alive");
httpost.addHeader("Accept", "*/*");
httpost.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
httpost.addHeader("Host", "api.mch.weixin.qq.com");
httpost.addHeader("X-Requested-With", "XMLHttpRequest");
httpost.addHeader("Cache-Control", "max-age=0");
httpost.addHeader("User-Agent", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0) ");
httpost.setEntity(new StringEntity(data, "UTF-8"));
CloseableHttpResponse response = httpclient.execute(httpost);
try {
HttpEntity entity = response.getEntity();
String jsonStr = EntityUtils.toString(response.getEntity(), "UTF-8");
System.out.println("结果"+jsonStr);
EntityUtils.consume(entity);
return jsonStr;
} finally {
response.close();
}
} finally {
httpclient.close();
}
}
小铁把证书放在了这里,位置可以随便放,只要能找到就可以
咱们现在开始发送请求。
//退款
public static Map refund(UserPayOrderVo userPayOrderVo) throws Exception {
//创建请求地址
String url = "https://api.mch.weixin.qq.com/secapi/pay/refund";
Map<String, String> paramMap = new LinkedHashMap<>();
paramMap.put("appid",WxConstant.appId);
paramMap.put("mch_id",WxConstant.mchId);
paramMap.put("nonce_str",WXPayUtil.generateNonceStr());
paramMap.put("out_refund_no",WXPayUtil.generateNonceStr());
paramMap.put("out_trade_no",userPayOrderVo.getPayOrderNumber()); //这个是订单号
paramMap.put("refund_fee",moneyToShareTheMoney(userPayOrderVo.getPayMoney())+""); //这个是钱
paramMap.put("total_fee",moneyToShareTheMoney(userPayOrderVo.getPayMoney())+"");
paramMap.put("sign",WXPayUtil.generateSignature(paramMap,WxConstant.return_sign));
// 接收请求返回值
String content = doRefund(url,WXPayUtil.mapToXml(paramMap));
Map<String, String> resultMap = WXPayUtil.xmlToMap(content);
if ("SUCCESS".equals(resultMap.get("return_code")) && "SUCCESS".equals(resultMap.get("result_code"))) {
return resultMap;
}
throw new RuntimeException("微信调用失败");
}
如果,您看了小铁的上一篇文章就会知道:“这里面的“WXPayUtil”都是小铁引入第三方的sdk”
<!--微信支付-->
<dependency>
<groupId>com.github.wxpay</groupId>
<artifactId>wxpay-sdk</artifactId>
<version>0.0.3</version>
</dependency>
好了,如果您其他的信息没有填错的话,您的退款就可以成功了,快拿去试试去吧! 如果对您有帮助的话,就请您转发给您身边的程序员的朋友,小铁希望自己的文章能够帮到您和您的朋友。
如果,您显示签名错误,就请看看小铁的上一篇文章微信支付结尾的部分去吧!!!
还有几天,就过年了。或许这几天小铁的文章会停更,但不会迟到!!
最后小铁送大家一句话。
我不去想是否能够成功,既然选择了远方,便只顾风雨兼程!
加油,少年!!!