怎么在Java中使用导弹框架实现一个微信退款功能

  介绍

本篇文章为大家展示了怎么在Java中使用导弹框架实现一个微信退款功能,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

String  outTradeNo =, request.getParameter (“outTradeNo");//,获取商户订单号   ,   ,Integer  totalFee =, Integer.parseInt (request.getParameter (“totalFee"));//,获取支付金额   ,   ,Map<字符串,String>, getMap =, new  HashMap<字符串,,String> ();   ,//获得当前目录   ,String  path =, request.getSession () .getServletContext () .getRealPath (“/?;   ,   ,Date 你=,new 日期();   ,SimpleDateFormat  dateFormat =, new  SimpleDateFormat (“yyyyMMddHHmmss");//,可以方便地修改日期格式   ,String  outRefundNo =,“NO", +, dateFormat.format(现在);

提供的参数有订单号这个是支付成功之后生成的唯一号码,然后是获取到用户支付的金额这两个参数都是由支付之后的订单上面获得的。下面那个路径则是保存微信安全证书文件的位置,这里提一下要实现微信退款和微信企业转账功能是需要到微信商户平台去下载安全证书的,然后把证书放在项目的web - inf/目录下即可。

RefundReqData  RefundReqData =, new  RefundReqData ();   ,refundReqData.setAppid (Configure.getAppID ());   ,refundReqData.setMch_id (Configure.getMch_id ());   ,refundReqData.setNonce_str (RandomStringGenerator.getRandomStringByLength (32));   ,refundReqData.setOut_trade_no (outTradeNo);   ,refundReqData.setOut_refund_no (outRefundNo);   ,refundReqData.setTotal_fee (totalFee);   ,refundReqData.setRefund_fee (refundFee);   ,refundReqData.setOp_user_id (Configure.getMch_id ());   ,refundReqData.setNotify_url (“https://weixin.qq.com/notify/");   ,,,String  sign =, Signature.getSign (refundReqData);//,生成签名   ,refundReqData.setSign(迹象);

获取到需要的参数之后呢,我在这里使用了一个退款的实体类把这些参数保存到了我的实体类里面方便后面的签名加密。

ArrayList, list =, new  ArrayList ();   ,,,@SuppressWarnings (“rawtypes")   ,Class  cls =, o.getClass ();   ,,,现场[],fields =, cls.getDeclaredFields ();   ,,,for  (Field  f :字段),{   ,,,,,f.setAccessible(真正的);   ,,,,,if  (f.get (o), !=, null ,,, f.get (o), !=,““), {   ,,,,,,String  name =, f.getName ();   ,,,,,,XStreamAlias  anno =, f.getAnnotation (XStreamAlias.class);   ,,,,,,如果(anno  !=, null)   ,,,,,,name =, anno.value ();   ,,,,,,,list.add(时间+ name “=? +, f.get (o), +,“和“);   ,,,,,}   ,,,}   ,,,int  size =, list.size ();   ,,,String  [], arrayToSort =, list.toArray (new 字符串(大小));   ,,,Arrays.sort (String.CASE_INSENSITIVE_ORDER arrayToSort也);   ,,,StringBuilder  sb =, new  StringBuilder ();   ,,,(int 小姐:=,0;,小姐:& lt;,大小;,小姐:+ +),{   ,,,,,sb.append (arrayToSort[我]);   ,,,}   ,,,String  result =, sb.toString ();   ,,,result  +=,“关键=?+,Configure.getKey ();   ,,,System.out.println(“签名数据:“+结果);   ,,,result =, MD5Util.MD5Encode(因此,“utf-8") .toUpperCase ();   ,,,return 结果;

这个是我签名加密的方法,把数据加密之后会成为一个很长的字符串,但是官方提供的退款接口是没办法解析你这个超长字符串的数据的,所以我们要把这个字符串变成官方接口认识的数据格式也就是xml格式。

private  static  XStream  XStream =, new  XStream (new  XppDriver (), {   ,,,,public  HierarchicalStreamWriter  createWriter (Writer ), {   ,,,,,,return  new  PrettyPrintWriter(出),{   ,,,,,,,,//,对所有xml节点的转换都增加CDATA标记   ,,,,,,,,boolean  cdata =,真的;   ,   ,,,,,,,,//@SuppressWarnings (“unchecked")   ,,,,,,,,public  void  startNode(名称、String  Class  clazz), {   ,,,,,,,,,,super.startNode(名字,,clazz);   ,,,,,,,,}   ,   ,,,,,,,,protected  void  writeText (QuickWriter 作家,String 文本),{   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null   null

怎么在Java中使用导弹框架实现一个微信退款功能