我在网上查找了很多关于微信支付的案例很多但是部分讲的不是很细节,自己拿过来以后不知道如何去使用比较乱。我这几天研究了一下微信的支付v2的文档

目前自己还是一个头脑简单的码农如果我哪里有啥不对的欢迎大家来指点一下,谢谢大家!!!!!!!!!!!!!

我们都知道微信支付的app相关的接口是要封装好app传过来的相关参数数据打包给前端来唤起支付,其中最令人头疼的可能就是签名。好多人你不理解签名是怎么回事。其实理解了微信支付文档,其实一点也不难。签名就是客户端发数据给后台,后台打包下单参数签名一次,把返回的数据做处理提取app唤起微信支付的相关数据,再封装app唤起微信支付的参数打包在签名一次一同返回给app来操作支付。

微信支付的app流程大概就是在这里插入代码片此流程!!!!

其中微信官方要求的签名有两种方式MD5和HMAC-SHA256签名方式

。我本人采用的MD5来操作的。这个MD5工具基本不用自己去写一套,jdk提供的就行。大家可以去看看我写的哦!

不说废话了,下面是我给大家整理的代码。其中使用的dom4j.jar来解析xml类型文档。可以去maven仓库中心去下载!

这个是微信一些参数配置通用的

public class WeiXinConfig {

//微信统一下单接口

String url = "https://api.mch.weixin.qq.com/pay/unifiedorder";

//直连商户申请的公众号或移动应用appid。

String appid = "";

//直连商户的商户号,由微信支付生成并下发。

String mchid = "";

//随机字符串,不长于32位。推荐随机数生成算法

String nonce_str = "";

//商品描述

String body = "";

//商户订单号

String out_trade_no = "";

//订单总金额,单位为分,详见支付金额

int total_fee;

//终端IP

String spbill_create_ip = "127.0.0.1" ;

//回调地址

String notify_url;

//交易类型

String trade_type = "APP";

String package_type = "Sign=WXPay";

/** 商户平台和开发平台约定的API密钥,在商户平台设置 */

public static final String key = "";

}

这个是我们在解析数据和打包签名在这里面

public class WeiXinUtil {

/*

*实例化参数

*/

private WeiXinConfig weixinconfig = new WeiXinConfig();

/**

* 字符串长度

*/

private static int len = 25;

private static String [] list= {"0","1","2","3","4","5","6","7","8","9","a","b","c","f","g","q","f","k","l","m"};

private static StringBuffer nonce_str= new StringBuffer();

/**

* 生成随机25位随机数

* @return

*/

public static StringBuffer acc() {

int i ;

Random r = new Random();

while(nonce_str.length()

i = Math.abs(r.nextInt(20));

if(i0) {

nonce_str.append(list[i]);

}

}

return nonce_str;

}

/**

* POST请求,字符串形式数据

* @param url 请求地址

* @param param 请求数据

* @param charset 编码方式

*/

public static String sendPostUrl(String url, String param) {

PrintWriter out = null;

BufferedReader in = null;

String result = "";

try {

URL realUrl = new URL(url);

// 打开和URL之间的连接

URLConnection conn = realUrl.openConnection();

// 设置通用的请求属性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

// 发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);

// 获取URLConnection对象对应的输出流

out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(),"UTF-8"));

// 发送请求参数

out.print(param);

// flush输出流的缓冲

out.flush();

// 定义BufferedReader输入流来读取URL的响应

in = new BufferedReader(new InputStreamReader(

conn.getInputStream()));

String line;

while ((line = in.readLine()) != null) {

result += line;

}

} catch (Exception e) {

System.out.println("发送 POST 请求出现异常!" + e);

e.printStackTrace();

}

// 使用finally块来关闭输出流、输入流

finally {

try {

if (out != null) {

out.close();

}

if (in != null) {

in.close();

}

} catch (IOException ex) {

ex.printStackTrace();

}

}

return result;

}

/**

* 拼接支付参数xml

* @param map

* @return

*/

public String xmltext(LinkedHashMap map) {

// TODO Auto-generated method stub

StringBuilder xml = new StringBuilder();

xml.append("");

for(String s:map.keySet()) {

xml.append("").append(map.get(s)).append("").append(s).append(">");

}

xml.append("");

return xml.toString();

}

/**

* 生成签名凭证

* @param map

* @return

* @throws UnsupportedEncodingException

*/

