微信退款
来源:互联网 发布:php 商城怎么删除订单 编辑:程序博客网 时间:2024/06/03 02:01
获得签名sign基本和微信支付一样,只是后边写个固定方法即可,只是先要下载证书apiclient_cert.p12;
当时用的是企业号不是公众号,不过基本一致
直接附上代码:
//申请退款
@RequestMapping("toreturn")
@ResponseBody
public Map<String, Object> toreturn(HttpServletRequest req,HttpServletResponse resp,Model model){
Map<String, Object> dataMap=new HashMap<String,Object>();
JSONObject getJson = HttpsUtil.gainToken(WXConfig.COMPANY_ACCESS_TOKEN_URL+"corpid="+WXConfig.APPID+"&corpsecret="+WXConfig.APPSECRET);
String access_token=getJson.getString("access_token");
JSONObject t=new JSONObject();
t.put("userid", readCookie("wapuser", req));
JSONObject getJson3 = HttpsUtil.callInterface(WXConfig.CONVERT_TO_OPENID+"access_token="+access_token,t.toString());
String open_id=getJson3.getString("openid");
//商户相关资料
String partner = WXConfig.PARTNER;
String partnerkey = WXConfig.PARTENR_KEY;
if (!StringUtil.isEmpty(open_id)) {
String strReq=req.getParameter("out_trade_no");
int order_price=1;//支付金额
Order order=orderService.queryBySn(strReq);
String sn=order.getSn();
order_price=(int)(order.getOrder_amount()*10*10);
System.out.println("sn:"+sn+"------------------money:"+order_price);
//商户号
String mch_id = partner;
//随机数
String nonce_str = sn;
//商户订单号
String out_trade_no = sn;
//商户退款单号
String out_refund_no=sn;
//非必输
SortedMap<String, String> packageParams = new TreeMap<String, String>();
packageParams.put("appid", WXConfig.APPID);
packageParams.put("mch_id", mch_id);
packageParams.put("nonce_str", nonce_str);
packageParams.put("op_user_id", WXConfig.PARTNER);
packageParams.put("out_refund_no", out_refund_no);
packageParams.put("out_trade_no", out_trade_no);
//这里写的金额为1 分到时修改
packageParams.put("refund_fee",order_price+"");
packageParams.put("total_fee", order_price+"");
//System.out.println("packageParams=========================="+JsonUtil.obj2json(packageParams));
RequestHandler reqHandler = new RequestHandler(req, resp);
reqHandler.init(WXConfig.APPID, WXConfig.APPSECRET, partnerkey);
String sign = reqHandler.createSign(packageParams);
String xml="<xml>"+
"<appid>"+WXConfig.APPID+"</appid>"+
"<mch_id>"+mch_id+"</mch_id>"+
"<nonce_str>"+nonce_str+"</nonce_str>"+
"<op_user_id>"+ WXConfig.PARTNER+"</op_user_id>"+
"<sign>"+sign+"</sign>"+
"<out_trade_no>"+out_trade_no+"</out_trade_no>"+
"<out_refund_no>"+out_refund_no+"</out_refund_no>"+
//金额,这里写的1 分到时修改
"<refund_fee>"+order_price+"</refund_fee>"+
"<total_fee>"+order_price+"</total_fee>"+
"</xml>";
System.out.println("xml="+xml);
String allParameters = "";
try {
allParameters = reqHandler.genPackage(packageParams);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String createOrderURL = "https://api.mch.weixin.qq.com/secapi/pay/refund";
String return_code="";
try {
String jsonStr=ClientCustomSSL.doRefund(createOrderURL, xml);
if(StringUtil.isEmpty(jsonStr)){
dataMap.put("code", "-1");
dataMap.put("message", "");
return dataMap;
}else{//退款成功,取消订单
//orderService.cancelOrder(order.getId());
}
System.out.println(jsonStr+"-----");
} catch (Exception e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
dataMap.put("code", "0");
dataMap.put("message", "");
return dataMap;
}
dataMap.put("code", "0");
dataMap.put("message", "");
return dataMap;
}
//申请退款
public static String doRefund(String url, String data) throws Exception {
System.out.println("-----dorefund1");
//(已下载)
KeyStore keyStore = KeyStore.getInstance("PKCS12");
FileInputStream is = new FileInputStream(new File("/diorp12/apiclient_cert.p12"));
try {
keyStore.load(is, "1234567".toCharArray());// 这里写密码..默认是你的MCHID
} finally {
is.close();
}
System.out.println("-----dorefund22222");
// Trust own CA and all self-signed certs
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, "1234567".toCharArray())// 这里也是写密码的
.build();
//已导入服务器
/**
KeyStore keyStore = KeyStore.getInstance("Windows-MY", "SunMSCAPI");
keyStore.load(null, null);
// Trust own CA and all self-signed certs
SSLContext sslcontext = SSLContexts.custom()
.loadKeyMaterial(keyStore, "".toCharArray())// 这里也是写密码的
.build();
**/
// Allow TLSv1 protocol only
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
sslcontext, new String[] { "TLSv1" }, null,
SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
CloseableHttpClient httpclient = HttpClients.custom().setSSLSocketFactory(sslsf).build();
String return_code = "";
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");
EntityUtils.consume(entity);
System.out.println("jsonStr=" + jsonStr);
if (jsonStr.indexOf("FAIL") != -1) {
return return_code;
}
return "SUCCESS";
} finally {
response.close();
}
} finally {
httpclient.close();
}
}
- 微信退款
- 微信退款
- 微信退款
- 微信退款问题
- 微信退款
- 微信退款
- 微信支付,退款
- 微信退款处理
- 微信退款接口
- 微信退款接口
- 微信 退款 java
- 微信退款通知
- Android 微信退款
- 微信退款开发
- 微信api退款及退款查询
- 微信api退款及退款查询
- 微信支付退款接口
- 微信退款demo--Java
- Hibernate学习笔记:难点,常见面试题
- ios键盘的第一响应者和打开关闭触发的通知
- BGRABitmap图像操作9d:渲染前面的水纹
- WebService理解和代码解析
- 关于计算机视觉的各种库儿们
- 微信退款
- js实现百叶窗
- 99 Problems in Scala
- 12_View动画-集合
- B-树和B+的相关知识点
- 17. meta http-equiv 属性
- 前端工程师与SEO
- C++学习初级之QString
- String 的两种创建方法及存储方式