java开发微信支付接口_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 paramsMap = new TreeMap(String::compareTo);
paramsMap.put("appid", APP_APP_ID);
......
//完成签名得到sign
paramsMap.put("sign",sign);
最后需要将参数转化成xml格式的string进行接口请求
![CDATA[wxd930ea5d5a258f4f]]
![CDATA[10000100]]
![CDATA[1000]]
![CDATA[ibuaiVcKdpRxkhJA]]
![CDATA[9A0A8659F005D6984697E2CA0A9CF3B7]]
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异步通知地址,进行调用。通知服务端支付情况。
3、总结
微信支付接口开发还涉及到订单的相关业务(查询,关闭),以及退款等相关业务。
微信支付主要需要先了解其业务流程,然后就是调用微信支付的接口,其中就是参数的拼装与验签。这部分可以抽取成一个工具类,比如mapToXml(),xmlToMap(),md5()等等。最后根据接口文档中返回的数据判断进行业务操作。
最后吐槽一下,微信测试号没有提供支付测试环境,需要真实的服务号。
java开发微信支付接口_JAVA微信支付接口开发——支付相关推荐
- java app微信支付接口_JAVA微信APP支付接口整合
上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它大同小异了,当然这其中肯定是有各种变化的: 首先让我把微信支付文档的官网贴 ...
- java微信支付代码_Java微信支付之服务号支付代码示例
Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servl ...
- java实现阿里支付接口_Java后台使用支付宝进行支付实现---使用阿里提供的对应服务的支付宝接口...
[支付宝相关资源下载地址:支付宝开放平台 在移动支付功能处下载. 一.使用官方的Demo 需要配置基本信息: 打开"APViewController.m"文件,对以下三个参数进行 ...
- Java怎么做三端_Java三端分离开发在线教育平台
第1章 课程项目整体概述(整体介绍及Eclipse,Maven,新浪SAE软件平台介绍) 系统通过maven构建一个portal站,在sae上部署,让同学们感受一下互联网应用的魅力: 1-1 --课程 ...
- java runnable接口_java实现Runnable接口适合资源的共享
本文为大家分享了java实现Runnable接口适合资源的共享,供大家参考,具体内容如下 Java当中,创建线程通常用两种方式: 1.继承Thread类 2.实现Runnable接口 但是在通常的开发 ...
- java list 接口_Java 集合 List接口
[TOC] List接口 概述有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的 ...
- php接口和java接口_java和php接口的区别是什么
java和php接口的区别是:1.php接口中的抽象方法只能是public的,默认也是public权限:2.java中私有方法使用private修饰,供接口中的默认方法或者静态方法调用. [相关学习推 ...
- java的开发工具是什么_java都用什么开发工具
1 java都用什么开发工具 在实际开发中,Java也有多个应用方向,手机开发.桌面开发.企业级应用开发.嵌入式开发等.所以学好Java,无疑多了一把通往成功大门的钥匙.下面小编给大家说说java都用 ...
- java 类 抽象类 接口_Java抽象类和接口
抽象类和接口 一.抽象类和抽象方法 对于抽象类,首先需要介绍抽象方法,而抽象类因抽象方法的存在而存在 1.抽象方法 (1)必要性: 有些父类方法不确定如何写方法体,但是对于继承它的子类又必须用到这个方 ...
- java抽象类和接口_Java抽象类和接口类
Java中接口和抽象类的区别是什么?什么时候用接口?什么时候用抽象类?抽象类和接口存在的意义是什么?能解决哪些编程问题? 1)类关键字修饰符: 抽象类使用abstract修饰,含有抽象方法(使用abs ...
最新文章
- 概要设计阶段--组装测试计划
- Android机器人电池插件源码
- SqlServer 2014还原数据库时提示:无法在已有的上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件
- 报名开启!AI+科学计算专场直播:大咖齐聚×独家礼物,限量200份
- 关于Jsp页面的jstl标签的级联属性的异常。
- MSN消息提示类(II)
- 文件的上传下载(一)
- 深度学习入门:一文详解BP神经网络
- 洛谷 1583——魔法照片(排序Ex)
- 历届二级c语言pdf,国家计算机二级C语言历年真题与答案.pdf
- 优控触摸屏使用手册_中达优控plc触摸屏一体机说明书资料
- lamp一键配置 --转自秋水
- java 三维旋转立方体_旋转立方体实现
- 智能数字看板解决方案
- U盘fat32、ntfs和exfat区别
- js获取传统节假日_js判断节假日的代码分享
- PSAM卡相关知识整理
- 视频号怎么赚钱?视频号有什么功能?
- srs10流程图_srs技术文档说明
- DayDayUp:上海地铁线路高清图、1~17号地铁线路各站点名称及对应路线集合之详细攻略
热门文章
- 软件开发项目中如何进行风险管理
- 关于删除 srvinstw安装的服务
- 磁盘分区 如何分出整数
- php第三方分享插件下载地址,PhpWind安装分享插件
- 目标检测应用竞赛 | 天池铝型材表面瑕疵(含数据集、详细解决方案)
- 推荐一个免费内网穿透穿软件(附带一个git下载加速地址)
- win10激活方法 电脑病毒和防威胁按键是灰色的,密钥无效的,无法激活的时候怎么强制激活电脑系统
- python中grid的用法_SVM中如何使用grid.py
- 如何便捷获取参考文献的引用格式?
- windows_2008_server无法安装vcredist_x64