public String apend(LinkedHashMap map) {

StringBuilder sigin = new StringBuilder();

for(String s:map.keySet()) {

sigin.append(s);

sigin.append("=");

sigin.append(map.get(s));

sigin.append("&");

}

sigin.append("key=").append(weixinconfig.key);

System.out.println("xml拼接=="+sigin);

String md5Hex = DigestUtils.md5Hex(sigin.toString()).toUpperCase();

System.out.println("第一次签名++++"+md5Hex);

return md5Hex;

}

/**

* string类型的xml转化map

* @param sxml

* @return

* @throws DocumentException

*/

public Map XmltoMap(String sxml) throws DocumentException{

if(StringUtils.isBlank(sxml)) {

return null;

}

Map map = new HashMap();

InputSource in = new InputSource (new StringReader(sxml));

in.setEncoding("utf-8");

SAXReader sax = new SAXReader();

Document document = sax.read(in);

Element el = document.getRootElement();

List list = el.elements();

for(Element element:list) {

map.put(element.getName(), element.getTextTrim());

System.out.println(element.getName()+"============"+element.getTextTrim());

}

return null;

}

}

这个是调接口下单的(配置好你们自己申请的appid,密钥,商户号什么的就可以直接调用了)

public class PostUrl {

private WeiXinConfig weixinconfig = new WeiXinConfig();

private WeiXinUtil weixinutil = new WeiXinUtil();

/**

*

* @param spbill_create_ip =>下单地址

* @param out_trade_no =>订单编号

* @param total_fee => 订单金额

* @param body => 商品信息

* @throws DocumentException

* @throws UnsupportedEncodingException

*/

public void payinfo(String spbill_create_ip,String out_trade_no,int total_fee,String body) throws DocumentException {

LinkedHashMap map = new LinkedHashMap();

//微信参数打包顺序严格按照此顺序来,不然签名会出问题-top

map.put("appid", weixinconfig.appid);

map.put("body", body);

map.put("mch_id", weixinconfig.mchid);

map.put("nonce_str", weixinutil.acc()+"");

map.put("notify_url", "dhjskakwa");

map.put("out_trade_no", out_trade_no);

map.put("spbill_create_ip", spbill_create_ip);

map.put("total_fee", total_fee+"");

map.put("trade_type", "APP");

String sign = weixinutil.apend(map);

map.put("sign", sign);

//微信参数打包顺序严格按照此顺序来,不然签名会出问题-bottom

System.out.println(sign);

String xml = weixinutil.xmltext(map);

System.out.println(xml);

String stringxml = weixinutil.sendPostUrl(weixinconfig.url,xml);

Map xmltomap = weixinutil.XmltoMap(stringxml);

//处理下单返回的数据打包给前端支付

LinkedHashMap payinfo = new LinkedHashMap();

payinfo.put("appid", weixinconfig.appid);

payinfo.put("partnerid", weixinconfig.mchid);

payinfo.put("prepayid", MapUtils.getString(xmltomap, "prepay_id"));

payinfo.put("package", weixinconfig.package_type);

payinfo.put("noncestr", weixinutil.acc().toString());

payinfo.put("timestamp",System.currentTimeMillis()+"");

String sign2 = weixinutil.apend(map);

payinfo.put("sign", sign2);

}

以上就是我自己整理的,希望对大家有所帮助!!!!!!

java app支付_java微信支付—APP相关推荐

  1. java app支付_Java 微信支付之APP支付服务端 (一)

