微信支付接口开发——支付

这几天在做支付服务,系统接入了支付宝、微信、银联三方支付接口。个人感觉支付宝的接口开发较为简单,并且易于测试。

关于数据传输,微信是用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微信支付接口开发——支付相关推荐

  1. java app微信支付接口_JAVA微信APP支付接口整合

    上次我们看到了支付宝的APP支付工具,那么这次就来封装封装微信的APP支付;如果已经清楚了支付宝的支付流程,那么微信支付也和它大同小异了,当然这其中肯定是有各种变化的: 首先让我把微信支付文档的官网贴 ...

  2. java微信支付代码_Java微信支付之服务号支付代码示例

    Java微信支付之服务号支付实现,网上的java微信支付sdk和Demo基本上是水的,看着头疼所以我决心自己开始写Java微信支付之公众号支付,多的不说见下面源码,为了方便使用我分别用了两个Servl ...

  3. java实现阿里支付接口_Java后台使用支付宝进行支付实现---使用阿里提供的对应服务的支付宝接口...

    [支付宝相关资源下载地址:支付宝开放平台  在移动支付功能处下载. 一.使用官方的Demo 需要配置基本信息: 打开"APViewController.m"文件,对以下三个参数进行 ...

  4. Java怎么做三端_Java三端分离开发在线教育平台

    第1章 课程项目整体概述(整体介绍及Eclipse,Maven,新浪SAE软件平台介绍) 系统通过maven构建一个portal站,在sae上部署,让同学们感受一下互联网应用的魅力: 1-1 --课程 ...

  5. java runnable接口_java实现Runnable接口适合资源的共享

    本文为大家分享了java实现Runnable接口适合资源的共享,供大家参考,具体内容如下 Java当中,创建线程通常用两种方式: 1.继承Thread类 2.实现Runnable接口 但是在通常的开发 ...

  6. java list 接口_Java 集合 List接口

    [TOC] List接口 概述有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的 ...

  7. php接口和java接口_java和php接口的区别是什么

    java和php接口的区别是:1.php接口中的抽象方法只能是public的,默认也是public权限:2.java中私有方法使用private修饰,供接口中的默认方法或者静态方法调用. [相关学习推 ...

  8. java的开发工具是什么_java都用什么开发工具

    1 java都用什么开发工具 在实际开发中,Java也有多个应用方向,手机开发.桌面开发.企业级应用开发.嵌入式开发等.所以学好Java,无疑多了一把通往成功大门的钥匙.下面小编给大家说说java都用 ...

  9. java 类 抽象类 接口_Java抽象类和接口

    抽象类和接口 一.抽象类和抽象方法 对于抽象类,首先需要介绍抽象方法,而抽象类因抽象方法的存在而存在 1.抽象方法 (1)必要性: 有些父类方法不确定如何写方法体,但是对于继承它的子类又必须用到这个方 ...

  10. java抽象类和接口_Java抽象类和接口类

    Java中接口和抽象类的区别是什么?什么时候用接口?什么时候用抽象类?抽象类和接口存在的意义是什么?能解决哪些编程问题? 1)类关键字修饰符: 抽象类使用abstract修饰,含有抽象方法(使用abs ...

最新文章

  1. 概要设计阶段--组装测试计划
  2. Android机器人电池插件源码
  3. SqlServer 2014还原数据库时提示:无法在已有的上还原文件,请重新发出RESTORE语句,用WITH REPLACE来覆盖原先存在的文件
  4. 报名开启!AI+科学计算专场直播:大咖齐聚×独家礼物,限量200份
  5. 关于Jsp页面的jstl标签的级联属性的异常。
  6. MSN消息提示类(II)
  7. 文件的上传下载(一)
  8. 深度学习入门:一文详解BP神经网络
  9. 洛谷 1583——魔法照片(排序Ex)
  10. 历届二级c语言pdf,国家计算机二级C语言历年真题与答案.pdf
  11. 优控触摸屏使用手册_中达优控plc触摸屏一体机说明书资料
  12. lamp一键配置 --转自秋水
  13. java 三维旋转立方体_旋转立方体实现
  14. 智能数字看板解决方案
  15. U盘fat32、ntfs和exfat区别
  16. js获取传统节假日_js判断节假日的代码分享
  17. PSAM卡相关知识整理
  18. 视频号怎么赚钱?视频号有什么功能?
  19. srs10流程图_srs技术文档说明
  20. DayDayUp:上海地铁线路高清图、1~17号地铁线路各站点名称及对应路线集合之详细攻略

热门文章

  1. 软件开发项目中如何进行风险管理
  2. 关于删除 srvinstw安装的服务
  3. 磁盘分区 如何分出整数
  4. php第三方分享插件下载地址,PhpWind安装分享插件
  5. 目标检测应用竞赛 | 天池铝型材表面瑕疵(含数据集、详细解决方案)
  6. 推荐一个免费内网穿透穿软件(附带一个git下载加速地址)
  7. win10激活方法 电脑病毒和防威胁按键是灰色的,密钥无效的,无法激活的时候怎么强制激活电脑系统
  8. python中grid的用法_SVM中如何使用grid.py
  9. 如何便捷获取参考文献的引用格式?
  10. windows_2008_server无法安装vcredist_x64