一、下载证书并导入到系统
微信支付接口中,涉及资金回滚的接口会使用到商户证书,包括退款、撤销接口。商家在申请微信支付成功后,可以按照以下路径下载:微信商户平台(pay.weixin.qq.com)–>账户设置–>API安全–>证书下载。
下载的时候需要手机验证及登录密码。下载后找到apiclient_cert.p12这个证书,双击导入,导入的时候提示输入密码,这个密码就是商户ID,且必须是在自己的商户平台下载的证书。否则会出现密码错误的提示:
导入正确的提示:
二、编写代码
首先初始化退款接口中的请求参数,如微信订单号transaction_id(和商户订单号只需要知道一个)、订单金额total_fee等;其次调用MobiMessage中的RefundResData2xml方法解析成需要的类型;最后调用RefundRequest类的httpsRequest方法触发请求。
/**
* 处理退款请求
* @param request
* @return
* @throws Exception
*/
@RequestMapping("/refund")
@ResponseBody
public JsonApi refund(HttpServletRequest request) throws Exception {
//获得当前目录
String path = request.getSession().getServletContext().getRealPath("/");
LogUtils.trace(path);
Date now = new Date();
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");//可以方便地修改日期格式
String outRefundNo = "NO" + dateFormat.format( now );
//获得退款的传入参数
String transactionID = "4008202001201609012791655620";
String outTradeNo = "20160901141024";
Integer totalFee = 1;
Integer refundFee = totalFee;
RefundReqData refundReqData = new RefundReqData(transactionID,outTradeNo,outRefundNo,totalFee,refundFee);
String info = MobiMessage.RefundReqData2xml(refundReqData).replaceAll("__", "_");
LogUtils.trace(info);