java实现微信支付
java实现微信支付
package com.hk.wx.pay.service.impl; @Service
public 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<Object, Object> 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<Object, Object> mapping1, Map.Entry<Object, Object> 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;
} }
java实现微信支付的更多相关文章
- Java 后端微信支付demo
Java 后端微信支付demo 一.导入微信SDK 二.在微信商户平台下载证书放在项目的resources目录下的cert文件夹下(cert文件夹需要自己建) 三.实现微信的WXPayConfig接口 ...
- JAVA实现微信支付V3
喜欢的朋友可以关注下,粉丝也缺. 相信很多的码友在项目中都需要接入微信支付,虽说微信支付已成为一个普遍的现象,但是接入的过程中难免会遇到各种各样的坑,这一点支付宝的SDK就做的很好,已经完成的都知道了 ...
- JAVA开发微信支付-公众号支付/微信浏览器支付(JSAPI)
写这篇文章的目的有2个,一是自己的项目刚开发完微信支付功能,趁热回个炉温习一下,二也是帮助像我这样对微信支付不熟悉,反复看了多天文档还是一知半解,原理都没摸清,更不要说实现了.本以为网上的微信开发教程 ...
- java对接微信支付
对接微信扫码支付(模式2),前端使用velocity技术 (1)调用微信支付接口(view层) 此部分业务逻辑部分可以省略 @RequestMapping("/wxpay.htm" ...
- java做微信支付notify_url异步通知服务端的写法
最近团队在接入微信支付,APP和JSAPI的接口都需要填写一个notify_url回调地址,但是坑爹的官方文档并没有找到JSAPI模式的java版的demo,所以不得不自己看文档写了一个接受微信异步通 ...
- java版微信支付/查询/撤销
最近公司接入微信刷卡支付,网上根本没见到很直接的教程(可能眼拙),一直摸滚打爬,加班加点才走通,忍不了必须写一写 微信 刷卡支付/查询/撤销... 必须要有公众号然后去申请,申请自己去看文档,这里主要 ...
- Java之微信支付(扫码支付模式二)案例实战
摘要:最近的一个项目中涉及到了支付业务,其中用到了微信支付和支付宝支付,在做的过程中也遇到些问题,所以现在总结梳理一下,分享给有需要的人,也为自己以后回顾留个思路. 一:微信支付接入准备工作: 首先, ...
- java实现微信支付之扫码支付
本文直接从代码调用微信扫码支付讲起.账号配置,参数生成等请参考官方文档:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_1 微信 ...
- java之微信支付通知
微信支付,是现在大多数平台都需要接入的一个支付方式,没办法,谁让现在的用户都习惯了这种消费方式呢 我今天只说说微信支付通知,我们后台怎么接收通知,并把我们的订单的状态改为已支付, 至于为什么不说支付的 ...
随机推荐
- day33(sql)
操作数据库 增: create database 数据库名 character set utf8 删 drop database 数据库名称 改 alter database 数据库名称 charac ...
- SSM_CRUD新手练习(6)分页后台控制器编写
经过测试基础环境已经搭建好了,现在我们开始编写CRUD. 我们来看一下查询的逻辑该怎么写: 1.访问index.jsp页面 2.index.jsp页面发送查询员工的请求 3.EmployeeContr ...
- 《mysql必知必会》学习_第11章_20180801_欢
第11章:使用数据处理函数. P69 文本处理函数,upper()函数把文本变成大写字体. select vend_name,upper(vend_name) as vend_name_upcase ...
- bootstrap 警告框单个删除
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- file新建文件及文件夹
1.获取包名的根目录:mRootPath = getFilesDir().getParent(); // ====mRootPath===/data/data/com.yoyu.file 获取SD卡 ...
- hive函数 get_json_object的使用
hive提供了json的解析函数:get_json_object 使用方法 对于jsonArray(json数组),如person表的xjson字段有数据: [{"name":&q ...
- ASP.NET Web API 框架研究 ASP.NET Web API 路由
ASP.NET Web API 核心框架是一个独立的.抽象的消息处理管道,ASP.NET Web API有自己独立的路由系统,是消息处理管道的组成部分,其与ASP.NET路由系统有类似的设计,都能找到 ...
- 安装Chrome浏览器
Ubuntu 16.04下安装64位谷歌Chrome浏览器 在 Ubuntu 16.04 中,要想使用谷歌的 Chrome 浏览器,可以通过命令行的方式手动安装. 1.进入 Ubuntu 16.04 ...
- 转:iOS9的新特性以及适配方案
2015年9月8日,苹果宣布iOS 9操作系统的正式版在太平洋时间9月16日正式推出,北京时间9月17日凌晨1点推送. 新的iOS 9系统比iOS8更稳定,功能更全面,而且还更加开放.iOS 9加入了 ...
- 【转】 js数组 Array 交集 并集 差集 去重
原文:http://blog.csdn.net/ma_jiang/article/details/52672762 最劲项目需要用到js数组去重和交集的一些运算,我的数组元素个数可能到达1000以上, ...