博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java实现微信支付
阅读量:5105 次
发布时间:2019-06-13

本文共 3314 字,大约阅读时间需要 11 分钟。

 

java实现微信支付 

package com.hk.wx.pay.service.impl;@Servicepublic class PayServiceImpl  implements PayService{  private static final Logger LOG = LoggerFactory.getLogger(PayServiceImpl.class);  private static final String PAY_URL = "https://api.mch.weixin.qq.com/pay/unifiedorder";  @Value("${appid}")  private String APPID = "";  @Value("${pay.mch_id}")  private String PAY_MACH_ID = "";  @Value("${pay.body}")  private String PAY_BODY = "";  @Value("${pay.notify_url}")  private String PAY_NOTIFY_URL = "";  @Value("${pay.trade_type}")  private String PAY_TYPR = "";  @Value("${pay.key}")  private String PAY_KEY = "";  public JSONObject wxPay(String total_fee, String imei, String ip, String openid)  {    Map pay = new LinkedHashMap();   // 按照 添加顺序 排序    pay.put("appid", this.APPID); //小程序 aapid    pay.put("attach", getOrderNum());  //附加数据    pay.put("body", this.PAY_BODY);    //商品描述    pay.put("device_info", imei);      //    pay.put("mch_id", this.PAY_MACH_ID);  //商品号    pay.put("nonce_str", getNonceStr());  //随机字符串    pay.put("notify_url", this.PAY_NOTIFY_URL); //返回连接    pay.put("openid", openid);           //微信用户 id    pay.put("out_trade_no", getOrderNum());    //订单号    pay.put("sign_type", "MD5");    pay.put("spbill_create_ip", ip);    pay.put("total_fee", total_fee);    pay.put("trade_type", this.PAY_TYPR);    pay.put("sign", getSign(pay));    String xml = XmlUtil.mapToXMLString(pay);  // 转成 xml 形式    System.out.println(xml);    String msg = "";    try    {      msg = HttpUtils.xmlRequest("https://api.mch.weixin.qq.com/pay/unifiedorder", "POST", xml); // xml 形式 post请求      JSONObject json = XmlUtil.xmlToJSONObject(msg);      String ret = json.getString("return_code");      if ((ret != "") && (ret.equals("SUCCESS")) &&         (!"SUCCESS".equals(json.getString("result_code")))) {        return json;      }      LOG.info("# 统一下单错误...msg:" + json.toString());      return null;    }    catch (Exception e) {      LOG.error("# 支付出错...");      e.printStackTrace();    }return null;  }        //获取随机数  private static String getNonceStr()  {    return Md5Utils.encryption(ComApi.getUUID());  }  //获取 sign  private static String getSign(Map
parameters) { String characterEncoding = "UTF-8"; StringBuffer sb = new StringBuffer(); List list = new ArrayList(parameters.entrySet()); Collections.sort(list, new Comparator() { public int compare(Map.Entry
mapping1, Map.Entry
mapping2) { return ((String)mapping1.getKey()).compareTo((String)mapping2.getKey()); } }); for (Map.Entry mapping : list) { String k = (String)mapping.getKey(); Object v = mapping.getValue(); if ((v != null) && (!"".equals(v)) && (!"sign".equals(k)) && (!"key".equals(k))) { sb.append(k + "=" + v + "&"); } } sb.append("key=key"); //key 是支付帐号里面的api安全密码 LOG.info("# sign 拼接:" + sb.toString()); String sign = Md5Utils.encryption(sb.toString(), characterEncoding).toUpperCase(); LOG.info("# 获取 签名...sign:" + sign); return sign; }   //获取订货号 private static String getOrderNum() { String time = TimeUtils.getSysDate("yyyyMMddHHmmssSSS"); String uuNum = ComApi.getUUNum(); String num = "HK" + time + uuNum; return num; }}

 

转载于:https://www.cnblogs.com/lemon-flm/p/8514384.html

你可能感兴趣的文章
Openssl genrsa命令
查看>>
Openssl crl2pkcs7命令
查看>>
MySql update inner join!MySql跨表更新 多表update sql语句?如何将select出来的部分数据update到另一个表里面?...
查看>>
我最宏大的个人愿望
查看>>
北漂周记--第5记--拼命编程
查看>>
比赛总结一
查看>>
SpringBoot项目打包
查看>>
JSP的3种方式实现radio ,checkBox,select的默认选择值
查看>>
Linux操作系统 和 Windows操作系统 的区别
查看>>
《QQ欢乐斗地主》山寨版
查看>>
文件流的使用以及序列化和反序列化的方法使用
查看>>
Android-多线程AsyncTask
查看>>
第一个Spring冲刺周期团队进展报告
查看>>
C++函数基础知识
查看>>
红黑树 c++ 实现
查看>>
Android 获取网络链接类型
查看>>
报表服务框架:WEB前端UI
查看>>
5.9UDP客户端服务器-基于OK6410
查看>>
java自学基础、项目实战网站推荐
查看>>
软件包的使用
查看>>