JAVA微信支付接口开发——支付
微信支付接口开发——支付
这几天在做支付服务,系统接入了支付宝、微信、银联三方支付接口。个人感觉支付宝的接口开发较为简单,并且易于测试。
关于数据传输,微信是用xml,所以需要对xml进行解析。
1、微信支付的几种接口
付款码支付、JSAPI支付、Native支付、APP支付、H5支付、小程序支付。几种支付方式都是大同小异。
2、支付流程
基于APP支付来说,微信支付的大体流程:
1、APP客户端根据用户支付请求,将订单信息(订单号,金额等)传至后台服务器
2、后台服务器根据订单信息,拼装微信统一下单接口需要的请求参数。其中比较重要的参数为appid、mch_id、nonce_str、sign、out_trade_no、total_fee、notify_url。
这里参数拼装需要根据微信提供的签名算法
假设请求参数为:
"appid":"wxd930ea5d5a258f4f"
"mch_id":"10000100"
"body":"test"
"nonce_str":"ibuaiVcKdpRxkhJA"
需要将以上参数按照规则先拼装成String
- key值按照ASCII从小到大排序(A->Z),key=value形式并用&连接
String a = "appid=wxd930ea5d5a258f4f&mch_id=10000100&body=test&nonce_str=ibuaiVcKdpRxkhJA"
- 拼接API密钥 key 是商户平台设置的密钥key
signStr = a + "&key=192006250b4c09247ec02edce69f6a2d"
- MD5签名(转大写) 注:微信默认为MD5签名,也支持HMAC-SHA256签名方式
sign=MD5(signStr).toUpperCase()
//最终得到sign = "9A0A8659F005D6984697E2CA0A9CF3B7"
然后sign继续按照规则(A->Z)拼装进String中。
java中可以用map完成排序
Map<String, String> paramsMap = new TreeMap<String, String>(String::compareTo);
paramsMap.put("appid", APP_APP_ID);
......
//完成签名得到sign
paramsMap.put("sign",sign);
最后需要将参数转化成xml格式的string进行接口请求
<xml>
<appid>![CDATA[wxd930ea5d5a258f4f]]</appid>
<mch_id>![CDATA[10000100]]</mch_id>
<device_info>![CDATA[1000]]</device_info>
<body>![CDATA[test]]</body>
<nonce_str>![CDATA[ibuaiVcKdpRxkhJA]]</nonce_str>
<sign>![CDATA[9A0A8659F005D6984697E2CA0A9CF3B7]]</sign>
</xml>
3、微信支付统一下单的接口地址为:https://api.mch.weixin.qq.com/pay/unifiedorder
java中可以利用httpclient进行post调用。参数即之前拼接完成的带sign签名参数。
得到微信支付接口的返回值也同样是xml格式的数据,需要我们将其转成便于操作的map型数据。
返回的数据包含了return_code、return_msg。
return_code只有SUCCESS和FAIL,这是通信成功与否的标识,非业务标识。
只有return_code是SUCCESS时,才会有其他数据返回包括result_code,sign等。
若result_code业务标识也同样为SUCCESS时候才说明微信方预付单生成成功。
这时会返回我们支付业务需要的prepay_id预支付会话id。
注意: 这里需要我们进行sign签名验证,以保证数据安全性
4、将通过验签的prepay_id等信息返回给APP客户端。此时APP端可以调起支付接口,
调起了微信支付窗口,让用户完成支付操作。
然后微信端会根据之前设置的notify_url异步通知地址,进行调用。通知服务端支付情况。
5、异步通知接口调用
3、总结
微信支付接口开发还涉及到订单的相关业务(查询,关闭),以及退款等相关业务。
微信支付主要需要先了解其业务流程,然后就是调用微信支付的接口,其中就是参数的拼装与验签。这部分可以抽取成一个工具类,比如mapToXml(),xmlToMap(),md5()等等。最后根据接口文档中返回的数据判断进行业务操作。
最后吐槽一下,微信测试号没有提供支付测试环境,需要真实的服务号。
JAVA微信支付接口开发——支付的更多相关文章
- Java微信分享接口开发
发布时间:2018-11-07 技术:springboot+maven 概述 微信JS-SDK实现自定义分享功能,分享给朋友,分享到朋友圈 详细 代码下载:http://www.demodas ...
- php微信支付接口开发程序
php微信支付接口开发程序讲解 微信支付接口现在也慢慢的像支付宝一个可以利用api接口来实现第三方网站或应用进行支付了, 下文整理了一个php微信支付接口开发程序并且己测试,有兴趣的朋友可进入参考. ...
- php微信支付接口开发程序(流程已通)
php微信支付接口开发程序(流程已通) 来源:未知 时间:2014-12-11 17:11 阅读数:11843 作者:xxadmin [导读] 微信支付接口现在也慢慢的像支付宝一个可以利 ...
- 支付宝WAP支付接口开发(Node/Coffee语言)
此博客不更新很久了, 更新的文档在这, 有兴趣到这里围观: http://neutra.github.io/2013/%E6%94%AF%E4%BB%98%E5%AE%9DWAP%E6%94%AF%E ...
- php支付宝在线支付接口开发教程【转】
php支付宝在线支付接口开发教程 这篇文章主要为大家详细介绍了php支付宝在线支付接口开发教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 1.什么是第三方支付 所谓第三方支付,就是一些和各 ...
- 支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- 【转】支付宝WAP支付接口开发
支付宝WAP支付接口开发 因项目需要,要增加支付宝手机网站支付功能,找了支付宝的样例代码和接口说明,折腾两天搞定,谨以此文作为这两天摸索的总结.由于公司有自己的支付接口,并不直接使用这个接口,所以晚些 ...
- Java微信公众平台开发_02_启用服务器配置
源码将在晚上上传到 github 一.准备阶段 需要准备事项: 1.一个能在公网上访问的项目: 见:[ Java微信公众平台开发_01_本地服务器映射外网 ] 2.一个微信公众平台账号: 去注册: ...
- Java微信公众平台开发_07_JSSDK图片上传
一.本节要点 1.获取jsapi_ticket //2.获取getJsapiTicket的接口地址,有效期为7200秒 private static final String GET_JSAPITIC ...
随机推荐
- aspnet core2中使用csp内容安全策略
aspnet core2中使用csp内容安全策略 问题:aspnet core2如何使用csp防止xss的攻击 方法: public void ConfigureServices( IServiceC ...
- 微软跨平台ORM框架之EFCore
EFCore是微软推出的跨平台ORM框架,想较于EF6.X版本,更加轻量级.EFCore目前已经更新到2.x. 接下来用CodeFirst的方式来使用EFCore. 1.创建控制台程序 2.引入EFC ...
- [Swift]LeetCode819. 最常见的单词 | Most Common Word
Given a paragraph and a list of banned words, return the most frequent word that is not in the list ...
- [Swift]LeetCode989. 数组形式的整数加法 | Add to Array-Form of Integer
For a non-negative integer X, the array-form of X is an array of its digits in left to right order. ...
- springmvc 请求参数解析细节
springmvc 的请求流程,相信大家已经很熟悉了,不熟悉的同学可以参考下资料! 有了整体流程的概念,是否对其中的实现细节就很清楚呢?我觉得不一定,比如:单是参数解析这块,就是个大学问呢? 首先,我 ...
- 超全MyBatis动态SQL详解!( 看完SQL爽多了)
MyBatis 令人喜欢的一大特性就是动态 SQL. 在使用 JDBC 的过程中, 根据条件进行 SQL 的拼接是很麻烦且很容易出错的. MyBatis 动态 SQL 的出现, 解决了这个麻烦. My ...
- Spring Boot 最核心的 25 个注解,都是干货!
学习和应用 Spring Boot 有一些时间了,你们对 Spring Boot 注解了解有多少呢?今天栈长我给大家整理了 Spring Boot 最核心的 25 个注解,都是干货! 你所需具备的基础 ...
- javascript 使用小技巧总结
按位取反 ~a 即:返回 -(a+1),会去掉小数点. let a = 3.14; let b = ~a; //b = -(3.14+1) 取整 为-4: let c = ~b; //c = -(-4 ...
- Java高级开发工程师面试笔记
最近在复习面试相关的知识点,然后做笔记,后期(大概在2018.02.01)会分享给大家,尽自己最大的努力做到最好,还希望到时候大家能给予建议和补充 ----------------2018.03.05 ...
- Python内置函数(61)——str
英文文档: class str(object='') class str(object=b'', encoding='utf-8', errors='strict') Return a string ...