    Java 微信支付之APP支付服务端 (一) 如图所示,这是服务端要集成的所有微信接口.至于在开放平台申请就不做赘述了.主要流程,1.下单,2.异步通知,3.查询. 一.微信统一下单请求交易 /** ...

  2. java微信内h5调起支付_java微信支付--------公众号内H5调起支付

    /*** 统一下单接口,获取prepay_id *@paramrequest *@return */@RequestMapping(value= "/unifiedOrder", ...

  3. 浅析微信支付:微信支付简单介绍(小程序、公众号、App、H5)

    本文是[浅析微信支付]系列文章的第二篇,主要讲解一下普通商户接入的支付方式以及其中的不同之处. 上篇文章讲了本系列的大纲,没有看过的朋友们可以看一下. 浅析微信支付:前篇大纲 微信支付是集成在微信客户 ...

  4. 阿里多个App已接入微信支付;Facebook年薪中位数170万元;恶意软件感染超1000万台安卓设备 | EA周报...

    EA周报 2021年9月30日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 周报看点 1.恶意软件感染超1000万台安卓设备 2.阿里回应App接入微信支付:会继续 ...

  5. APP内拉起微信支付的解决方案

    APP内拉起微信支付的解决方案 目录 需求背景 解决方案 同业情况 补充说明 目录 需求背景 个人APP拥有者,在不直连微信的情况下,希望用户在APP中选择微信支付后可直接跳转微信APP完成支付. 解 ...

  6. 个人开发者如何在App中调起微信支付

    主要内容   关于企业资质开发者申请的微信支付,如何调起微信支付的,官方文档已经很详细,且百度上也有很多相关资料,这里不再介绍.本篇主要讲的是个人资质的支付如何在自己的App中调起微信支付. 演示 实 ...

  7. APP如何调用微信支付H5支付?

    有一种奇特的需求叫做,在app上使用h5支付.这个实际上是有优势的,比如有多个app要做微信支付,只要h5做一套就可以全部通用.网上搜了一圈,讲的有很多,但是都不太细致,有些坑没有说.下面是我的实现: ...

  8. java后台提供ios微信支付接口

    提供微信支付接口,需要先在微信开放平台(https://open.weixin.qq.com/)申请账号,进行开发者资格认证通过后创建应用. 创建成功后会有对应应用的AppID和AppSecret这个 ...

  9. 微信小程序-JAVA实现微信支付功能(微信支付2.0)

    微信小程序-JAVA实现微信支付功能(微信支付2.0) 一.前言 本博客主要介绍JAVA后台与微信小程序(UNI-APP或者原生微信小程序)的微信支付的实现,如果是APP或者H5的开发暂时不支持,具体 ...

  10. 微信支付采坑记录(java后端 一:微信支付调用从哪一步开始)

    普通商户模式微信支付之APP支付统一下单: 前言: 最近项目开发到微信支付的模块,经过一周的不懈努力,虽然微信支付流程跑通了,但当时的那些坑是真的烦,为了避免自己以后犯同样的错误,当然还有各位新接触微 ...

最新文章

  1. 三十六亿的《哪吒》历时五年,如何用AI解决动画创作难题?
  2. Java16-day07【Map(概述、特点、功能、遍历)、HashMap集合练习、集合嵌套、Collections、模拟斗地主升级版】
  3. LeetCode Number Complement
  4. wins系统flask绑定mysql_flask如何连接mssql,网上大多是sqlite和mysql教程?
  5. “视频云营业厅”发布,蚂蚁 mPaaS 加速金融机构数字化转型
  6. jupyter notebook使用入门2——创建一个基于scikit-Learn的线性预测ipynb文件
  7. 王府井上半年营收46.88亿元 同比上涨36.88%
  8. Android-Universal-Image-Loader-master 详解
  9. HR:不录用她,是因为她“太傻白甜了……”
  10. FLEX 2.01 全套下载!
  11. 【数学建模】CUMCM-2014A 嫦娥三号软着陆过程 避障阶段图像处理
  12. python风控建模_风控建模之特征筛选与建模(python)
  13. 计算机sci二区期刊,SCI二区期刊汇总表
  14. 比特客区块链 | 从A到Z速记区块链词汇表
  15. 降钙素(Cys(Acm)²·⁷)-α-CGRP (human)、125448-83-1
  16. excel表格斜线_WORD圆角表格,如此惊艳
  17. 苹果你深深的伤害了我,还不让我说
  18. 地税局工资管理系统(论文+设计)新
  19. php苹果笔记本编程,Mac端软件推荐,让你成为编程高富帅!
  20. 小明打游戏(Java)

热门文章

  1. 服务器主动向客户端发送信息机制
  2. matlab求系统根轨迹代码_如何绘制变参数根轨迹(针对复杂情况,无法分离出开环增益k*时)...
  3. h5页面 请在微信客户端打开链接_电脑版微信网页授权提示请在微信客户端打开链接?...
  4. 凯撒加密的python语言程序_python语言编程实现凯撒密码、凯撒加解密算法、
  5. python编写鸡兔同笼程序_鸡兔同笼问题的python实现
  6. 可视化html css布局,一个开源可视化布局项目,在线生成纯css布局,可阅读的代码...
  7. 测试架构师修炼之道--读书笔记
  8. PHP经典实用案例1000个
  9. 微信开启指纹支付显示java,微信找不到指纹支付怎么办?微信指纹支付怎么使用?...
  10. 无刷直流电机构成及工作原理详解